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 #pragma once
5 
6 /*
7  * Ship movement controller class
8  * Controls thrusters, autopilot according to player input or AI
9  */
10 #include "JsonFwd.h"
11 
12 class Body;
13 class Ship;
14 class Space;
15 
16 enum FlightControlState { // <enum scope='FlightControlState' name=ShipControllerFlightControlState public>
17 	CONTROL_MANUAL,
18 	CONTROL_FIXSPEED,
19 	CONTROL_FIXHEADING_FORWARD,
20 	CONTROL_FIXHEADING_BACKWARD,
21 	CONTROL_FIXHEADING_NORMAL,
22 	CONTROL_FIXHEADING_ANTINORMAL,
23 	CONTROL_FIXHEADING_RADIALLY_INWARD,
24 	CONTROL_FIXHEADING_RADIALLY_OUTWARD,
25 	CONTROL_FIXHEADING_KILLROT,
26 	CONTROL_AUTOPILOT,
27 
28 	CONTROL_STATE_COUNT // <enum skip>
29 };
30 
31 // only AI
32 class ShipController {
33 public:
34 	//needed for serialization
35 	enum Type {
36 		AI = 0,
37 		PLAYER = 1
38 	};
ShipController()39 	ShipController() {}
~ShipController()40 	virtual ~ShipController() {}
GetType()41 	virtual Type GetType() { return AI; }
SaveToJson(Json & jsonObj,Space * s)42 	virtual void SaveToJson(Json &jsonObj, Space *s) {}
LoadFromJson(const Json & jsonObj)43 	virtual void LoadFromJson(const Json &jsonObj) {}
PostLoadFixup(Space *)44 	virtual void PostLoadFixup(Space *) {}
45 	virtual void StaticUpdate(float timeStep);
SetFlightControlState(FlightControlState s)46 	virtual void SetFlightControlState(FlightControlState s) {}
GetFlightControlState()47 	virtual FlightControlState GetFlightControlState() const { return CONTROL_MANUAL; }
GetSetSpeed()48 	virtual double GetSetSpeed() const { return 0.0; }
ChangeSetSpeed(double delta)49 	virtual void ChangeSetSpeed(double delta) {}
GetSetSpeedTarget()50 	virtual Body *GetSetSpeedTarget() const { return nullptr; }
51 	Ship *m_ship;
52 };
53