Fan website of IMMORTAL: Gates of Pyre.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

229 lines
6.8 KiB

@implements IDisposable
<InputPanelComponent>
<div class="keyContainer">
@foreach (var hotkey in hotkeys) {
if (hotkey.IsHidden) {
continue;
}
var color = hotkey.KeyText.Equals("SPACE") && KeyService.IsHoldingSpace() || KeyService.GetAllPressedKeys().Contains(hotkey.KeyText)
? "#0a0f12" : hotkey.GetColor();
var x = hotkey.PositionX * Size;
var y = hotkey.PositionY * Size;
var border = "1px solid black";
if (hotkey.KeyText.Equals(_key)) {
border = "5px solid black";
}
if (hotkey.KeyText.Equals(_controlGroup)) {
border = "5px solid green";
}
if (hotkey.KeyText.Equals("SPACE") && KeyService.IsHoldingSpace()) {
border = "5px solid green";
}
<div style="position:relative;
cursor:pointer;
top:@y.ToString()px;
left:@x.ToString()px;
width: 0px;
height: 0px;">
<div @onclick="x => { if (hotkey.KeyText.Equals(HotKeyType.SPACE.ToString())) { if (KeyService.IsHoldingSpace()) { KeyService.RemovePressedKey(hotkey.KeyText); } else { KeyService.AddPressedKey(hotkey.KeyText); } } else { KeyService.AddPressedKey(hotkey.KeyText); KeyService.RemovePressedKey(hotkey.KeyText); }}" style="background-color:@color;
border: @border;
width: @Size.ToString()px;
height: @Size.ToString()px;
overflow: hidden;
padding: 4px;">
@hotkey.KeyText
@foreach (var entity in data.Values) {
if (!BuildOrderService.MeetsRequirements(entity, 9000)) {
continue;
}
if (InvalidKey(entity, hotkey) || InvalidKeyGroup(entity, hotkey) || InvalidHoldSpace(entity)) {
continue;
}
if (InvalidFaction(entity) || InvalidVanguard(entity) || InvalidNonVanguard(entity)) {
continue;
}
var isVanguard = entity.Vanguard() != null;
var style = isVanguard ? "font-weight: bold;" : "";
<div style="@style">@entity.Info()?.Name</div>
}
</div>
</div>
}
</div>
</InputPanelComponent>
<style>
.keyContainer {
width: 400px;
max-width: 95vw;
height: 400px;
outline: 3px solid black;
border-radius: 8px;
background-color: #282A30;
margin: auto;
}
@@media only screen and (max-width: 1025px) {
.keyContainer {
transform: scale(0.85) translateX(-20px);
background-color: none;
outline: none;
}
}
</style>
@code {
[Parameter]
public int Size { get; set; } = 100;
[Inject]
public IKeyService KeyService { get; set; }
[Inject]
public IBuildOrderService BuildOrderService { get; set; }
[Inject]
public IImmortalSelectionService FilterService { get; set; }
readonly Dictionary<string, EntityModel> data = EntityModel.GetDictionary();
readonly List<HotkeyModel> hotkeys = HotkeyModel.GetAll();
public string _controlGroup = "C";
public string _key = "";
protected override void OnInitialized() {
base.OnInitialized();
KeyService.Subscribe(OnKeyPressed);
FilterService.Subscribe(StateHasChanged);
}
void IDisposable.Dispose() {
KeyService.Unsubscribe(OnKeyPressed);
FilterService.Unsubscribe(StateHasChanged);
}
// Move to Filter Service
bool InvalidFaction(EntityModel entity) {
if (entity.Faction() != null && entity.Faction()?.Faction != FilterService.GetFactionType() && FilterService.GetFactionType() != FactionType.Any) {
return true;
}
return false;
}
// Move to Filter Service
bool InvalidVanguard(EntityModel entity) {
if (entity.Vanguard() != null && entity.Vanguard()?.Immortal != FilterService.GetImmortalType() && FilterService.GetImmortalType() != ImmortalType.Any) {
return true;
}
return false;
}
// Move to Filter Service
bool InvalidNonVanguard(EntityModel entity) {
if (entity.Replaceds().Count > 0) {
var isReplaced = false;
foreach (var replaced in entity.Replaceds()) {
if (FilterService.GetImmortalType() == replaced.Immortal) {
isReplaced = true;
break;
}
}
if (isReplaced) {
return true;
}
}
return false;
}
bool InvalidRequirements(EntityModel entity) {
return !BuildOrderService.MeetsRequirements(entity, 9000);
}
bool InvalidKey(EntityModel entity, HotkeyModel key) {
if (entity.Hotkey()?.Hotkey == key.KeyText) {
return false;
}
return true;
}
bool InvalidKeyGroup(EntityModel entity, HotkeyModel key) {
if (entity.Hotkey()?.HotkeyGroup == _controlGroup) {
return false;
}
return true;
}
bool InvalidKey(EntityModel entity) {
if (entity.Hotkey()?.Hotkey == _key) {
return false;
}
return true;
}
bool InvalidKeyGroup(EntityModel entity) {
if (entity.Hotkey()?.HotkeyGroup == _controlGroup) {
return false;
}
return true;
}
bool InvalidHoldSpace(EntityModel entity) {
if (entity.Hotkey()?.HoldSpace == KeyService.IsHoldingSpace()) {
return false;
}
return true;
}
void OnKeyPressed() {
if (KeyService.GetAllPressedKeys().Contains("Z")) {
_controlGroup = "Z";
}
if (KeyService.GetAllPressedKeys().Contains("TAB")) {
_controlGroup = "TAB";
}
if (KeyService.GetAllPressedKeys().Contains("C")) {
_controlGroup = "C";
}
if (KeyService.GetAllPressedKeys().Contains("D")) {
_controlGroup = "D";
}
if (KeyService.GetAllPressedKeys().Contains("1")) {
_controlGroup = "1";
}
//TODO This could be better. Duplicated code
if (KeyService.GetAllPressedKeys().Contains("2")) {
_controlGroup = "2";
}
if (KeyService.GetAllPressedKeys().Contains("SHIFT")) {
_controlGroup = "SHIFT";
}
if (KeyService.GetAllPressedKeys().Contains("CONTROL")) {
_controlGroup = "CONTROL";
}
if (KeyService.GetAllPressedKeys().Count > 0) {
_key = KeyService.GetAllPressedKeys().First();
}
StateHasChanged();
}
}