Exemple #1
0
        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;
            }
        }
Exemple #2
0
 public void UpdateIconCoolDown(IUpdatesStatus selectedEntity)
 {
     foreach (var button in this.IconButtonList)
     {
         button.UpdateDisplayFromEntiy(selectedEntity);
     }
 }
Exemple #3
0
        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
                });
            }
        }
Exemple #4
0
        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++;
                }
            }
        }
Exemple #5
0
        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;
        }
Exemple #6
0
        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);
        }
Exemple #7
0
 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));
 }
Exemple #8
0
 private void UpdateHealthState(IUpdatesStatus entity)
 {
     //ToDo: Discuss a health view option.
 }
Exemple #9
0
        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);
 }