1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
/* Starshatter: The Open Source Project
Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
AUTHOR: John DiCamillo
OVERVIEW
========
Everything needed to store and maintain space craft
See Also: FlightDeck
*/
#pragma once
#include <cstdint>
#include <Text.h>
#include "Geometry.h"
#include "SimObject.h"
// +--------------------------------------------------------------------+
class Ship;
class ShipDesign;
class FlightDeck;
class FlightDeckSlot;
class Element;
class HangarSlot;
class InboundSlot;
class CombatGroup;
// +--------------------------------------------------------------------+
class Hangar : public SimObserver
{
public:
Hangar();
Hangar(const Hangar& rhs);
virtual ~Hangar();
enum HANGAR_STATE { UNAVAIL = -2,
MAINT = -1,
STORAGE = 0,
PREP,
ALERT,
QUEUED,
LOCKED,
LAUNCH,
ACTIVE,
APPROACH,
RECOVERY
};
enum CONSTANTS { MAX_SQUADRONS=10 };
virtual void ExecFrame(double seconds);
void SetShip(Ship* s) { ship = s; }
virtual bool CreateSquadron(Text squadron, CombatGroup* g,
const ShipDesign* design, int count, int iff=-1,
int* def_load=0, int maint_count=0, int dead_count=0);
// used only by net client to expedite creation of already active ships:
virtual bool GotoActiveFlight(int squadron, int slot, Element* elem, int* loadout);
virtual bool GotoAlert(int squadron, int slot, FlightDeck* d, Element* elem=0, int* loadout=0, bool pkg=false, bool expedite=false);
virtual bool Ready(int squadron, int slot, FlightDeck* d);
virtual bool Launch(int squadron, int slot);
virtual bool StandDown(int squadron, int slot);
virtual bool CanStow(Ship* s);
virtual bool Stow(Ship* s);
virtual bool FindSlot(Ship* s, int& squadron, int& slot, int state=UNAVAIL);
virtual bool FindSquadronAndSlot(Ship* s, int& squadron, int& slot);
virtual bool FindAvailSlot(const ShipDesign* s, int& squadron, int& slot);
virtual bool FinishPrep(HangarSlot* slot);
virtual void SetAllIFF(int iff);
virtual bool Update(SimObject* obj);
virtual const char* GetObserverName() const;
// accessors:
int NumSquadrons() const { return nsquadrons; }
Text SquadronName(int n) const;
int SquadronSize(int n) const;
int SquadronIFF(int n) const;
const ShipDesign* SquadronDesign(int n) const;
int NumShipsReady(int squadron) const;
int NumShipsMaint(int squadron) const;
int NumShipsDead(int squadron) const;
int NumSlotsEmpty() const;
int GetActiveElements(List<Element>& active_list);
const HangarSlot* GetSlot(int squadron, int index) const;
Ship* GetShip(const HangarSlot* s) const;
const ShipDesign* GetDesign(const HangarSlot* s) const;
FlightDeck* GetFlightDeck(const HangarSlot* s) const;
int GetFlightDeckSlot(const HangarSlot* s) const;
int GetState(const HangarSlot* s) const;
double TimeRemaining(const HangarSlot* s) const;
Element* GetPackageElement(const HangarSlot* s) const;
const int* GetLoadout(const HangarSlot* s) const;
Text StatusName(const HangarSlot* s) const;
int PreflightQueue(FlightDeck* d) const;
std::uint32_t GetLastPatrolLaunch() const;
void SetLastPatrolLaunch(std::uint32_t t);
protected:
Ship* ship;
int nsquadrons;
int nslots[MAX_SQUADRONS];
Text names[MAX_SQUADRONS];
HangarSlot* squadrons[MAX_SQUADRONS];
std::uint32_t last_patrol_launch;
};
|