/* base/jumppoint.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_JUMPPOINT_H__ #define __INCLUDED_BASE_JUMPPOINT_H__ #include #include "math/mathlib.h" #include "core/entity.h" #include "base/template.h" namespace game { class Ship; /// a jumppoint /** * jumppoints are used to define hyperspace routes between systems. * If a ship actives its jump drive, a jump point will be opened * between the current system and the target of the nearest jumppoint. * */ class JumpPoint : public core::EntityDynamic { public: JumpPoint(); virtual ~JumpPoint(); inline std::string const & targetlabel() { return jumppoint_targetlabel; } inline JumpPoint *target() { return jumppoint_target; } /// set trget label void set_targetlabel(const std::string &label); /// validate the targetlabel and set target() virtual void validate(); static inline void set_template (const Template *entitytemplate) { jumppoint_template = entitytemplate; } private: std::string jumppoint_targetlabel; JumpPoint *jumppoint_target; static const Template *jumppoint_template; }; /// a jumpgate class JumpGate : public JumpPoint { public: JumpGate(); virtual ~JumpGate(); /// validate the targetlabel and set target() virtual void validate(); /// a ship wants to use the jumpgate void func_dock(Ship *ship); inline bool activated() const { return (jumpgate_timer > 0); } void activate(); virtual void frame(float elapsed); static inline void set_template (const Template *entitytemplate) { jumpgate_template = entitytemplate; } private: float jumpgate_timer; static const Template *jumpgate_template; }; } #endif // __INCLUDED_BASE_JUMPPOINT_H__