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
143
144
145
|
#ifndef GAME_SERVER_GAMECONTROLLER_H
#define GAME_SERVER_GAMECONTROLLER_H
#include <base/vmath.h>
/*
Class: Game Controller
Controls the main game logic. Keeping track of team and player score,
winning conditions and specific game logic.
*/
class IGameController
{
vec2 m_aaSpawnPoints[3][64];
int m_aNumSpawnPoints[3];
class CGameContext *m_pGameServer;
class IServer *m_pServer;
protected:
CGameContext *GameServer() const { return m_pGameServer; }
IServer *Server() const { return m_pServer; }
struct CSpawnEval
{
CSpawnEval()
{
m_Got = false;
m_FriendlyTeam = -1;
m_Pos = vec2(100,100);
}
vec2 m_Pos;
bool m_Got;
int m_FriendlyTeam;
float m_Score;
};
float EvaluateSpawnPos(CSpawnEval *pEval, vec2 Pos);
void EvaluateSpawnType(CSpawnEval *pEval, int Type);
bool EvaluateSpawn(class CPlayer *pP, vec2 *pPos);
void CycleMap();
void ResetGame();
char m_aMapWish[128];
int m_RoundStartTick;
int m_GameOverTick;
int m_SuddenDeath;
int m_aTeamscore[2];
int m_Warmup;
int m_RoundCount;
int m_GameFlags;
int m_UnbalancedTick;
bool m_ForceBalanced;
public:
const char *m_pGameType;
bool IsTeamplay() const;
IGameController(class CGameContext *pGameServer);
virtual ~IGameController();
void DoTeamScoreWincheck();
void DoPlayerScoreWincheck();
void DoWarmup(int Seconds);
void StartRound();
void EndRound();
void ChangeMap(const char *pToMap);
bool IsFriendlyFire(int Cid1, int Cid2);
bool IsForceBalanced();
/*
*/
virtual bool CanBeMovedOnBalance(int Cid);
virtual void Tick();
virtual void Snap(int SnappingClient);
/*
Function: on_entity
Called when the map is loaded to process an entity
in the map.
Arguments:
index - Entity index.
pos - Where the entity is located in the world.
Returns:
bool?
*/
virtual bool OnEntity(int Index, vec2 Pos);
/*
Function: on_CCharacter_spawn
Called when a CCharacter spawns into the game world.
Arguments:
chr - The CCharacter that was spawned.
*/
virtual void OnCharacterSpawn(class CCharacter *pChr);
/*
Function: on_CCharacter_death
Called when a CCharacter in the world dies.
Arguments:
victim - The CCharacter that died.
killer - The player that killed it.
weapon - What weapon that killed it. Can be -1 for undefined
weapon when switching team or player suicides.
*/
virtual int OnCharacterDeath(class CCharacter *pVictim, class CPlayer *pKiller, int Weapon);
virtual void OnPlayerInfoChange(class CPlayer *pP);
//
virtual bool CanSpawn(class CPlayer *pP, vec2 *pPos);
/*
*/
virtual const char *GetTeamName(int Team);
virtual int GetAutoTeam(int NotThisId);
virtual bool CanJoinTeam(int Team, int NotThisId);
bool CheckTeamBalance();
bool CanChangeTeam(CPlayer *pPplayer, int JoinTeam);
int ClampTeam(int Team);
virtual void PostReset();
};
#endif
|