Pioneer
Loading...
Searching...
No Matches
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
11class Ship;
12namespace SceneGraph {
13 class Model;
14}
15
17public:
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;
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
48private:
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
68public:
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
const std::string & ModelName() const
Definition SpaceStationType.h:86
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
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
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 TPorts & Ports() const
Definition SpaceStationType.h:96
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