aboutsummaryrefslogtreecommitdiff
path: root/src/libparsec/include/g_extra.h
blob: e58be445a0f1babd43cac3e68357f8a37fee7ac1 (plain)
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
* PARSEC HEADER: G_extra.h
*/

#ifndef _G_EXTRA_H_
#define _G_EXTRA_H_

#ifdef PARSEC_CLIENT
	//FIXME: move this into E_GLOBAL.H for the client
	#define TheGameExtraManager (G_ExtraManager::GetExtraManager())
#endif //PARSEC_CLIENT

// class maintaining all EXTRA related stuff ----------------------------------
//
class G_ExtraManager
{
public:

	int 			ExtraProbability;
	int 			MaxExtraArea;
	int 			MinExtraDist;
	int 			ProbHelixCannon;
	int 			ProbLightningDevice;
	int 			ProbPhotonCannon;
	int 			ProbProximityMine;
	int 			ProbMissilePack;
	int 			ProbDumbMissPack;
	int 			ProbHomMissPack;
	int 			ProbSwarmMissPack;
	int 			ProbRepairExtra;
	int 			ProbAfterburner;
	int				ProbHoloDecoy;
	int 			ProbInvisibility;
	int 			ProbInvulnerability;
	int 			ProbEnergyField;
	int 			ProbLaserUpgrade;
	int 			ProbLaserUpgrade1;
	int 			ProbLaserUpgrade2;
	int 			ProbEmpUpgrade1;
	int 			ProbEmpUpgrade2;

protected:

	G_ExtraManager();

	// place extras after ship was shot down
	void _PlaceShipExtras( int num, int objclass, ShipObject *shippo );


	// boost extra collected: energy boost 
	char* _CollectBoostEnergy( ShipObject* cur_ship, Extra1Obj* extra1po );
       
	// boost extra collected: repair damage 
	char* _CollectBoostRepair( ShipObject* cur_ship, Extra1Obj* extra1po );

	// package extra collected: dumb missiles
	char* _CollectPackDumb( ShipObject* cur_ship, Extra2Obj* extra2po );

	// package extra collected: guided missiles
	char* _CollectPackGuide( ShipObject* cur_ship, Extra2Obj* extra2po );

	// device extra collected: swarm missiles
	char* _CollectPackSwarm( ShipObject* cur_ship, Extra2Obj* extra2po );

	// package extra collected: proximity mines
	char* _CollectPackMine( ShipObject* cur_ship, Extra2Obj* extra2po );

	// device extra collected: helix cannon
	char* _CollectDeviceHelix( ShipObject* cur_ship );

	// device extra collected: lightning device
	char* _CollectDeviceLightning( ShipObject* cur_ship );

	// device extra collected: photon cannon
	char* _CollectDevicePhoton( ShipObject* cur_ship );

	// device extra collected: afterburner
	char* _CollectDeviceAfterburner( ShipObject* cur_ship );

	// device extra collected: invisibility
	char* _CollectDeviceInvisibility( ShipObject* cur_ship );

	// device extra collected: invulnerability
	char* _CollectDeviceInvulnerability( ShipObject* cur_ship );

	// device extra collected: decoy
	char* _CollectDeviceDecoy( ShipObject* cur_ship );

	// device extra collected: laser upgrade 1
	char* _CollectDeviceLaserUpgrade1( ShipObject* cur_ship );

	// device extra collected: laser upgrade 2
	char* _CollectDeviceLaserUpgrade2( ShipObject* cur_ship );

	// device extra collected: emp upgrade 1
	char* _CollectDeviceEmpUpgrade1( ShipObject* cur_ship );

	// device extra collected: emp upgrade 2
	char* _CollectDeviceEmpUpgrade2( ShipObject* cur_ship );

	// helper function when collecting devices
	char* _CollectDevice( int nDevice, ShipObject* cur_ship );

	// helper function when collecting specials
	char* _CollectSpecial( int nSpecial, ShipObject* cur_ship );

  // function when colliding with a mine
  char* _CollisionProximityMine( Mine1Obj *minepo );

public:

	// SINGLETON pattern
	static G_ExtraManager* GetExtraManager()
	{
		static G_ExtraManager _TheGameExtraManager;
		return &_TheGameExtraManager;
	}

	// place extras in vicinity of local ship object
	void OBJ_DoExtraPlacement();

	// create extras after ship was shot down
	void OBJ_CreateShipExtras( ShipObject *shippo );

	// fill member variables of extras
	void OBJ_FillExtraMemberVars( ExtraObject* extrapo );

	// kill extra that immediately follows passed node in list
	void OBJ_KillExtra( ExtraObject* precnode, int collected );

	// animate an extra
	void OBJ_AnimateExtra( ExtraObject* extrapo );


	// perform action according to extra type and determine message to show
	char* CollectExtra( ShipObject* cur_ship, ExtraObject* curextra );
       char* _CollectBoostEnergyField( ShipObject* cur_ship, int boost );
};



#endif // _G_EXTRA_H_