/* base/ship.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_SHIP_H__ #define __INCLUDED_BASE_SHIP_H__ #include "core/player.h" #include "core/entity.h" #include "base/shipmodel.h" #include "base/jumppoint.h" #include "math/vector3f.h" namespace game { /// A ship in the game, controled by a player class Ship : public core::EntityControlable { public: Ship(core::Player *owner, const ShipModel *shipmodel); ~Ship(); /// shipmodel inline const ShipModel *shipmodel() const { return ship_shipmodel; } /// impulse drive force inline const float impulse_force() const { return ship_impulse_force; } /// thruster force inline const float thrust_force() const { return ship_thrust_force; } /// strafe force inline const float strafe_force() const { return ship_strafe_force; } /// turn force inline const float turn_force() const { return ship_turn_force; } /// roll force inline const float roll_force() const { return ship_roll_force; } /// physics frame virtual void action (btScalar seconds); /// game frame virtual void frame(const unsigned long elapsed); /// move the ship to a different zone virtual void set_zone(core::Zone *zone); /// true if the ship is equiped with a jumpdrive inline bool jumpdrive() const { return ship_jumpdrive; } /// set jumpdrive capability inline void set_jumpdrive(const bool jumpdrive) { ship_jumpdrive = jumpdrive; } /// set impulse drive force inline void set_impulse_force(const float impulse) { ship_impulse_force = impulse; } /// set thruster force inline void set_thrust_force(const float thrust) { ship_thrust_force = thrust; } /// set strafe force inline void set_strafe_force(const float strafe) { ship_strafe_force = strafe; } /// set turn force inline void set_turn_force(const float turn) { ship_turn_force = turn; } /// set roll force inline void set_roll_force(const float roll) { ship_roll_force = roll; } /// Initiate jump, departing from a jump point void initiate_jump(JumpPoint *depart); /// void reset drive controls virtual void reset(); /// explode the ship void explode(); /// toggle impulse drive activation void func_impulse(); /// toggle jump drive activation void func_jump(std::string const & args); private: JumpPoint *find_closest_jumppoint(); const ShipModel *ship_shipmodel; float current_target_direction; float current_target_pitch; float current_target_roll; float current_target_strafe; float current_target_vstrafe; float current_target_afterburner; bool current_impulse; bool ship_jumpdrive; float ship_jumpdrive_timer; float ship_impulsedrive_timer; JumpPoint *ship_jumpdepart; float ship_impulse_force; float ship_thrust_force; float ship_strafe_force; float ship_turn_force; float ship_roll_force; }; } #endif // __INCLUDED_BASE_SHIP_H__