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(); }
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; } }
public override bool ActionOperation(EnemyAttacker tower, Player player) { Minion minion = tower.AttackMode.SelectEnemy(tower, player.Minions); tower.Target = minion; return(tower.Target != null); }
void Start() { attack = transform.parent.gameObject.GetComponent <EnemyAttacker>(); if (attack == null) { Debug.LogError("Enemy have an attack range but no EnemyAttacking!"); } }
public TowerActionState Action(EnemyAttacker tower, Player player) { if (currentState.ActionOperation(tower, player)) { currentState.GetNextState(this); } return(currentState); }
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; } } }
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]++; }
public override bool ActionOperation(EnemyAttacker tower, Player player) { ticksBeforeShot--; var finishedReloading = ticksBeforeShot == 0; if (ticksBeforeShot == 0) { ticksBeforeShot = GameUtils.SHOOT_EVERY_X_TICK; } return(finishedReloading); }
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]); } } }
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]++; }
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]++; }
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); }
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; }
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); }
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); }
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); }
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); }
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; } }
public abstract bool ActionOperation(EnemyAttacker tower, Player player);
void Awake() { stageManager = GetComponent <StageManager>(); enemyAttacker = enemyGO.GetComponent <EnemyAttacker>(); enemyManager = enemyGO.GetComponent <EnemyManager>(); }
void Awake() { attacker = GetComponent <EnemyAttacker>(); }
public void Remove(EnemyAttacker tower) { Towers.Remove(tower); }
public virtual EnemyAttacker BuildTower(Position position) { enemyAttacker = new Tower(position); return(enemyAttacker); }
void Awake() { _stateMachine = new StateMachine(this, GetComponent <FieldOfView>(), GetComponent <HealthSystem>(), GetComponent <EnemyMovement>()); _enemyAttacker = GetComponent <EnemyAttacker>(); }