DDraceNetwork Documentation
Loading...
Searching...
No Matches
gamecontroller.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef GAME_SERVER_GAMECONTROLLER_H
4#define GAME_SERVER_GAMECONTROLLER_H
5
6#include <base/dbg.h>
7#include <base/vmath.h>
8
9#include <engine/map.h>
11
12#include <generated/protocol.h>
13
14#include <game/server/teams.h>
15
17
18/*
19 Class: Game Controller
20 Controls the main game logic. Keeping track of team and player score,
21 winning conditions and specific game logic.
22*/
24{
25 friend class CSaveTeam; // need access to GameServer() and Server()
26
27protected:
36
37private:
38 std::vector<vec2> m_avSpawnPoints[NUM_SPAWNTYPES];
39
43
45
46protected:
48 CConfig *Config() { return m_pConfig; }
49 IServer *Server() const { return m_pServer; }
50
51 void DoActivityCheck();
52
54 {
56 {
57 m_Got = false;
58 m_FriendlyTeam = -1;
59 m_Pos = vec2(100, 100);
60 }
61
63 bool m_Got;
65 float m_Score;
66 };
67
68 float EvaluateSpawnPos(CSpawnEval *pEval, vec2 Pos, int ClientId);
69 void EvaluateSpawnType(CSpawnEval *pEval, ESpawnType SpawnType, int ClientId);
70
71 void ResetGame();
72
74
78
81
83
84public:
85 const char *m_pGameType;
86
87 IGameController(class CGameContext *pGameServer);
89
90 // event
91 /*
92 Function: OnCharacterDeath
93 Called when a CCharacter in the world dies.
94
95 Arguments:
96 victim - The CCharacter that died.
97 killer - The player that killed it.
98 weapon - What weapon that killed it. Can be -1 for undefined
99 weapon when switching team or player suicides.
100 */
101 virtual int OnCharacterDeath(class CCharacter *pVictim, class CPlayer *pKiller, int Weapon);
102 /*
103 Function: OnCharacterSpawn
104 Called when a CCharacter spawns into the game world.
105
106 Arguments:
107 chr - The CCharacter that was spawned.
108 */
109 virtual void OnCharacterSpawn(class CCharacter *pChr);
110
111 virtual void HandleCharacterTiles(class CCharacter *pChr, int MapIndex);
112 virtual void SetArmorProgress(CCharacter *pCharacter, int Progress) {}
113
114 /*
115 Function: OnEntity
116 Called when the map is loaded to process an entity
117 in the map.
118
119 Arguments:
120 index - Entity index.
121 pos - Where the entity is located in the world.
122
123 Returns:
124 bool?
125 */
126 virtual bool OnEntity(int Index, int x, int y, int Layer, int Flags, bool Initial, int Number = 0);
127
128 virtual void OnPlayerConnect(class CPlayer *pPlayer);
129 virtual void OnPlayerDisconnect(class CPlayer *pPlayer, const char *pReason);
130
131 virtual void OnReset();
132
133 // game
134 virtual void DoWarmup(int Seconds);
135
136 void SetGamePaused(bool Paused);
137 bool IsGamePaused() const;
138 void StartRound();
139 void EndRound();
140 void ChangeMap(const char *pToMap);
141
142 /*
143
144 */
145 virtual void Tick();
146
147 virtual void Snap(int SnappingClient);
148
157 virtual int SnapPlayerScore(int SnappingClient, CPlayer *pPlayer) { return 0; }
158
160 {
161 public:
162 CFinishTime(int Seconds, int Milliseconds) :
163 m_Seconds(Seconds), m_Milliseconds(Milliseconds)
164 {
165 dbg_assert(Seconds >= 0, "Invalid Seconds: %d", Seconds);
166 dbg_assert(Milliseconds >= 0 && Milliseconds < 1000, "Invalid Milliseconds: %d", Milliseconds);
167 }
168
171
174
175 private:
176 CFinishTime(int Type)
177 {
178 m_Seconds = Type;
179 m_Milliseconds = 0;
180 }
181 };
182
191 virtual CFinishTime SnapPlayerTime(int SnappingClient, CPlayer *pPlayer) { return CFinishTime::Unset(); }
192
200 virtual CFinishTime SnapMapBestTime(int SnappingClient) { return CFinishTime::Unset(); }
201
202 // spawn
203 virtual bool CanSpawn(int Team, vec2 *pOutPos, int ClientId);
204
205 virtual void DoTeamChange(class CPlayer *pPlayer, int Team, bool DoChatMsg = true);
206
207 int TileFlagsToPickupFlags(int TileFlags) const;
208
209 /*
210
211 */
212 virtual bool IsValidTeam(int Team);
213 virtual const char *GetTeamName(int Team);
214 virtual int GetAutoTeam(int NotThisId);
215 virtual bool CanJoinTeam(int Team, int NotThisId, char *pErrorReason, int ErrorReasonSize);
216
217 CClientMask GetMaskForPlayerWorldEvent(int Asker, int ExceptID = -1);
218
219 bool IsTeamPlay() const { return m_GameFlags & GAMEFLAG_TEAMS; }
220 // DDRace
221
222 std::optional<float> m_CurrentRecord;
223 CGameTeams &Teams() { return m_Teams; }
224 std::shared_ptr<CScoreLoadBestTimeResult> m_pLoadBestTimeResult;
225};
226
227#endif
Definition character.h:24
Definition config.h:30
Definition gamecontext.h:112
Definition teams.h:20
Definition player.h:26
Definition gamecontroller.h:160
CFinishTime(int Seconds, int Milliseconds)
Definition gamecontroller.h:162
CFinishTime(int Type)
Definition gamecontroller.h:176
int m_Milliseconds
Definition gamecontroller.h:170
static CFinishTime Unset()
Definition gamecontroller.h:172
static CFinishTime NotFinished()
Definition gamecontroller.h:173
int m_Seconds
Definition gamecontroller.h:169
virtual void Snap(int SnappingClient)
Definition gamecontroller.cpp:598
void EndRound()
Definition gamecontroller.cpp:453
virtual void OnPlayerConnect(class CPlayer *pPlayer)
Definition gamecontroller.cpp:402
CGameTeams m_Teams
Definition gamecontroller.h:44
virtual void OnPlayerDisconnect(class CPlayer *pPlayer, const char *pReason)
Definition gamecontroller.cpp:435
virtual const char * GetTeamName(int Team)
Definition gamecontroller.cpp:473
std::optional< float > m_CurrentRecord
Definition gamecontroller.h:222
CClientMask GetMaskForPlayerWorldEvent(int Asker, int ExceptID=-1)
Definition gamecontroller.cpp:750
virtual CFinishTime SnapMapBestTime(int SnappingClient)
Definition gamecontroller.h:200
virtual void OnReset()
Definition gamecontroller.cpp:520
virtual void SetArmorProgress(CCharacter *pCharacter, int Progress)
Definition gamecontroller.h:112
class CConfig * m_pConfig
Definition gamecontroller.h:41
virtual bool CanJoinTeam(int Team, int NotThisId, char *pErrorReason, int ErrorReasonSize)
Definition gamecontroller.cpp:720
std::shared_ptr< CScoreLoadBestTimeResult > m_pLoadBestTimeResult
Definition gamecontroller.h:224
virtual bool IsValidTeam(int Team)
Definition gamecontroller.cpp:468
int m_Warmup
Definition gamecontroller.h:79
virtual void Tick()
Definition gamecontroller.cpp:558
virtual void HandleCharacterTiles(class CCharacter *pChr, int MapIndex)
Definition gamecontroller.cpp:545
void ResetGame()
Definition gamecontroller.cpp:463
int TileFlagsToPickupFlags(int TileFlags) const
Definition gamecontroller.cpp:783
bool IsTeamPlay() const
Definition gamecontroller.h:219
const char * m_pGameType
Definition gamecontroller.h:85
int m_GameOverTick
Definition gamecontroller.h:76
virtual int SnapPlayerScore(int SnappingClient, CPlayer *pPlayer)
Definition gamecontroller.h:157
void SetGamePaused(bool Paused)
Definition gamecontroller.cpp:486
char m_aMapWish[MAX_MAP_LENGTH]
Definition gamecontroller.h:73
CConfig * Config()
Definition gamecontroller.h:48
virtual void OnCharacterSpawn(class CCharacter *pChr)
Definition gamecontroller.cpp:532
CGameTeams & Teams()
Definition gamecontroller.h:223
virtual ~IGameController()
friend class CSaveTeam
Definition gamecontroller.h:25
void EvaluateSpawnType(CSpawnEval *pEval, ESpawnType SpawnType, int ClientId)
Definition gamecontroller.cpp:105
virtual void DoTeamChange(class CPlayer *pPlayer, int Team, bool DoChatMsg=true)
Definition gamecontroller.cpp:758
CGameContext * GameServer() const
Definition gamecontroller.h:47
bool IsGamePaused() const
Definition gamecontroller.cpp:496
virtual int OnCharacterDeath(class CCharacter *pVictim, class CPlayer *pKiller, int Weapon)
Definition gamecontroller.cpp:527
virtual void DoWarmup(int Seconds)
Definition gamecontroller.cpp:550
virtual CFinishTime SnapPlayerTime(int SnappingClient, CPlayer *pPlayer)
Definition gamecontroller.h:191
IServer * Server() const
Definition gamecontroller.h:49
ESpawnType
Definition gamecontroller.h:29
@ NUM_SPAWNTYPES
Definition gamecontroller.h:34
@ SPAWNTYPE_RED
Definition gamecontroller.h:31
@ SPAWNTYPE_BLUE
Definition gamecontroller.h:32
@ SPAWNTYPE_DEFAULT
Definition gamecontroller.h:30
void ChangeMap(const char *pToMap)
Definition gamecontroller.cpp:515
class IServer * m_pServer
Definition gamecontroller.h:42
virtual bool OnEntity(int Index, int x, int y, int Layer, int Flags, bool Initial, int Number=0)
Definition gamecontroller.cpp:183
void StartRound()
Definition gamecontroller.cpp:501
std::vector< vec2 > m_avSpawnPoints[NUM_SPAWNTYPES]
Definition gamecontroller.h:38
int m_SuddenDeath
Definition gamecontroller.h:77
class CGameContext * m_pGameServer
Definition gamecontroller.h:40
int m_RoundCount
Definition gamecontroller.h:80
int m_RoundStartTick
Definition gamecontroller.h:75
virtual int GetAutoTeam(int NotThisId)
Definition gamecontroller.cpp:711
float EvaluateSpawnPos(CSpawnEval *pEval, vec2 Pos, int ClientId)
Definition gamecontroller.cpp:89
virtual bool CanSpawn(int Team, vec2 *pOutPos, int ClientId)
Definition gamecontroller.cpp:168
void DoActivityCheck()
Definition gamecontroller.cpp:46
IGameController(class CGameContext *pGameServer)
Definition gamecontroller.cpp:24
int m_GameFlags
Definition gamecontroller.h:82
Definition server.h:34
@ MAX_MAP_LENGTH
Definition map.h:15
std::bitset< MAX_CLIENTS > CClientMask
Definition protocol.h:166
@ GAMEFLAG_TEAMS
Definition protocol.h:168
#define dbg_assert(test, fmt,...)
Definition dbg.h:27
constexpr int UNSET
Definition protocol.h:163
constexpr int NOT_FINISHED_MILLIS
Definition protocol.h:162
Definition scoreworker.h:70
Definition gamecontroller.h:54
bool m_Got
Definition gamecontroller.h:63
int m_FriendlyTeam
Definition gamecontroller.h:64
float m_Score
Definition gamecontroller.h:65
vec2 m_Pos
Definition gamecontroller.h:62
CSpawnEval()
Definition gamecontroller.h:55
vector2_base< float > vec2
Definition vmath.h:161