/* 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 { class Ship; /// 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 dockable() const { return shipmodel_dockable; } /// 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; } /// linear damping factor inline const float linear_damping() const { return shipmodel_linear_damping; } /// angular damping factor inline const float angular_damping() const { return shipmodel_angular_damping; } /// size of the cargo hold, in cubic meters inline const float maxcargo() const { return shipmodel_maxcargo; } /// maximal armor strength inline const float maxarmor() const { return shipmodel_maxarmor; } /// maximal shield strength inline const float maxshield() const { return shipmodel_maxshield; } /// ship radius inline const float radius() const { return shipmodel_radius; } /// entity template inline const Template *model_template() const { return shipmodel_template; } /* ---- actors ---------------------------------------------------- */ /** * @brief apply ship type settings to an entity */ void apply(core::Entity *entity) const; /** * @brief apply ship type settings to a ship */ void apply(Ship *ship) const; 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 forceshipmodel_lineardamping 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 maximal armor strength inline void set_maxarmor(const float maxarmor) { shipmodel_maxarmor = maxarmor; } /// set maximal shield strength inline void set_maxshield(const float maxshield) { shipmodel_maxshield = maxshield; } /// 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_dockable(const bool dockable) { shipmodel_dockable = dockable; } /// 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; } /** * @brief set physics linear damping factor */ inline void set_linear_damping(const float linear_damping) { shipmodel_linear_damping = linear_damping; } /** * @brief set physics linear damping factor */ inline void set_angular_damping(const float angular_damping) { shipmodel_angular_damping = angular_damping; } public: /** * @brief generate specifications info. * */ void generate_info(); void buy(core::EntityControlable *buyer, core::Entity *seller, bool confirm = false); /* --- static registry functions ---------------------------------- */ static ShipModel *find(const std::string & label); static ShipModel *search(const std::string & searchstr); static bool init(); static void done(); static void list(); static inline const core::InfoType *infotype() { return shipmodel_infotype; } private: /* --- attributes ------------------------------------------------- */ float shipmodel_radius; float shipmodel_mass; float shipmodel_linear_damping; float shipmodel_angular_damping; float shipmodel_impulse_force; float shipmodel_thrust_force; float shipmodel_strafe_force; float shipmodel_turn_force; float shipmodel_roll_force; float shipmodel_maxcargo; float shipmodel_maxarmor; float shipmodel_maxshield; bool shipmodel_jumpdrive; bool shipmodel_dockable; const Template *shipmodel_template; /* --- static ----------------------------------------------------- */ static core::InfoType *shipmodel_infotype; }; } #endif // __INCLUDED_BASE_SHIPMODEL_H__