/* 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/physics.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 PhysicsBody { public: Ship(core::Player *owner, ShipModel *shipmodel); ~Ship(); /// update the ship state virtual void frame(float seconds); /// 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; } /// Initiate jump, departing from a jump point /** Initiates a jump even if the ship has no jumpdrive */ void initiate_jump(JumpPoint *depart); /// void reset drive controls 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(); ShipModel *ship_shipmodel; float current_target_direction; float current_target_pitch; float current_target_roll; float current_target_strafe; float current_target_afterburner; bool ship_jumpdrive; float ship_jumpdrive_timer; float ship_impulsedrive_timer; JumpPoint *ship_jumpdepart; }; } #endif // __INCLUDED_BASE_SHIP_H__