Example #1
0
        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;
                }
            }
        }
Example #2
0
 public bool CanAfford(Buildable.UpgradeInfo upgrade)
 {
     return upgrade == null || upgrade.Price <= Cash;
 }
Example #3
0
        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);
            }
        }
Example #4
0
        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;
        }