Пример #1
0
        static void Main(string[] args)
        {
            EnemyTank     tank     = new EnemyTank();
            EnemyAttacker attacker = tank;

            //tank.assignDriver("Janusz");
            //tank.fireWeapon();
            //tank.driveForward();
            attacker.assignDriver("Mark");
            attacker.fireWeapon();
            attacker.driveForward();

            Console.WriteLine();

            EnemyRobot robot = new EnemyRobot();

            robot.reactToHuman("Tadek");
            robot.smashWithHands();
            robot.walkForward();

            Console.WriteLine();

            EnemyRobotAdapter robotAdapter = new EnemyRobotAdapter(robot);

            attacker = robotAdapter;
            attacker.assignDriver("Luck");
            attacker.fireWeapon();
            attacker.driveForward();

            Console.ReadKey();
        }
Пример #2
0
        public void UpgradeTower(string name, string towerId, string type)
        {
            Player player = _game.GetPlayer(name);

            if (player == null)
            {
                return;
            }

            int           id    = int.Parse(towerId);
            EnemyAttacker tower = GetTower(player, id);

            if (tower == null)
            {
                return;
            }

            switch (type)
            {
            case "damage":
                UpdateTower(player, id, new HighDamage(tower));
                return;

            case "rate":
                UpdateTower(player, id, new HighRate(tower));
                return;

            case "range":
                UpdateTower(player, id, new LongRange(tower));
                return;

            default:
                return;
            }
        }
Пример #3
0
        public override bool ActionOperation(EnemyAttacker tower, Player player)
        {
            Minion minion = tower.AttackMode.SelectEnemy(tower, player.Minions);

            tower.Target = minion;
            return(tower.Target != null);
        }
Пример #4
0
 void Start()
 {
     attack = transform.parent.gameObject.GetComponent <EnemyAttacker>();
     if (attack == null)
     {
         Debug.LogError("Enemy have an attack range but no EnemyAttacking!");
     }
 }
Пример #5
0
 public TowerActionState Action(EnemyAttacker tower, Player player)
 {
     if (currentState.ActionOperation(tower, player))
     {
         currentState.GetNextState(this);
     }
     return(currentState);
 }
Пример #6
0
 private void UpdateTower(Player player, int towerId, EnemyAttacker attacker)
 {
     for (int i = 0; i < player.Towers.Count; i++)
     {
         if (player.Towers[i].Id == towerId)
         {
             player.Towers[i] = attacker;
         }
     }
 }
Пример #7
0
        public LongRange(EnemyAttacker attacker) : base(attacker)
        {
            Range = (int)(_attacker.Range * 1.1);
            string upgrade = "range";

            if (!attacker.Upgrades.ContainsKey(upgrade))
            {
                attacker.Upgrades.Add(upgrade, 0);
            }
            attacker.Upgrades[upgrade]++;
        }
Пример #8
0
        public override bool ActionOperation(EnemyAttacker tower, Player player)
        {
            ticksBeforeShot--;
            var finishedReloading = ticksBeforeShot == 0;

            if (ticksBeforeShot == 0)
            {
                ticksBeforeShot = GameUtils.SHOOT_EVERY_X_TICK;
            }
            return(finishedReloading);
        }
Пример #9
0
 public void TowersAction()
 {
     for (int i = 0; i < GameUtils.PLAYER_COUNT; i++)
     {
         ITowerIterator iterator = _game.players[i].Towers.CreateIterator();
         for (EnemyAttacker tower = iterator.First(); !iterator.IsDone; tower = iterator.Next())
         {
             tower.TowerAction.Action(tower, _game.players[i]);
         }
     }
 }
Пример #10
0
        public HighDamage(EnemyAttacker attacker) : base(attacker)
        {
            Damage = (int)(_attacker.Damage * 1.1);
            string upgrade = "damage";

            if (!attacker.Upgrades.ContainsKey(upgrade))
            {
                attacker.Upgrades.Add(upgrade, 0);
            }
            attacker.Upgrades[upgrade]++;
        }
Пример #11
0
        public HighRate(EnemyAttacker attacker) : base(attacker)
        {
            Rate = (int)(_attacker.Rate * 1.2);
            string upgrade = "rate";

            if (!attacker.Upgrades.ContainsKey(upgrade))
            {
                attacker.Upgrades.Add(upgrade, 0);
            }
            attacker.Upgrades[upgrade]++;
        }
