Pioneer
Ship.h
Go to the documentation of this file.
1 // Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef _SHIP_H
5 #define _SHIP_H
6 
7 #include <unordered_map>
8 
9 #include "DynamicBody.h"
10 #include "ShipType.h"
11 #include "galaxy/SystemPath.h"
12 #include "lua/LuaRef.h"
13 #include "scenegraph/ModelSkin.h"
14 #include "sound/Sound.h"
15 
16 #include "FixedGuns.h"
17 #include "ship/Propulsion.h"
18 
19 class AICommand;
20 class Camera;
21 class CargoBody;
22 class SpaceStation;
23 class HyperspaceCloud;
24 class Missile;
25 class NavLights;
26 class Planet;
27 class Sensors;
28 class ShipController;
29 class Space;
30 
31 struct CollisionContact;
33 
34 namespace Graphics {
35  class Renderer;
36 }
37 
38 struct shipstats_t {
42  int static_mass; // cargo, equipment + hull
43  float hull_mass_left; // effectively hitpoints
46  float shield_mass;
49 
50  // cached equipment information to avoid costly Lua lookups
52  int radar_cap;
56 };
57 
59  std::string jump_sound;
60  std::string warmup_sound;
61  std::string abort_sound;
62 };
63 
64 class Ship : public DynamicBody {
65  friend class ShipController; //only controllers need access to AITimeStep
66  friend class PlayerShipController;
67 
68 public:
70  Ship() = delete;
71  Ship(const Json &jsonObj, Space *space);
72  Ship(const ShipType::Id &shipId);
73  virtual ~Ship();
74 
75  virtual void SetFrame(FrameId fId) override;
76 
77  void SetController(ShipController *c); //deletes existing
79 
80  virtual void SetDockedWith(SpaceStation *, int port);
83  int GetDockingPort() const { return m_dockedWithPort; }
84  bool IsDocked() const { return GetFlightState() == Ship::DOCKED; }
85  bool IsLanded() const { return GetFlightState() == Ship::LANDED; }
86 
87  virtual void SetLandedOn(Planet *p, float latitude, float longitude);
88 
89  virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override;
90 
91  inline void ClearThrusterState()
92  {
94  if (m_launchLockTimeout <= 0.0f) ClearLinThrusterState();
95  }
96  void UpdateLuaStats();
97  void UpdateEquipStats();
98  void UpdateFuelStats();
99  void UpdateGunsStats();
100  const shipstats_t &GetStats() const { return m_stats; }
101 
102  void Explode();
103  virtual bool DoDamage(float kgDamage); // can be overloaded in Player to add audio
104  void SetGunState(int idx, int state);
105  float GetGunTemperature(int idx) const { return GetFixedGuns()->GetGunTemperature(idx); }
106  void UpdateMass();
107  virtual bool SetWheelState(bool down); // returns success of state change, NOT state itself
108  void Blastoff();
109  bool Undock();
110  virtual void TimeStepUpdate(const float timeStep) override;
111  virtual void StaticUpdate(const float timeStep) override;
112 
113  void TimeAccelAdjust(const float timeStep);
114 
115  bool IsDecelerating() const { return m_decelerating; }
116 
117  virtual void NotifyRemoved(const Body *const removedBody) override;
118  virtual bool OnCollision(Body *o, Uint32 flags, double relVel) override;
119  virtual bool OnDamage(Body *attacker, float kgDamage, const CollisionContact &contactData) override;
120 
121  enum FlightState { // <enum scope='Ship' name=ShipFlightState public>
122  FLYING, // open flight (includes autopilot)
123  DOCKING, // in docking animation
124  UNDOCKING, // in docking animation
125  DOCKED, // docked with station
126  LANDED, // rough landed (not docked)
127  JUMPING, // between space and hyperspace ;)
128  HYPERSPACE, // in hyperspace
129  };
130 
131  // vector3d CalcAtmoPassiveControl() const;
132  vector3d CalcAtmoTorque() const;
133 
134  FlightState GetFlightState() const { return m_flightState; }
135  void SetFlightState(FlightState s);
136  float GetWheelState() const { return m_wheelState; }
137  int GetWheelTransition() const { return m_wheelTransition; }
138  bool SpawnCargo(CargoBody *c_body) const;
139 
140  LuaRef GetEquipSet() const { return m_equipSet; }
141 
142  virtual bool IsInSpace() const override { return (m_flightState != HYPERSPACE); }
143 
144  void SetHyperspaceDest(const SystemPath &dest) { m_hyperspace.dest = dest; }
145  const SystemPath &GetHyperspaceDest() const { return m_hyperspace.dest; }
146  double GetHyperspaceDuration() const { return m_hyperspace.duration; }
147  double GetECMRechargeRemain() const { return m_ecmRecharge; }
148 
149  enum HyperjumpStatus { // <enum scope='Ship' name=ShipJumpStatus prefix=HYPERJUMP_ public>
158  };
159 
161  virtual Ship::HyperjumpStatus InitiateHyperjumpTo(const SystemPath &dest, int warmup_time, double duration, const HyperdriveSoundsTable &sounds, LuaRef checks);
162  virtual void AbortHyperjump();
164  bool IsHyperspaceActive() const { return (m_hyperspace.countdown > 0.0); }
165 
166  // 0 to 1.0 is alive, > 1.0 = death
167  double GetHullTemperature() const;
168 
169  enum ECMResult {
173  };
174 
175  ECMResult UseECM();
176 
177  virtual Missile *SpawnMissile(ShipType::Id missile_type, int power = -1);
178 
179  enum AlertState { // <enum scope='Ship' name=ShipAlertStatus prefix=ALERT_ public>
184  };
185  AlertState GetAlertState() { return m_alertState; }
186 
187  void AIClearInstructions(); // Note: defined in Ship-AI.cpp
188  bool AIIsActive() { return m_curAICmd ? true : false; }
189  void AIGetStatusText(char *str); // Note: defined in Ship-AI.cpp
190 
191  void AIKamikaze(Body *target); // Note: defined in Ship-AI.cpp
192  void AIKill(Ship *target); // Note: defined in Ship-AI.cpp
193  //void AIJourney(SystemBodyPath &dest);
194  void AIDock(SpaceStation *target); // Note: defined in Ship-AI.cpp
195  void AIFlyTo(Body *target); // Note: defined in Ship-AI.cpp
196  void AIOrbit(Body *target, double alt); // Note: defined in Ship-AI.cpp
197  void AIHoldPosition(); // Note: defined in Ship-AI.cpp
198 
199  void AIBodyDeleted(const Body *const body){}; // Note: defined in Ship-AI.cpp // todo: signals
200 
201  const AICommand *GetAICommand() const { return m_curAICmd; }
202 
203  virtual void PostLoadFixup(Space *space) override;
204 
205  const ShipType *GetShipType() const { return m_type; }
206  virtual void SetShipType(const ShipType::Id &shipId);
207 
208  const SceneGraph::ModelSkin &GetSkin() const { return m_skin; }
209  void SetSkin(const SceneGraph::ModelSkin &skin);
210 
211  void SetPattern(unsigned int num);
212 
213  void SetLabel(const std::string &label) override;
214  void SetShipName(const std::string &shipName);
215 
216  float GetAtmosphericPressureLimit() const;
217  float GetPercentShields() const;
218  float GetPercentHull() const;
219  void SetPercentHull(float);
220 
221  void EnterSystem();
222 
223  HyperspaceCloud *GetHyperspaceCloud() const { return m_hyperspaceCloud; }
224 
225  sigc::signal<void> onDock; // JJ: check what these are for
226  sigc::signal<void> onUndock;
227  sigc::signal<void> onLanded;
228 
229  // mutable because asking to know when state changes is not the same as
230  // actually changing state
231  mutable sigc::signal<void> onFlavourChanged;
232 
233  bool IsInvulnerable() const { return m_invulnerable; }
234  void SetInvulnerable(bool b) { m_invulnerable = b; }
235 
236  Sensors *GetSensors() const { return m_sensors.get(); }
237 
238  Uint8 GetRelations(Body *other) const; //0=hostile, 50=neutral, 100=ally
239  void SetRelations(Body *other, Uint8 percent);
240 
241  double GetLandingPosOffset() const { return m_landingMinOffset; }
242 
243 protected:
244  vector3d CalcAtmosphericForce() const override;
245 
246  virtual void SaveToJson(Json &jsonObj, Space *space) override;
247 
248  bool AITimeStep(float timeStep); // Called by controller. Returns true if complete
249 
250  virtual void SetAlertState(AlertState as);
251 
252  virtual void OnEnterHyperspace();
253  virtual void OnEnterSystem();
254 
257 
259 
261 
264  // > 0 means active
265  float countdown;
266  bool now;
267  double duration;
268  LuaRef checks; // A Lua function to check all the conditions before the jump
271 
273 
274 private:
275  float GetECMRechargeTime();
276  void DoThrusterSounds() const;
277  void Init();
278  void TestLanded();
279  void UpdateAlertState();
280  void UpdateFuel(float timeStep);
281  void SetShipId(const ShipType::Id &shipId);
282  void EnterHyperspace();
283  void InitMaterials();
284  void InitEquipSet();
285 
286  bool m_invulnerable;
287 
288  static const double DEFAULT_LIFT_TO_DRAG_RATIO;
289 
290  static const float DEFAULT_SHIELD_COOLDOWN_TIME;
291  float m_shieldCooldown;
292  shipstats_t m_stats;
293  const ShipType *m_type;
294  SceneGraph::ModelSkin m_skin;
295 
296  Sound::Event m_beamLaser[2];
297 
298  FlightState m_flightState;
299  bool m_testLanded;
300  bool m_forceWheelUpdate;
301  float m_launchLockTimeout;
302  float m_wheelState;
303  int m_wheelTransition;
304 
305  AlertState m_alertState;
306  double m_lastAlertUpdate;
307  double m_lastFiringAlert;
308  bool m_shipNear;
309  bool m_shipFiring;
310  bool m_missileDetected;
311 
312  HyperspaceCloud *m_hyperspaceCloud;
313 
314  AICommand *m_curAICmd;
315 
316  double m_landingMinOffset; // offset from the centre of the ship used during docking
317 
318  int m_dockedWithIndex; // deserialisation
319 
320  SceneGraph::Animation *m_landingGearAnimation;
321  std::unique_ptr<NavLights> m_navLights;
322 
323  static HeatGradientParameters_t s_heatGradientParams;
324 
325  std::unique_ptr<Sensors> m_sensors;
326  std::unordered_map<Body *, Uint8> m_relationsMap;
327 
328  std::string m_shipName;
329 
330 public:
333  double GetAccelFwd() { return GetPropulsion()->GetAccelFwd(); }
334  void SetAngThrusterState(const vector3d &levels) { GetPropulsion()->SetAngThrusterState(levels); }
335  double GetFuel() const { return GetPropulsion()->GetFuel(); }
336  double GetAccel(Thruster thruster) const { return GetPropulsion()->GetAccel(thruster); }
337  void SetFuel(const double f) { GetPropulsion()->SetFuel(f); }
338  void SetFuelReserve(const double f) { GetPropulsion()->SetFuelReserve(f); }
339 
340  bool AIMatchVel(const vector3d &vel) { return GetPropulsion()->AIMatchVel(vel); }
341  double AIFaceDirection(const vector3d &dir, double av = 0) { return GetPropulsion()->AIFaceDirection(dir, av); }
342  void AIMatchAngVelObjSpace(const vector3d &angvel) { return GetPropulsion()->AIMatchAngVelObjSpace(angvel); }
343  void SetThrusterState(int axis, double level) { return GetPropulsion()->SetLinThrusterState(axis, level); }
344  void AIModelCoordsMatchAngVel(const vector3d &desiredAngVel, double softness) { return GetPropulsion()->AIModelCoordsMatchAngVel(desiredAngVel, softness); }
345 };
346 
347 #endif /* _SHIP_H */
nlohmann::json Json
Definition: Json.h:8
Thruster
Definition: Propulsion.h:15
Definition: ShipAICmd.h:19
Definition: Body.h:54
Definition: Camera.h:76
Definition: CargoBody.h:15
Definition: DynamicBody.h:15
const FixedGuns * GetFixedGuns() const
Definition: DynamicBody.cpp:172
bool m_decelerating
Definition: DynamicBody.h:105
const Propulsion * GetPropulsion() const
Definition: DynamicBody.cpp:160
float GetGunTemperature(int idx) const
Definition: FixedGuns.cpp:272
Definition: Renderer.h:39
Definition: HyperspaceCloud.h:19
Definition: LuaRef.h:12
Definition: Missile.h:12
Definition: NavLights.h:22
Definition: Planet.h:18
Definition: PlayerShipController.h:10
void ClearAngThrusterState()
Definition: Propulsion.h:74
void SetFuelReserve(const double f)
Definition: Propulsion.h:91
void AIMatchAngVelObjSpace(const vector3d &angvel)
Definition: Propulsion.cpp:372
void SetFuel(const double f)
Definition: Propulsion.h:90
void AIModelCoordsMatchAngVel(const vector3d &desiredAngVel, double softness)
Definition: Propulsion.cpp:236
void ClearLinThrusterState()
Definition: Propulsion.h:73
void SetAngThrusterState(int axis, double level)
Definition: Propulsion.h:67
double GetFuel() const
Definition: Propulsion.h:88
bool AIMatchVel(const vector3d &vel)
Definition: Propulsion.cpp:326
void SetLinThrusterState(int axis, double level)
Definition: Propulsion.cpp:139
double GetAccelFwd() const
Definition: Propulsion.h:53
double AIFaceDirection(const vector3d &dir, double av=0)
Definition: Propulsion.cpp:411
double GetAccel(Thruster thruster) const
Definition: Propulsion.h:52
Definition: Animation.h:19
Definition: ModelSkin.h:22
Definition: Sensors.h:21
Definition: ShipController.h:32
Definition: Ship.h:64
Sensors * GetSensors() const
Definition: Ship.h:236
void UpdateMass()
Definition: Ship.cpp:375
virtual bool OnCollision(Body *o, Uint32 flags, double relVel) override
Definition: Ship.cpp:522
sigc::signal< void > onLanded
Definition: Ship.h:227
float GetGunTemperature(int idx) const
Definition: Ship.h:105
ECMResult UseECM()
Definition: Ship.cpp:795
FlightState
Definition: Ship.h:121
@ UNDOCKING
Definition: Ship.h:124
@ JUMPING
Definition: Ship.h:127
@ DOCKING
Definition: Ship.h:123
@ FLYING
Definition: Ship.h:122
@ DOCKED
Definition: Ship.h:125
@ HYPERSPACE
Definition: Ship.h:128
@ LANDED
Definition: Ship.h:126
virtual void OnEnterHyperspace()
Definition: Ship.cpp:1564
virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override
Definition: Ship.cpp:1485
virtual Ship::HyperjumpStatus InitiateHyperjumpTo(const SystemPath &dest, int warmup_time, double duration, const HyperdriveSoundsTable &sounds, LuaRef checks)
Definition: Ship.cpp:762
virtual void SetLandedOn(Planet *p, float latitude, float longitude)
Definition: Ship.cpp:967
bool AIMatchVel(const vector3d &vel)
Definition: Ship.h:340
bool IsLanded() const
Definition: Ship.h:85
double GetLandingPosOffset() const
Definition: Ship.h:241
OBJDEF(Ship, DynamicBody, SHIP)
Ship::HyperjumpStatus CheckHyperjumpCapability() const
Definition: Ship.cpp:751
void SetFlightState(FlightState s)
Definition: Ship.cpp:842
double GetHyperspaceDuration() const
Definition: Ship.h:146
void SetFuel(const double f)
Definition: Ship.h:337
FlightState GetFlightState() const
Definition: Ship.h:134
AlertState
Definition: Ship.h:179
@ ALERT_SHIP_FIRING
Definition: Ship.h:182
@ ALERT_SHIP_NEARBY
Definition: Ship.h:181
@ ALERT_MISSILE_DETECTED
Definition: Ship.h:183
@ ALERT_NONE
Definition: Ship.h:180
virtual void OnEnterSystem()
Definition: Ship.cpp:1590
float GetPercentHull() const
Definition: Ship.cpp:350
virtual ~Ship()
Definition: Ship.cpp:199
bool IsHyperspaceActive() const
Definition: Ship.h:164
vector3d CalcAtmoTorque() const
Definition: Ship.cpp:446
SpaceStation * m_dockedWith
Definition: Ship.h:255
void SetFuelReserve(const double f)
Definition: Ship.h:338
const SystemPath & GetHyperspaceDest() const
Definition: Ship.h:145
virtual bool OnDamage(Body *attacker, float kgDamage, const CollisionContact &contactData) override
Definition: Ship.cpp:468
sigc::signal< void > onUndock
Definition: Ship.h:226
const ShipType * GetShipType() const
Definition: Ship.h:205
bool IsDecelerating() const
Definition: Ship.h:115
void Explode()
Definition: Ship.cpp:575
void SetController(ShipController *c)
Definition: Ship.cpp:342
void AIOrbit(Body *target, double alt)
Definition: Ship-AI.cpp:105
HyperspaceCloud * GetHyperspaceCloud() const
Definition: Ship.h:223
double GetAccelFwd()
Definition: Ship.h:333
void SetRelations(Body *other, Uint8 percent)
Definition: Ship.cpp:1653
int m_dockedWithPort
Definition: Ship.h:256
LuaRef m_equipSet
Definition: Ship.h:272
SpaceStation * GetDockedWith() const
Definition: Ship.h:82
void UpdateFuelStats()
Definition: Ship.cpp:743
virtual bool DoDamage(float kgDamage)
Definition: Ship.cpp:587
sigc::signal< void > onDock
Definition: Ship.h:225
Ship()=delete
void UpdateEquipStats()
Definition: Ship.cpp:632
void AIKill(Ship *target)
Definition: Ship-AI.cpp:69
void SetSkin(const SceneGraph::ModelSkin &skin)
Definition: Ship.cpp:1633
ECMResult
Definition: Ship.h:169
@ ECM_RECHARGING
Definition: Ship.h:172
@ ECM_NOT_INSTALLED
Definition: Ship.h:170
@ ECM_ACTIVATED
Definition: Ship.h:171
void SetPattern(unsigned int num)
Definition: Ship.cpp:1639
ShipController * GetController() const
Definition: Ship.h:78
vector3d CalcAtmosphericForce() const override
Definition: Ship.cpp:386
void AIClearInstructions()
Definition: Ship-AI.cpp:46
float GetAtmosphericPressureLimit() const
Definition: Ship.cpp:363
virtual bool IsInSpace() const override
Definition: Ship.h:142
const shipstats_t & GetStats() const
Definition: Ship.h:100
void SetShipName(const std::string &shipName)
Definition: Ship.cpp:1627
virtual void TimeStepUpdate(const float timeStep) override
Definition: Ship.cpp:994
void AIKamikaze(Body *target)
Definition: Ship-AI.cpp:63
virtual void NotifyRemoved(const Body *const removedBody) override
Definition: Ship.cpp:1439
bool IsInvulnerable() const
Definition: Ship.h:233
virtual void SaveToJson(Json &jsonObj, Space *space) override
Definition: Ship.cpp:258
bool AIIsActive()
Definition: Ship.h:188
void AIModelCoordsMatchAngVel(const vector3d &desiredAngVel, double softness)
Definition: Ship.h:344
sigc::signal< void > onFlavourChanged
Definition: Ship.h:231
float GetHyperspaceCountdown() const
Definition: Ship.h:163
int GetWheelTransition() const
Definition: Ship.h:137
void SetGunState(int idx, int state)
Definition: Ship.cpp:1465
virtual void PostLoadFixup(Space *space) override
Definition: Ship.cpp:250
void SetLabel(const std::string &label) override
Definition: Ship.cpp:1620
double GetECMRechargeRemain() const
Definition: Ship.h:147
virtual void SetFrame(FrameId fId) override
Definition: Ship.cpp:988
void AIMatchAngVelObjSpace(const vector3d &angvel)
Definition: Ship.h:342
float GetWheelState() const
Definition: Ship.h:136
void SetHyperspaceDest(const SystemPath &dest)
Definition: Ship.h:144
void EnterSystem()
Definition: Ship.cpp:1577
bool AITimeStep(float timeStep)
Definition: Ship-AI.cpp:20
Uint8 GetRelations(Body *other) const
Definition: Ship.cpp:1644
HyperjumpStatus
Definition: Ship.h:149
@ HYPERJUMP_CURRENT_SYSTEM
Definition: Ship.h:151
@ HYPERJUMP_INITIATED
Definition: Ship.h:153
@ HYPERJUMP_INSUFFICIENT_FUEL
Definition: Ship.h:156
@ HYPERJUMP_OK
Definition: Ship.h:150
@ HYPERJUMP_SAFETY_LOCKOUT
Definition: Ship.h:157
@ HYPERJUMP_OUT_OF_RANGE
Definition: Ship.h:155
@ HYPERJUMP_NO_DRIVE
Definition: Ship.h:152
@ HYPERJUMP_DRIVE_ACTIVE
Definition: Ship.h:154
void SetInvulnerable(bool b)
Definition: Ship.h:234
void AIGetStatusText(char *str)
Definition: Ship-AI.cpp:55
virtual void StaticUpdate(const float timeStep) override
Definition: Ship.cpp:1228
void SetThrusterState(int axis, double level)
Definition: Ship.h:343
void ClearAngThrusterState()
Definition: Ship.h:331
void AIBodyDeleted(const Body *const body)
Definition: Ship.h:199
void AIHoldPosition()
Definition: Ship-AI.cpp:113
bool IsDocked() const
Definition: Ship.h:84
double AIFaceDirection(const vector3d &dir, double av=0)
Definition: Ship.h:341
double GetHullTemperature() const
Definition: Ship.cpp:1076
void AIDock(SpaceStation *target)
Definition: Ship-AI.cpp:97
virtual void SetAlertState(AlertState as)
Definition: Ship.cpp:1087
double GetAccel(Thruster thruster) const
Definition: Ship.h:336
virtual void SetShipType(const ShipType::Id &shipId)
Definition: Ship.cpp:1602
bool SpawnCargo(CargoBody *c_body) const
Definition: Ship.cpp:1535
const SceneGraph::ModelSkin & GetSkin() const
Definition: Ship.h:208
void ClearLinThrusterState()
Definition: Ship.h:332
const AICommand * GetAICommand() const
Definition: Ship.h:201
float m_ecmRecharge
Definition: Ship.h:258
struct Ship::HyperspacingOut m_hyperspace
int GetDockingPort() const
Definition: Ship.h:83
LuaRef GetEquipSet() const
Definition: Ship.h:140
void ClearThrusterState()
Definition: Ship.h:91
void Blastoff()
Definition: Ship.cpp:910
AlertState GetAlertState()
Definition: Ship.h:185
void AIFlyTo(Body *target)
Definition: Ship-AI.cpp:85
virtual bool SetWheelState(bool down)
Definition: Ship.cpp:1473
virtual void SetDockedWith(SpaceStation *, int port)
Definition: Ship.cpp:1449
void UpdateGunsStats()
Definition: Ship.cpp:700
virtual Missile * SpawnMissile(ShipType::Id missile_type, int power=-1)
Definition: Ship.cpp:826
void TimeAccelAdjust(const float timeStep)
Definition: Ship.cpp:1063
void UpdateLuaStats()
Definition: Ship.cpp:678
void SetAngThrusterState(const vector3d &levels)
Definition: Ship.h:334
virtual void AbortHyperjump()
Definition: Ship.cpp:780
bool Undock()
Definition: Ship.cpp:1444
double GetFuel() const
Definition: Ship.h:335
void SetPercentHull(float)
Definition: Ship.cpp:368
float GetPercentShields() const
Definition: Ship.cpp:355
ShipController * m_controller
Definition: Ship.h:260
Definition: Sound.h:32
Definition: SpaceStation.h:30
Definition: Space.h:19
Definition: SystemPath.h:13
Definition: Background.h:13
Definition: CollisionContact.h:9
Definition: FrameId.h:9
Definition: HeatGradientPar.h:4
Definition: Ship.h:58
std::string abort_sound
Definition: Ship.h:61
std::string jump_sound
Definition: Ship.h:59
std::string warmup_sound
Definition: Ship.h:60
Definition: ShipType.h:12
std::string Id
Definition: ShipType.h:24
Definition: Ship.h:262
HyperdriveSoundsTable sounds
Definition: Ship.h:269
bool now
Definition: Ship.h:266
double duration
Definition: Ship.h:267
float countdown
Definition: Ship.h:265
SystemPath dest
Definition: Ship.h:263
LuaRef checks
Definition: Ship.h:268
Definition: Ship.h:38
float fuel_tank_mass_left
Definition: Ship.h:48
float shield_mass_left
Definition: Ship.h:47
int hull_autorepair_cap
Definition: Ship.h:55
float hyperspace_range
Definition: Ship.h:44
int free_capacity
Definition: Ship.h:41
float shield_mass
Definition: Ship.h:46
int atmo_shield_cap
Definition: Ship.h:51
int cargo_bay_life_support_cap
Definition: Ship.h:54
float hull_mass_left
Definition: Ship.h:43
int fuel_scoop_cap
Definition: Ship.h:53
int static_mass
Definition: Ship.h:42
int used_cargo
Definition: Ship.h:40
int radar_cap
Definition: Ship.h:52
float hyperspace_range_max
Definition: Ship.h:45
int used_capacity
Definition: Ship.h:39