@inject IJSRuntime jsRuntime; @implements IDisposable @inject IKeyService keyService @inject IBuildOrderService buildOrderService @inject IImmortalSelectionService filterService @inject IEconomyService economyService @inject ITimingService timingService @inject IToastService toastService
@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"; }
@hotkey.KeyText @foreach (var entity in data.Values) { if (buildOrderService.WillMeetRequirements(entity) == null) { continue; } if (InvalidKey(entity, hotkey) || InvalidKeyGroup(entity, hotkey) || InvalidHoldSpace(entity)) { continue; } if (InvalidFaction(entity) || InvalidVanguard(entity) || InvalidNonVanguard(entity)) { continue; } var isVanguard = entity.VanguardAdded() != null; var style = isVanguard ? "font-weight: bold;" : "";
@entity.Info()?.Name
}
}
@code { [Parameter] public int Size { get; set; } = 100; readonly Dictionary data = EntityModel.GetDictionary(); readonly List hotkeys = HotkeyModel.GetAll(); public string _controlGroup = "C"; public string _key = ""; protected override void OnInitialized() { base.OnInitialized(); keyService.Subscribe(OnKeyPressed); filterService.Subscribe(StateHasChanged); buildOrderService.Subscribe(OnBuilderOrderChanged); } void IDisposable.Dispose() { keyService.Unsubscribe(OnKeyPressed); filterService.Unsubscribe(StateHasChanged); buildOrderService.Unsubscribe(OnBuilderOrderChanged); } int completedTimeCount = 0; void OnBuilderOrderChanged() { if (buildOrderService.UniqueCompletedTimes.Count != completedTimeCount) { completedTimeCount = buildOrderService.UniqueCompletedTimes.Count; StateHasChanged(); } } protected override bool ShouldRender() { #if DEBUG jsRuntime.InvokeVoidAsync("console.time", "HotKeyViewerComponent"); #endif return true; } protected override void OnAfterRender(bool firstRender) { #if DEBUG jsRuntime.InvokeVoidAsync("console.timeEnd", "HotKeyViewerComponent"); #endif } // 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.VanguardAdded() != null && entity.VanguardAdded()?.ImmortalId != 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.ImmortalId) { isReplaced = true; break; } } if (isReplaced) { return true; } } return false; } 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() { string controlGroupWas = _controlGroup; string keyWas = _key; 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(); } // HandleClick(); if (controlGroupWas != _controlGroup || keyWas != _key) { StateHasChanged(); } } private void HandleClick() { var hotkey = keyService.GetHotkey(); if (hotkey == "") { return; } if (hotkey == "`") { buildOrderService.RemoveLast(); economyService.Calculate(buildOrderService, timingService, buildOrderService.GetLastRequestInterval()); return; } var hotkeyGroup = keyService.GetHotkeyGroup(); var isHoldSpace = keyService.IsHoldingSpace(); var faction = filterService.GetFactionType(); var immortal = filterService.GetImmortalType(); EntityModel? entity = EntityModel.GetFrom(hotkey!, hotkeyGroup, isHoldSpace, faction, immortal); if (entity == null) { return; } if (buildOrderService.Add(entity, economyService, toastService)) { economyService.Calculate(buildOrderService, timingService, buildOrderService.GetLastRequestInterval()); } } }