/// <summary> /// Método privado que realiza a infeção de um agente. /// </summary> private void Infect() { // Agente passa a ser zombie e a ter movimento controlado por IA Kind = AgentKind.Zombie; Movement = AgentMovement.AI; moveBehavior = new AIMovement(AgentKind.Human, false, world); }
/// <summary> /// Método construtor, instancia um novo agente. /// </summary> /// <param name="id">ID único do agente.</param> /// <param name="pos">Posição inicial do agente.</param> /// <param name="kind"> /// Género inicial do agente (zombie ou humano). /// </param> /// <param name="movement">Tipo de movimento inicial do agente (por /// "inteligência artificial" ou controlado pelo jogador). /// </param> /// <param name="world">Referência ao mundo de simulação.</param> public Agent(int id, Coord pos, AgentKind kind, AgentMovement movement, World world) { // Género dos agentes considerados inimigos do agente a ser criado AgentKind enemy; // Indica se o agente a ser criado deve fugir (true) ou não (false) // dos inimigos bool runaway; // Guardar as referências passadas no construtor ID = id; Pos = pos; Kind = kind; Movement = movement; this.world = world; // Adicionar o agente ao mundo de simulação world.AddAgent(this); // Definir género dos inimigos e se o agente deve ou não fugir // deles, dependendo do género de agente a ser criado switch (kind) { case AgentKind.Zombie: // Se agente for zombie os seus inimigos são humanos e // não deve fugir deles (antes pelo contrário) enemy = AgentKind.Human; runaway = false; break; case AgentKind.Human: // Se agente for humando os seus inimigos são zombies e // deve fugir deles enemy = AgentKind.Zombie; runaway = true; break; default: // Lançar uma exceção caso seja um género desconhecido de // agente throw new InvalidEnumArgumentException( "Unknown agent kind"); } // Definir classe concreta que define o movimento dos agentes switch (movement) { case AgentMovement.Player: // Movimento controlado pelo jogador moveBehavior = new PlayerMovement(world); break; case AgentMovement.AI: // Movimento controlado por IA moveBehavior = new AIMovement(enemy, runaway, world); break; default: // Movimento desconhecido, lançar exceção throw new InvalidEnumArgumentException( "Unknown movement type"); } }