Pioneer
SpaceStationType.h
Go to the documentation of this file.
1 // Copyright © 2008-2023 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 "libs.h"
8 
9 //Space station definition, loaded from data/stations
10 
11 class Ship;
12 namespace SceneGraph {
13  class Model;
14 }
15 
17 public:
18  typedef std::map<Uint32, matrix4x4f> TMapBayIDMat;
19  struct PortPath {
22  };
23  typedef std::map<Uint32, PortPath> PortPathMap;
24 
25  struct SPort {
26  static const int BAD_PORT_ID = -1;
27  SPort() :
29  minShipSize(5000),
30  maxShipSize(-1),
31  inUse(false) {}
32  int portId;
34  bool inUse;
35  std::vector<std::pair<int, std::string>> bayIDs;
36  std::string name;
38  };
39  typedef std::vector<SPort> TPorts;
40 
46  };
47 
48 private:
49  std::string id;
50  SceneGraph::Model *model;
51  std::string modelName;
52  float angVel;
53  enum DOCKMETHOD { SURFACE,
54  ORBITAL } dockMethod;
55  unsigned int numDockingPorts;
56  int numDockingStages;
57  int numUndockStages;
58  int shipLaunchStage;
59  float parkingDistance;
60  float parkingGapSize;
61  PortPathMap m_portPaths;
62  TPorts m_ports;
63  float padOffset;
64 
65  static std::vector<SpaceStationType> surfaceTypes;
66  static std::vector<SpaceStationType> orbitalTypes;
67 
68 public:
69  SpaceStationType(const std::string &id, const std::string &path);
70 
71  void OnSetupComplete();
72  const SPort *FindPortByBay(const int zeroBaseBayID) const;
73  SPort *GetPortByBay(const int zeroBaseBayID);
74 
75  double GetDockAnimStageDuration(const int stage) const;
76  double GetUndockAnimStageDuration(const int stage) const;
77 
78  // Call functions in the station .lua
79  bool GetShipApproachWaypoints(const unsigned int port, const int stage, positionOrient_t &outPosOrient) const;
84  bool GetDockAnimPositionOrient(const unsigned int port, int stage, double t, const vector3d &from, positionOrient_t &outPosOrient, const Ship *ship) const;
85 
86  const std::string &ModelName() const { return modelName; }
87  float AngVel() const { return angVel; }
88  bool IsSurfaceStation() const { return (SURFACE == dockMethod); }
89  bool IsOrbitalStation() const { return (ORBITAL == dockMethod); }
90  unsigned int NumDockingPorts() const { return numDockingPorts; }
91  int NumDockingStages() const { return numDockingStages; }
92  int NumUndockStages() const { return numUndockStages; }
93  int ShipLaunchStage() const { return shipLaunchStage; }
94  float ParkingDistance() const { return parkingDistance; }
95  float ParkingGapSize() const { return parkingGapSize; }
96  const TPorts &Ports() const { return m_ports; }
97 
98  static void Init();
99 
100  static const SpaceStationType *RandomStationType(Random &random, const bool bIsGround);
101  static const SpaceStationType *FindByName(const std::string &name);
102 };
103 
104 #endif
Definition: Random.h:27
Definition: Model.h:88
Definition: Ship.h:64
Definition: SpaceStationType.h:16
double GetDockAnimStageDuration(const int stage) const
Definition: SpaceStationType.cpp:316
bool IsOrbitalStation() const
Definition: SpaceStationType.h:89
SPort * GetPortByBay(const int zeroBaseBayID)
Definition: SpaceStationType.cpp:281
float ParkingGapSize() const
Definition: SpaceStationType.h:95
std::vector< SPort > TPorts
Definition: SpaceStationType.h:39
int NumDockingStages() const
Definition: SpaceStationType.h:91
const SPort * FindPortByBay(const int zeroBaseBayID) const
Definition: SpaceStationType.cpp:268
int ShipLaunchStage() const
Definition: SpaceStationType.h:93
bool GetShipApproachWaypoints(const unsigned int port, const int stage, positionOrient_t &outPosOrient) const
Definition: SpaceStationType.cpp:294
bool GetDockAnimPositionOrient(const unsigned int port, int stage, double t, const vector3d &from, positionOrient_t &outPosOrient, const Ship *ship) const
Definition: SpaceStationType.cpp:357
std::map< Uint32, PortPath > PortPathMap
Definition: SpaceStationType.h:23
bool IsSurfaceStation() const
Definition: SpaceStationType.h:88
static void Init()
Definition: SpaceStationType.cpp:389
SpaceStationType(const std::string &id, const std::string &path)
Definition: SpaceStationType.cpp:22
float AngVel() const
Definition: SpaceStationType.h:87
std::map< Uint32, matrix4x4f > TMapBayIDMat
Definition: SpaceStationType.h:18
float ParkingDistance() const
Definition: SpaceStationType.h:94
void OnSetupComplete()
Definition: SpaceStationType.cpp:68
unsigned int NumDockingPorts() const
Definition: SpaceStationType.h:90
const TPorts & Ports() const
Definition: SpaceStationType.h:96
static const SpaceStationType * RandomStationType(Random &random, const bool bIsGround)
Definition: SpaceStationType.cpp:418
static const SpaceStationType * FindByName(const std::string &name)
Definition: SpaceStationType.cpp:428
int NumUndockStages() const
Definition: SpaceStationType.h:92
const std::string & ModelName() const
Definition: SpaceStationType.h:86
double GetUndockAnimStageDuration(const int stage) const
Definition: SpaceStationType.cpp:321
Definition: CityOnPlanet.h:31
Definition: SpaceStationType.h:19
TMapBayIDMat m_docking
Definition: SpaceStationType.h:20
TMapBayIDMat m_leaving
Definition: SpaceStationType.h:21
Definition: SpaceStationType.h:25
int minShipSize
Definition: SpaceStationType.h:33
bool inUse
Definition: SpaceStationType.h:34
int maxShipSize
Definition: SpaceStationType.h:33
int portId
Definition: SpaceStationType.h:32
std::string name
Definition: SpaceStationType.h:36
SPort()
Definition: SpaceStationType.h:27
static const int BAD_PORT_ID
Definition: SpaceStationType.h:26
std::vector< std::pair< int, std::string > > bayIDs
Definition: SpaceStationType.h:35
TMapBayIDMat m_approach
Definition: SpaceStationType.h:37
Definition: SpaceStationType.h:41
vector3d yaxis
Definition: SpaceStationType.h:44
vector3d pos
Definition: SpaceStationType.h:42
vector3d xaxis
Definition: SpaceStationType.h:43
vector3d zaxis
Definition: SpaceStationType.h:45