Pioneer
Loading...
Searching...
No Matches
SpaceStationType.h
Go to the documentation of this file.
1// Copyright © 2008-2024 Pioneer Developers. See AUTHORS.txt for details
2// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3
4#ifndef _SPACESTATIONTYPE_H
5#define _SPACESTATIONTYPE_H
6
7#include "Random.h"
8#include "matrix4x4.h"
9#include "vector3.h"
10
11#include <map>
12#include <vector>
13#include <string>
14
15//Space station definition, loaded from data/stations
16
17class Ship;
18namespace SceneGraph {
19 class Model;
20}
21
22enum class DockStage { // <enum scope='DockStage' name=DockStage public>
23
24 NONE,
25 MANUAL,
26
28
30
36
41
43
44 DOCKED,
45
47
49
55
57
58 LEAVE,
59
61
62 // used not in BayPath, but in Port
65
66};
67
69public:
70 typedef std::map<DockStage, matrix4x4f> TMapBayIDMat;
71 struct BayPath {
74 };
75 typedef std::map<Uint32, BayPath> BayPathMap;
76
77 struct SPort {
78 static const int BAD_PORT_ID = -1;
81 minShipSize(5000),
82 maxShipSize(-1),
83 inUse(false) {}
84 int portId;
86 bool inUse;
87 std::vector<std::pair<int, std::string>> bayIDs;
88 std::string name;
90 };
91 typedef std::vector<SPort> TPorts;
92
98 };
99
101
102private:
103 std::string id;
104 SceneGraph::Model *model;
105 std::string modelName;
106 float angVel;
107 enum DOCKMETHOD { SURFACE,
108 ORBITAL } dockMethod;
109 unsigned int numDockingPorts;
110 DockStage lastDockStage;
111 DockStage lastUndockStage;
112 float parkingDistance;
113 float parkingGapSize;
114 BayPathMap m_bayPaths;
115 TPorts m_ports;
116 float padOffset;
117
118 static std::vector<SpaceStationType> surfaceTypes;
119 static std::vector<SpaceStationType> orbitalTypes;
120
121public:
122 SpaceStationType(const std::string &id, const std::string &path);
123
124 static bool IsDockStage(DockStage s) {
125 return
126 int(s) > int(DockStage::DOCK_STAGES_BEGIN) &&
127 int(s) < int(DockStage::DOCK_STAGES_END);
128 }
129
130 static bool IsUndockStage(DockStage s) {
131 return
132 int(s) > int(DockStage::UNDOCK_STAGES_BEGIN) &&
133 int(s) < int(DockStage::UNDOCK_STAGES_END);
134 }
135
137 return DockStage(int(s) + 1);
138 }
139
140 const char *DockStageName(DockStage s) const;
141
142 void OnSetupComplete();
143 const SPort *FindPortByBay(const int zeroBaseBayID) const;
144 SPort *GetPortByBay(const int zeroBaseBayID);
145
146 // Call functions in the station .lua
147 bool GetShipApproachWaypoints(const unsigned int port, DockStage stage, positionOrient_t &outPosOrient) const;
148
149 matrix4x4f GetStageTransform(int bay, DockStage stage) const;
150
151 const std::string &ModelName() const { return modelName; }
152 float AngVel() const { return angVel; }
153 bool IsSurfaceStation() const { return (SURFACE == dockMethod); }
154 bool IsOrbitalStation() const { return (ORBITAL == dockMethod); }
155 unsigned int NumDockingPorts() const { return numDockingPorts; }
156 int NumDockingStages() const { return int(lastDockStage) - int(DockStage::DOCK_ANIMATION_NONE); }
157 int NumUndockStages() const { return int(lastUndockStage) - int(DockStage::UNDOCK_ANIMATION_NONE); }
158 DockStage LastDockStage() const { return lastDockStage; }
159 DockStage LastUndockStage() const { return lastUndockStage; }
160 float ParkingDistance() const { return parkingDistance; }
161 float ParkingGapSize() const { return parkingGapSize; }
162 const TPorts &Ports() const { return m_ports; }
163
164 static void Init();
165
166 static const SpaceStationType *RandomStationType(Random &random, const bool bIsGround);
167 static const SpaceStationType *FindByName(const std::string &name);
168};
169
170#endif
DockStage
Definition: SpaceStationType.h:22
@ UNDOCK_ANIMATION_2
@ UNDOCK_ANIMATION_MAX
@ UNDOCK_ANIMATION_1
@ DOCK_ANIMATION_3
@ DOCK_ANIMATION_MAX
@ DOCK_STAGES_BEGIN
@ DOCK_ANIMATION_2
@ DOCK_ANIMATION_NONE
@ CLEARANCE_GRANTED
@ UNDOCK_STAGES_END
@ UNDOCK_ANIMATION_3
@ UNDOCK_STAGES_BEGIN
@ DOCK_ANIMATION_1
@ UNDOCK_ANIMATION_NONE
Definition: Random.h:29
Definition: Model.h:87
Definition: Ship.h:64
Definition: SpaceStationType.h:68
const char * DockStageName(DockStage s) const
Definition: SpaceStationType.cpp:333
bool IsOrbitalStation() const
Definition: SpaceStationType.h:154
static bool IsUndockStage(DockStage s)
Definition: SpaceStationType.h:130
matrix4x4f GetStageTransform(int bay, DockStage stage) const
Definition: SpaceStationType.cpp:337
bool GetShipApproachWaypoints(const unsigned int port, DockStage stage, positionOrient_t &outPosOrient) const
Definition: SpaceStationType.cpp:242
SPort * GetPortByBay(const int zeroBaseBayID)
Definition: SpaceStationType.cpp:229
float ParkingGapSize() const
Definition: SpaceStationType.h:161
std::map< DockStage, matrix4x4f > TMapBayIDMat
Definition: SpaceStationType.h:70
std::vector< SPort > TPorts
Definition: SpaceStationType.h:91
int NumDockingStages() const
Definition: SpaceStationType.h:156
DockStage LastUndockStage() const
Definition: SpaceStationType.h:159
const SPort * FindPortByBay(const int zeroBaseBayID) const
Definition: SpaceStationType.cpp:216
const std::string & ModelName() const
Definition: SpaceStationType.h:151
static bool IsDockStage(DockStage s)
Definition: SpaceStationType.h:124
bool IsSurfaceStation() const
Definition: SpaceStationType.h:153
DockStage LastDockStage() const
Definition: SpaceStationType.h:158
static void Init()
Definition: SpaceStationType.cpp:264
float AngVel() const
Definition: SpaceStationType.h:152
float ParkingDistance() const
Definition: SpaceStationType.h:160
void OnSetupComplete()
Definition: SpaceStationType.cpp:69
unsigned int NumDockingPorts() const
Definition: SpaceStationType.h:155
DockStage PivotStage(DockStage s) const
Definition: SpaceStationType.cpp:314
static const SpaceStationType * RandomStationType(Random &random, const bool bIsGround)
Definition: SpaceStationType.cpp:293
std::map< Uint32, BayPath > BayPathMap
Definition: SpaceStationType.h:75
static const SpaceStationType * FindByName(const std::string &name)
Definition: SpaceStationType.cpp:303
static DockStage NextAnimStage(DockStage s)
Definition: SpaceStationType.h:136
int NumUndockStages() const
Definition: SpaceStationType.h:157
const TPorts & Ports() const
Definition: SpaceStationType.h:162
Definition: CityOnPlanet.h:32
Definition: SpaceStationType.h:71
TMapBayIDMat m_leaving
Definition: SpaceStationType.h:73
TMapBayIDMat m_docking
Definition: SpaceStationType.h:72
Definition: SpaceStationType.h:77
int minShipSize
Definition: SpaceStationType.h:85
bool inUse
Definition: SpaceStationType.h:86
int maxShipSize
Definition: SpaceStationType.h:85
int portId
Definition: SpaceStationType.h:84
std::string name
Definition: SpaceStationType.h:88
SPort()
Definition: SpaceStationType.h:79
static const int BAD_PORT_ID
Definition: SpaceStationType.h:78
std::vector< std::pair< int, std::string > > bayIDs
Definition: SpaceStationType.h:87
TMapBayIDMat m_approach
Definition: SpaceStationType.h:89
Definition: SpaceStationType.h:93
vector3d yaxis
Definition: SpaceStationType.h:96
vector3d pos
Definition: SpaceStationType.h:94
vector3d xaxis
Definition: SpaceStationType.h:95
vector3d zaxis
Definition: SpaceStationType.h:97