Пример #1
0
 public void UpgradeTower(TowerView selectedTower)
 {
     if (selectedTower.CanBeUpgraded && TryChangeMoney(-selectedTower.UpgradeCost))
     {
         selectedTower.UpgradeTower();
     }
 }
Пример #2
0
    public static TowerController CreateTower(TowerType type, Tower model, TowerSpawnerController spawnerController, out GameObject gameObject)
    {
        GameObject towerInstance = null;
        GameObject prefab        = null;

        switch (type)
        {
        case TowerType.EARTH_TOWER:
            prefab = instance.earthTowerPrefab;
            break;

        case TowerType.FIRE_TOWER:
            prefab = instance.fireTowerPrefab;
            break;
        }
        towerInstance = Instantiate(prefab, instance.spawner.transform.position, instance.spawner.transform.rotation);

        TowerView       view       = towerInstance.GetComponent <TowerView>();
        TowerController controller = new TowerController(model, view, spawnerController);

        view.Controller = controller;
        controller.UpdateView();

        gameObject = towerInstance;

        return(controller);
    }
Пример #3
0
 public void DecreaseMoney(TowerView tower)
 {
     if (tower == null)
     {
         return;
     }
     money -= tower.Cost;
 }
Пример #4
0
        public void RemoveTower(TowerView selectedTower)
        {
            var towerModel = _towerViews.First(t => t.Value == selectedTower).Key;

            TryChangeMoney(towerModel.Cashback);
            Destroy(selectedTower.gameObject);
            _towerViews.Remove(towerModel);
            Map.RemoveTower(towerModel);
        }
Пример #5
0
 private void ShowTowerInterface(TowerView towerView)
 {
     DropBrush();
     _brushType     = "tower_interface";
     _selectedTower = towerView;
     _selectedTowerPanel.gameObject.SetActive(true);
     _selectedTowerUpgradeCost.text = towerView.CanBeUpgraded ? towerView.UpgradeCost.ToString() : "";
     _selectedTowerRemoveCost.text  = towerView.RemoveCashback.ToString();
 }
Пример #6
0
        private void DropBrush()
        {
            switch (_brushType)
            {
            case "tower":
                _towersToggleGroup.SetAllTogglesOff();
                _controller.ShowTowerGrid = false;
                _towerBrush.gameObject.SetActive(false);
                break;

            case "tower_interface":
                _selectedTower = null;
                _selectedTowerPanel.gameObject.SetActive(false);
                break;
            }
            _brushType = "none";
        }
Пример #7
0
        public Entity CreateTower(float x, float y, int level = 0)
        {
            var entity   = CreateEntity(EntityType.RedTank);
            var listFsm  = new Dictionary <string, EntityStateMachine>();
            var moveFSM  = new EntityStateMachine(entity);
            var aiFSM    = new EntityStateMachine(entity);
            var position = new Position(x, y, AntEnum.Parse <Direction>(r.Next(1, 5).ToString()));
            var myvars   = vars.Tower[level];
            var view     = new TowerView(myvars[5], position.direction);

            moveFSM.CreateState(States.Stand).Add <Stand>().WithInstance(new Stand());
            moveFSM.CreateState(States.Turn).Add <Turn>().WithInstance(new Turn());
            moveFSM.ChangeState(States.Stand);

            aiFSM.CreateState(States.Idle).Add <Idle>().WithInstance(new Idle(10));
            aiFSM.CreateState(States.Attack).Add <Attack>().WithInstance(new Attack());
            aiFSM.ChangeState(States.Idle);

            listFsm.Add("MoveFSM", moveFSM);
            listFsm.Add("AiFSM", aiFSM);

            entity
            .Add(position)
            .Add(view.GetView())
            .Add(new Health(myvars[2], myvars[4]))
            .Add(new Damage(100))
            .Add(new Tank())
            .Add(new FSM(listFsm))
            .Add(new AI(210, 210, new[] { EntityType.GreenTank }))
            .Add(new Gun(myvars[1], myvars[3]))
            .Add(new Collision(cellSize, 15))
            .Add(new Motion(Vector2.Zero, r.Next(CellType.Segment, 10000)))
            .Add(new ActionAfterDeath(() =>
            {
                gameField.ClearCell(position.position.Divide(cellSize.X));
                CreateEnemyExplosion(position.position);
                CreateQuake();
            }));

            CreateRedOverlay(entity);
            CreateGreenHealthBar(entity);
            AddCellToMap(x, y, CellType.Tower);

            return(entity);
        }