/* base/shipmodel.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_SHIPMODEL_H__ #define __INCLUDED_BASE_SHIPMODEL_H__ #include #include "core/info.h" #include "core/entity.h" #include "base/template.h" namespace game { /// ship model specification class ShipModel : public core::Info { public: /// default constructor ShipModel(); /// default destructor virtual ~ShipModel(); /* ---- inspectors ------------------------------------------------ */ /// indicates if this model can be equiped with a jump drive inline const bool jumpdrive() const { return shipmodel_jumpdrive; } /// indicates if players can dock this ship model inline const bool dock() const { return shipmodel_dock; } /// default mass inline const float mass() const { return shipmodel_mass; } /// default impulse drive force inline const float impulse_force() const { return shipmodel_impulse_force; } /// default thruster force inline const float thrust_force() const { return shipmodel_thrust_force; } /// default strafe force inline const float strafe_force() const { return shipmodel_strafe_force; } /// default turn force inline const float turn_force() const { return shipmodel_turn_force; } /// default turn force inline const float roll_force() const { return shipmodel_roll_force; } /// maximum thrust speed inline const float maxspeed() const { return shipmodel_maxspeed; } /// size of the cargo hold, in cubic meters inline const float maxcargo() const { return shipmodel_maxcargo; } /// ship radius inline const float radius() const { return shipmodel_radius; } /// entity template inline const Template *model_template() const { return shipmodel_template; } protected: /* ---- mutators -------------------------------------------------- */ /// set mass inline void set_mass(const float mass) { shipmodel_mass = mass; } /// set impulse drive force inline void set_impulse_force(const float impulse) { shipmodel_impulse_force = impulse; } /// set thruster force inline void set_thrust_force(const float thrust) { shipmodel_thrust_force = thrust; } /// set strafe force inline void set_strafe_force(const float strafe) { shipmodel_strafe_force = strafe; } /// set turn force inline void set_turn_force(const float turn) { shipmodel_turn_force = turn; } /// set roll force inline void set_roll_force(const float roll) { shipmodel_roll_force = roll; } /// set maximum speed inline void set_maxspeed(const float maxspeed) { shipmodel_maxspeed = maxspeed; } /// set size of the cargo hold inline void set_maxcargo(const float maxcargo) { shipmodel_maxcargo = maxcargo; } /// set jumpdrive capability inline void set_jumpdrive(const bool jumpdrive) { shipmodel_jumpdrive = jumpdrive; } /// set dock capability inline void set_dock(const bool dock) { shipmodel_dock = dock; } /// set radius inline void set_radius(const float radius) { shipmodel_radius = radius; } /// set entity template inline void set_template(const Template *model_template) { shipmodel_template = model_template; } public: void generate_info(); void buy(core::EntityControlable *buyer, core::Entity *seller); /* --- static registry functions ---------------------------------- */ static ShipModel *find(const std::string & label); static ShipModel *search(const std::string & searchstr); static bool init(); static void list(); static inline const core::InfoType *infotype() { return shipmodel_infotype; } private: /* --- attributes ------------------------------------------------- */ float shipmodel_radius; float shipmodel_mass; float shipmodel_impulse_force; float shipmodel_thrust_force; float shipmodel_strafe_force; float shipmodel_turn_force; float shipmodel_roll_force; float shipmodel_maxspeed; float shipmodel_maxcargo; bool shipmodel_jumpdrive; bool shipmodel_dock; const Template *shipmodel_template; /* --- static ----------------------------------------------------- */ static core::InfoType *shipmodel_infotype; }; } #endif // __INCLUDED_BASE_SHIPMODEL_H__