Exemple #1
0
        public void UpdateAffordability(int currentSatoshis, bool allowUpgrade)
        {
            if (structureShown == null)
            {
                return;
            }

            var upgradeCount      = structureShown.GetCurrentlyAppliedUpgrades().Count;
            var upgradesAvailable = upgradeCount < Enum.GetNames(typeof(UpgradeTypes)).Length;

            if (allowUpgrade && upgradesAvailable)
            {
                var upgradeCost = upgradeCount == 0
                    ? FirstUpgradeCost
                    : upgradeCount == 1
                        ? SecondUpgradeCost
                        : FinalUpgradeCost;

                if (currentSatoshis >= upgradeCost)
                {
                    CurrentUpgradeAvailabilityState = UpgradeAvailability.Available;
                    UpgradeInfoInstance.PulseAnimation.Play();
                }
                else
                {
                    if (UpgradeInfoInstance.PulseAnimation.IsPlaying())
                    {
                        UpgradeInfoInstance.PulseAnimation.Stop();
                    }
                    CurrentUpgradeAvailabilityState = UpgradeAvailability.AvailableCantAfford;
                }
            }
            else
            {
                if (UpgradeInfoInstance.PulseAnimation.IsPlaying())
                {
                    UpgradeInfoInstance.PulseAnimation.Stop();
                }
                CurrentUpgradeAvailabilityState = UpgradeAvailability.NotAvailable;
            }
        }
