/* base/npc.h This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_BASE_NPC_H__ #define __INCLUDED_BASE_NPC_H__ #include "base/ship.h" namespace game { class Patrol; class NPC : public Ship { public: /** * @brief Defines the general moode of the NPC * Wander Wamder around * Formation Follow the leader in formation * Attack Attack at will * */ enum Mood { MoodWander = 0, MoodFormation = 1, MoodAttack = 2}; NPC(const ShipModel *shipmodel); virtual ~NPC(); /* ---- inspectors ----------------------------------------- */ /** * @brief returns the general mood of the NPC * */ inline const Mood mood() const { return npc_mood; } /** * @brief returns this NPC's leader * */ inline Ship *leader() { return npc_leader; } /** * @brief returns this NPC's patrol * */ inline Patrol *patrol() { return npc_patrol; } /** * @brief return this NPC;s fleet commander * */ inline core::Player *commander() { return npc_commander; } /* ---- mutators ------------------------------------------- */ /** * @brief Set the general moode of the NPC * */ void set_mood(const Mood mood); /** * @brief set the NPC's leader * */ void set_leader(Ship *leader); /** * @brief set the NPC's patrol * */ void set_patrol(Patrol *patrol); /** * @brief set the NPC's fleet commander * */ void set_commander(core::Player *player); /** * @brief game frame * */ virtual void frame(const unsigned long elapsed); /** * @brief factory function for wingman NPCs * */ static NPC *add_wingman(Ship *leader); /** * @brief aim at closest enemy in range, returns target * */ Ship *target_closest_enemy(); /** * @brief calculate weapon range * Calling calculate_weapon_range() will set npc_weapon_range. * */ void calculate_weapon_range(); private: Mood npc_mood; Ship *npc_leader; Patrol *npc_patrol; unsigned long npc_destroyed_timestamp; unsigned long npc_repair_timestamp; float npc_weapon_range; core::Player *npc_commander; }; // class NPC } // namespace game #endif // __INCLUDED_BASE_NPC_H__