Пример #12
0
        private EnemyAttacker GetTower(Player player, int towerId)
        {
            ITowerIterator iterator = player.Towers.CreateIterator();

            for (EnemyAttacker tower = iterator.First(); !iterator.IsDone; tower = iterator.Next())
            {
                if (tower.Id == towerId)
                {
                    return(tower);
                }
            }
            return(null);
        }
Пример #13
0
 public TowerDecorator(EnemyAttacker attacker)
 {
     Id          = attacker.Id;
     Name        = attacker.Name;
     Damage      = attacker.Damage;
     Range       = attacker.Range;
     Rate        = attacker.Rate;
     Position    = attacker.Position;
     Price       = attacker.Price;
     AttackMode  = attacker.AttackMode;
     Upgrades    = attacker.Upgrades;
     TowerAction = attacker.TowerAction;
     Target      = attacker.Target;
     _attacker   = attacker;
 }
Пример #14
0
        public Minion SelectEnemy(EnemyAttacker tower, List <Minion> minions)
        {
            int    strongestHealth = int.MinValue;
            Minion strongest       = null;

            foreach (Minion minion in minions)
            {
                double distance = GameUtils.CalculateDistance(tower.Position, minion.Position);
                if (distance < tower.Range && minion.Health > strongestHealth)
                {
                    strongestHealth = minion.Health;
                    strongest       = minion;
                }
            }
            return(strongest);
        }
Пример #15
0
        public Minion SelectEnemy(EnemyAttacker tower, List <Minion> minions)
        {
            double furthestDistance = double.MinValue;
            Minion furthest         = null;

            foreach (Minion minion in minions)
            {
                double distance = GameUtils.CalculateDistance(tower.Position, minion.Position);
                if (distance < tower.Range && distance > furthestDistance)
                {
                    furthestDistance = distance;
                    furthest         = minion;
                }
            }
            return(furthest);
        }
Пример #16
0
        public override bool ActionOperation(EnemyAttacker tower, Player player)
        {
            tower.Target.Health -= tower.Damage;
            if (tower.Target.Health <= 0)
            {
                player.Money += tower.Target.Reward;
                player.Score++;
                if (player.Score % 50 == 0)
                {
                    player.NotifyConsole(string.Format("Player {0} hit {1} score!", player.Name, player.Score));
                }
                ;                player.Minions.Remove(tower.Target);
            }

            return(true);
        }
Пример #17
0
        public void SellTower(string name, string towerId)
        {
            Player player = _game.GetPlayer(name);

            if (player == null)
            {
                return;
            }

            int           id    = int.Parse(towerId);
            EnemyAttacker tower = GetTower(player, id);

            if (tower == null)
            {
                return;
            }

            player.Towers.Remove(tower);
        }
Пример #18
0
        public void ChangeAttackMode(string name, string towerId, string mode)
        {
            Player player = _game.GetPlayer(name);

            if (player == null)
            {
                return;
            }

            EnemyAttacker tower = GetTower(player, int.Parse(towerId));

            if (tower == null)
            {
                return;
            }

            Enum.TryParse(mode.ToUpper(), out AttackMode attackMode);
            switch (attackMode)
            {
            case AttackMode.CLOSEST:
                tower.AttackMode = new SelectClosestMinion();
                return;

            case AttackMode.FURTHEST:
                tower.AttackMode = new SelectFurthestMinion();
                return;

            case AttackMode.WEAKEST:
                tower.AttackMode = new SelectWeakestMinion();
                return;

            case AttackMode.STRONGEST:
                tower.AttackMode = new SelectStrongestMinion();
                return;

            default:
                return;
            }
        }
Пример #19
0
 public abstract bool ActionOperation(EnemyAttacker tower, Player player);
Пример #20
0
 void Awake()
 {
     stageManager  = GetComponent <StageManager>();
     enemyAttacker = enemyGO.GetComponent <EnemyAttacker>();
     enemyManager  = enemyGO.GetComponent <EnemyManager>();
 }
Пример #21
0
 void Awake()
 {
     attacker = GetComponent <EnemyAttacker>();
 }
Пример #22
0
 public void Remove(EnemyAttacker tower)
 {
     Towers.Remove(tower);
 }
Пример #23
0
 public virtual EnemyAttacker BuildTower(Position position)
 {
     enemyAttacker = new Tower(position);
     return(enemyAttacker);
 }
Пример #24
0
 void Awake()
 {
     _stateMachine = new StateMachine(this, GetComponent <FieldOfView>(),
                                      GetComponent <HealthSystem>(), GetComponent <EnemyMovement>());
     _enemyAttacker = GetComponent <EnemyAttacker>();
 }