/* 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 Definse the general profile of the NPC * The NPC profile is set at creating time and can not be altered. * * Freelancer fallback value * Convoy Trade convoy member, prefers trade routes * Patrol Police or military, prefers patrol routes * Guard Guard an area * Wingman wingman, prefers protecting its leader * */ enum Profile { ProfileFreelancer = 0, ProfileConvoy = 1, ProfilePatrol = 2, ProfileGuard = 3, ProfileWingman = 4 }; /** * @brief Defines the general moode of the NPC * Wander Wamder around * Formation Follow the leader in formation * */ enum Mood { MoodWander = 0, MoodFormation = 1 }; NPC(const Profile profile, const ShipModel *shipmodel); /* ---- inspectors ----------------------------------------- */ /** * @brief Treturns te general profile of the NPC * The NPC profile is set at creating time and can not be altered. * */ inline const Profile profile() const { return npc_profile; } /** * @brief returns the general moode 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; } /* ---- 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 game frame * */ virtual void frame(const unsigned long elapsed); /** * @brief factory function for wingman NPCs * */ static NPC *add_wingman(Ship *leader); private: Profile npc_profile; Mood npc_mood; Ship *npc_leader; Patrol *npc_patrol; unsigned long npc_destroyed_timestamp; }; // class NPC } // namespace game #endif // __INCLUDED_BASE_NPC_H__