/// <summary> /// Tower upgrading /// </summary> /// <returns>upgrading cost</returns> internal int Upgrade() { int upCost; Level++; if (_params.UnlimitedUp)//unlimited update { _currentTowerParams.AttackRadius += _params.UpgradeParams[1].AttackRadius; _currentMaxCooldown -= _params.UpgradeParams[1].Cooldown; if (_currentMaxCooldown < 0) _currentMaxCooldown = 0; _currentTowerParams.Damage += _params.UpgradeParams[1].Damage; _currentTowerParams.Cost = _params.UpgradeParams[1].Cost; upCost = _currentTowerParams.Cost; } else { if (Level == _params.UpgradeParams.Count)//limited upgrade CanUpgrade = false; int tmp = _currentTowerParams.Cooldown; _currentTowerParams = _params.UpgradeParams[Level - 1]; _currentTowerParams.Cooldown = tmp; _currentMaxCooldown = _params.UpgradeParams[Level - 1].Cooldown; //[0].Picture till no picture for every tower level _currentTowerParams.Picture = _params.UpgradeParams[0].Picture; upCost = _currentTowerParams.Cost; } return upCost; }
/// <summary> /// Initializes a new instance of the <see cref="Tower"/> class. /// </summary> /// <param name="Params">The params.</param> /// <param name="arrayPos">The array pos.</param> /// <param name="confHash">The conf hash.</param> /// <param name="scaling">The scaling.</param> private Tower(TowerParam Params, Point arrayPos, string confHash, float scaling = 1F) { _params = Params; ArrayPos = new Point(arrayPos.X, arrayPos.Y); Scaling = scaling; Level = 1; _confHash = string.Copy(confHash); _currentTowerParams = _params.UpgradeParams[Level - 1]; CanUpgrade = _params.UpgradeParams.Count > 1; _currentTowerParams.Cooldown = 0; _currentMaxCooldown = _params.UpgradeParams[0].Cooldown; _towerCenterPos = new Point((ArrayPos.X + 1) * Settings.ElemSize, (ArrayPos.Y + 1) * Settings.ElemSize); _currentTowerParams.Picture.MakeTransparent(Color.FromArgb(255, 0, 255)); }