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; } }
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; }