public void Upgrade(Buildable building) { int i = _buildings.FindIndex (b => b == building); if (i >= 0) { int bx = i % Map.Width; int @by = i / Map.Width; if (building.CurrentUpgradeIndex < building.Upgrades.Count - 1) { _buildings[i].CurrentUpgradeIndex++; Cash -= _buildings[i].CurrentUpgrade.Price; } } }
public bool CanAfford(Buildable.UpgradeInfo upgrade) { return upgrade == null || upgrade.Price <= Cash; }
public void Sell(Buildable building) { int i = _buildings.FindIndex (b => b == building); if (i < 0) return; var p = new Point (i % Map.Width, i / Map.Width); if (Navigation.Rebuild (_blockers.Where(b => b != p))) { RemoveObject (_buildings[i]); Cash += _buildings[i].CurrentUpgrade.Price; _buildings[i] = null; _blockers.Remove(p); } else { _blockers.Add(p); } }
public bool BuildAt(int bx, int @by, Buildable.UpgradeInfo bu) { if (bx < 0 || bx >= Map.Width || @by < 0 || @by >= Map.Height) return false; if (bx == Map.Base.BlockX && @by == Map.Base.BlockY) return false; int i = bx + @by * Map.Width; if (_buildings[i] == null && bu.Type != null) { _blockers.Add (new Point (bx, @by)); if (Navigation.Rebuild (_blockers)) { _buildings[i] = (Buildable)System.Activator.CreateInstance(bu.Type, new object[] { this, bx * 32 + 16, @by * 32 + 16 }); _buildings[i].Upgrades = _config.GetBuildableUpgrades(bu.TypeId).ToList(); _buildings[i].CurrentUpgradeIndex = 0; AddObject (_buildings[i]); Cash -= _buildings[i].CurrentUpgrade.Price; return true; } else { _blockers.RemoveAt (_blockers.Count - 1); } } return false; }