public void UpdateDisplayFromEntiy(IUpdatesStatus selectedEntity) { var key = HotkeyData.DataName; var progressValue = selectedEntity.ProgressPercents.ContainsKey(key) ? selectedEntity.ProgressPercents[key] : 0.0; var countValue = selectedEntity.ButtonCountDisplays.ContainsKey(key) ? selectedEntity.ButtonCountDisplays[key] : 0; if (progressValue > 0) { this.ProgressSprite.Visible = true; var currentTextureHeight = MathFunctions.RoundToInt(this.Height * progressValue); var heightDifference = m_ProgressSpriteOriginalHeight - currentTextureHeight; var newTop = (int)(m_ProgressSpriteOriginalTopCoordinate + heightDifference); //Add to move down the texture. this.ProgressSprite.TextureHeight = currentTextureHeight; this.ProgressSprite.TextureTop = newTop; } else { this.ProgressSprite.Visible = false; } if (countValue > 0) { this.TextInstance.Visible = true; this.TextInstance.Text = $"{countValue}"; } else { this.TextInstance.Visible = false; } }
public void UpdateIconCoolDown(IUpdatesStatus selectedEntity) { foreach (var button in this.IconButtonList) { button.UpdateDisplayFromEntiy(selectedEntity); } }
public void SetViewFromEntity(IUpdatesStatus selectedEntity) { //Player selected a different entity if (m_LastSelectedEntity != null && m_LastSelectedEntity != selectedEntity) { m_LastSelectedEntity.UpdateStatus -= ReactToBuilidingStatusChange; ActionStackContainerInstance.RemoveIconButtons(); } m_LastSelectedEntity = selectedEntity; if (m_LastSelectedEntity == null) { ActionStackContainerInstance.RemoveIconButtons(); SetVariableState(VariableState.SelectModeView); } else if (m_LastSelectedEntity is Entities.Building) { this.ResourceCostContainer.CurrentMenuTypeState = ResourceCostContainerRuntime.MenuType.TrainUnits; UpdateBuildingStatus(m_LastSelectedEntity as Entities.Building); SetVariableState(VariableState.SelectedEntity); m_LastSelectedEntity.UpdateStatus += ReactToBuilidingStatusChange; ShowAvailableUnits(m_LastSelectedEntity); } if (m_LastSelectedEntity != null) { this.ReactToUpdateUiChangeEvent(this, new UpdateUiEventArgs() { TitleDisplay = m_LastSelectedEntity.EntityData.MenuTitleDisplay }); } }
public void RefreshToggleButtonsTo(IUpdatesStatus selectedEntity) { RemoveIconButtons(); if (selectedEntity?.ButtonDatas != null) { int i = 0; foreach (var unit in selectedEntity.ButtonDatas) { var unitData = GlobalContent.UnitData[unit]; IconButtonRuntime unitButton = CreateNewIconButtonWithOffset(i, unitData, selectedEntity); unitButton.HotkeyData = unitData; unitButton.Click += (notused) => { if (unitButton.Enabled) { this.TrainUnitInvokedFromButton(unitButton, new TrainUnitEventArgs() { UnitData = unitData }); } }; i++; } } }
public void UpdateButtonEnabledState(int lumber, int stone, int gold, int currentCapacity, int maxCapacity, IEnumerable <Building> existingBuildings, IUpdatesStatus selectedBuilding) { var isEnabled = m_HotKeyData.ShouldEnableButton(lumber, stone, gold, currentCapacity, maxCapacity, existingBuildings, EntityCreatedFrom); //Only enable the button if the selected builidng has completed construction. if (selectedBuilding != null) { isEnabled &= selectedBuilding.IsConstructionComplete; } #if DEBUG if (Entities.DebuggingVariables.HasInfiniteResources) { isEnabled = true; } #endif Enabled = isEnabled; }
public int CapacityUsed => 0; //buildings don't consume capacity. public bool ShouldEnableButton(int lumber, int stone, int gold, int currentCapacity, int maxCapacity, IEnumerable <Building> existingBuildings, IUpdatesStatus entityCreatedFrom) { //ToDo: do we care about capacity? if (lumber < LumberCost || stone < StoneCost) { return(false); } foreach (var requirement in this.Requirements) { int numberRequired = requirement.Number; bool hasFulfilledRequirement = existingBuildings.Count(item => item.BuildingData.Name == requirement.Building) >= numberRequired; if (!hasFulfilledRequirement) { // todo - do we want to show requirements to the user? Probably... return(false); } } return(true); }
public bool ShouldEnableButton(int lumber, int stone, int gold, int currentCapacity, int maxCapacity, IEnumerable <Building> existingBuildings, IUpdatesStatus entityCreatedFrom) { //An entity button should be enabled if there is enough gold and either capacity exists or there are units in the training queue. return(GoldCost <= gold && ((currentCapacity + Capacity) <= maxCapacity || entityCreatedFrom?.ButtonCountDisplays?.Any(x => x.Value > 0) == true)); }
private void UpdateHealthState(IUpdatesStatus entity) { //ToDo: Discuss a health view option. }
private IconButtonRuntime CreateNewIconButtonWithOffset(int stackIndex, ICommonEntityData data, IUpdatesStatus selectedEntity = null) { IconButtonRuntime button = new IconButtonRuntime(); button.Parent = this; IconButtonList.Add(button); button.EntityCreatedFrom = selectedEntity; button.HotkeyData = data; button.X = stackIndex % 3 != 0 ? PixelsBetweenButtons : 0; button.Y = stackIndex > 2 && stackIndex % 3 == 0 ? PixelsBetweenButtons : 0; button.RollOn += (notused) => { UpdateUIDisplay?.Invoke(this, new UpdateUiEventArgs(data)); }; button.RollOff += (notused) => { //If we will default to the build menu if an entity is not selected when adding toggle buttons. var args = selectedEntity == null ? UpdateUiEventArgs.RollOffValue : new UpdateUiEventArgs() { TitleDisplay = selectedEntity.EntityData.MenuTitleDisplay }; UpdateUIDisplay?.Invoke(this, args); }; return(button); }
public void UpdateButtonEnabledStates(int lumber, int stone, int gold, int currentCapacity, int maxCapacity, IEnumerable <Building> existingBuildings, IUpdatesStatus selectedBuilding) { foreach (var button in ActionStackContainerInstance.IconButtonList) { button.UpdateButtonEnabledState(lumber, stone, gold, currentCapacity, maxCapacity, existingBuildings, selectedBuilding); } }
private void AddUnitOptionsToActionPanel(IUpdatesStatus units = null) { ActionStackContainerInstance.RefreshToggleButtonsTo(units); }
public void ShowAvailableUnits(IUpdatesStatus selectedEntity) { ActionStackContainerInstance.RefreshToggleButtonsTo(selectedEntity); SetVariableState(VariableState.SelectedEntity); }