/* 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" 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; } /* ---- 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; } 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 core::InfoType *shipmodel_infotype; private: 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; }; } #endif // __INCLUDED_BASE_SHIPMODEL_H__