public override void Update(GameBoard board) { }
public GameEngine(Position size) { m_board = new GameBoard(11, 12, size); m_status = enGameStatus.Live; }
public abstract void Update(GameBoard board);
public override void Update(GameBoard board) { double range2 = GameUtils.Sqr(m_range * board.Grid.Size); Position tower_position = board.Grid.GetCellCenter(this.Position); bool shots_fired = false; LinkedList <GameAgent> dead_targets = new LinkedList <GameAgent>(); //check existing targets foreach (GameAgent target in m_targets) { if (target.isAlive) { double temp = (target.Position - tower_position).Length2; if (temp < range2) { target.DoDamage(m_damage, enDamageType.Physical); shots_fired = true; break; } } else { dead_targets.AddLast(target); } } foreach (GameAgent t in dead_targets) { m_targets.Remove(t); } //find closest target and shot it if (shots_fired == false) { int closest_agent = -1; double closest_agent_dist = Double.PositiveInfinity; for (int i = 0; i < board.Agents.Count; i++) { if (board.Agents[i].isAlive) { double temp = (board.Agents[i].Position - tower_position).Length2; if (temp < range2 && temp < closest_agent_dist) { closest_agent_dist = temp; closest_agent = i; } } } if (closest_agent >= 0) { GameAgent agent = board.Agents[closest_agent]; agent.DoDamage(m_damage, enDamageType.Physical); // board.Agents[closest_agent] m_targets.AddLast(agent); } } }