Exemple #2
0
        private void SetDisplayFor(BaseStructure structure, int currentSatoshis, bool allowUpgrades)
        {
            Visible           = true;
            FirstUpgradeCost  = (int)(structure.SatoshiCost * 0.5);
            SecondUpgradeCost = (int)(structure.SatoshiCost * 1.25);
            FinalUpgradeCost  = (int)(structure.SatoshiCost * 2);
            structureShown    = structure;

            var minMaxX = (CameraZoomManager.OriginalOrthogonalWidth - GetAbsoluteWidth()) / 2;
            var minMaxY = (CameraZoomManager.OriginalOrthogonalHeight - GetAbsoluteHeight()) / 2;

            var newX = (structureShown.X - Camera.Main.X) * CameraZoomManager.GumCoordOffset;
            var newY = (structureShown.Y - Camera.Main.Y) *
                       CameraZoomManager.GumCoordOffset + GetAbsoluteHeight() / 2;

            X = MathHelper.Clamp(newX, -minMaxX, minMaxX);
            Y = MathHelper.Clamp(newY, -minMaxY, minMaxY);

            StructureName = structureShown.DisplayName;
            AttackDamageType.ResistanceText = structure.AttackDamage.ToString();
            SatoshiCost                 = structure.SatoshiCost.ToString();
            MinRange.AttributeText      = structure.MinimumRangeRadius.ToString();
            MaxRange.AttributeText      = structure.RangedRadius.ToString();
            AttackSpeed.AttributeText   = structure.SecondsBetweenFiring + " sec";
            PointOrSplash.AttributeText = structure.HasSplashDamage ? "Group" : "Single";
            SetIcon(structure.GetType());

            var structureUpgrades = structure.GetCurrentlyAppliedUpgrades();

            MaxRange.CurrentUpgradedState = structureUpgrades.Contains(UpgradeTypes.Range)
                ? AttributeDisplayRuntime.Upgraded.IsUpgraded
                : AttributeDisplayRuntime.Upgraded.NotUpgraded;

            MinRange.CurrentUpgradedState = structureUpgrades.Contains(UpgradeTypes.Range)
                ? AttributeDisplayRuntime.Upgraded.IsUpgradedNoArrow
                : AttributeDisplayRuntime.Upgraded.NotUpgraded;

            AttackSpeed.CurrentUpgradedState = structureUpgrades.Contains(UpgradeTypes.Speed)
                ? AttributeDisplayRuntime.Upgraded.IsUpgraded
                : AttributeDisplayRuntime.Upgraded.NotUpgraded;

            AttackDamageType.CurrentUpgradedState = structureUpgrades.Contains(UpgradeTypes.Damage)
                ? ResistanceDisplayRuntime.Upgraded.IsUpgraded
                : ResistanceDisplayRuntime.Upgraded.NotUpgraded;

            var upgradeCount = structureUpgrades.Count;

            var upgradeCost = upgradeCount == 0
                ? FirstUpgradeCost
                : upgradeCount == 1
                    ? SecondUpgradeCost
                    : FinalUpgradeCost;

            if (upgradeCount == 3)
            {
                if (UpgradeInfoInstance.PulseAnimation.IsPlaying())
                {
                    UpgradeInfoInstance.PulseAnimation.Stop();
                }
                CurrentUpgradeAvailabilityState = UpgradeAvailability.NotAvailable;
            }
            else
            {
                var canAffordUpgrade = currentSatoshis >= upgradeCost;

                var hasSpeedUpgrade  = structureUpgrades.Contains(UpgradeTypes.Speed);
                var hasRangeUpgrade  = structureUpgrades.Contains(UpgradeTypes.Range);
                var hasDamageUpgrade = structureUpgrades.Contains(UpgradeTypes.Damage);

                UpgradeInfoInstance.SatoshiCostText = upgradeCost.ToString();
                UpgradeInfoInstance.CurrentOptionsAvailabilityState = upgradeCount == 2
                    ? UpgradeInfoRuntime.OptionsAvailability.OneOption
                    : UpgradeInfoRuntime.OptionsAvailability.TwoOptions;

                if (upgradeCount == 0)
                {
                    SetBothUpgradeButtonsFor(UpgradeTypes.Range, UpgradeTypes.Speed, upgradeCost, canAffordUpgrade);
                }
                else if (upgradeCount == 2)
                {
                    UpgradeTypes upgradeRemaining;

                    if (hasDamageUpgrade && hasSpeedUpgrade)
                    {
                        upgradeRemaining = UpgradeTypes.Range;
                    }
                    else if (hasDamageUpgrade && hasRangeUpgrade)
                    {
                        upgradeRemaining = UpgradeTypes.Speed;
                    }
                    else
                    {
                        upgradeRemaining = UpgradeTypes.Damage;
                    }

                    SetSingleUpgradeButtonFor(upgradeRemaining, upgradeCost, canAffordUpgrade);
                }
                else
                {
                    var upgradeRemaining = hasSpeedUpgrade ? UpgradeTypes.Range : UpgradeTypes.Speed;

                    SetBothUpgradeButtonsFor(UpgradeTypes.Damage, upgradeRemaining, upgradeCost, canAffordUpgrade);
                }

                if (canAffordUpgrade)
                {
                    CurrentUpgradeAvailabilityState = UpgradeAvailability.Available;

                    UpgradeInfoInstance.CurrentAffordabilityState = UpgradeInfoRuntime.Affordability.CanAfford;
                    UpgradeInfoInstance.PulseAnimation.Play();
                }
                else
                {
                    CurrentUpgradeAvailabilityState = UpgradeAvailability.AvailableCantAfford;

                    if (UpgradeInfoInstance.PulseAnimation.IsPlaying())
                    {
                        UpgradeInfoInstance.PulseAnimation.Stop();
                    }
                    UpgradeInfoInstance.CurrentAffordabilityState = UpgradeInfoRuntime.Affordability.CantAfford;
                    UpgradeInfoInstance.OnUpgradeButton1Click     = null;
                    UpgradeInfoInstance.OnUpgradeButton2Click     = null;
                }
            }

            if (!allowUpgrades)
            {
                if (UpgradeInfoInstance.PulseAnimation.IsPlaying())
                {
                    UpgradeInfoInstance.PulseAnimation.Stop();
                }
                CurrentUpgradeAvailabilityState = UpgradeAvailability.NotAvailable;
            }

            CurrentCostInfoState = CostInfo.NotShown;
        }