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_CLIENT_GAMECLIENT_H
4 #define GAME_CLIENT_GAMECLIENT_H
6 #include <base/vmath.h>
7 #include <engine/client.h>
8 #include <engine/console.h>
9 #include <game/layers.h>
10 #include <game/gamecore.h>
13 class CGameClient
: public IGameClient
24 void Add(class CComponent
*pComponent
);
26 class CComponent
*m_paComponents
[MAX_COMPONENTS
];
32 CNetObjHandler m_NetObjHandler
;
34 class IEngine
*m_pEngine
;
35 class IInput
*m_pInput
;
36 class IGraphics
*m_pGraphics
;
37 class ITextRender
*m_pTextRender
;
38 class IClient
*m_pClient
;
39 class ISound
*m_pSound
;
40 class IConsole
*m_pConsole
;
41 class IStorage
*m_pStorage
;
42 class IDemoPlayer
*m_pDemoPlayer
;
43 class IDemoRecorder
*m_pDemoRecorder
;
44 class IServerBrowser
*m_pServerBrowser
;
45 class IEditor
*m_pEditor
;
46 class IFriends
*m_pFriends
;
49 class CCollision m_Collision
;
54 void UpdatePositions();
57 int m_LastNewPredictedTick
;
61 static void ConTeam(IConsole::IResult
*pResult
, void *pUserData
);
62 static void ConKill(IConsole::IResult
*pResult
, void *pUserData
);
64 static void ConchainSpecialInfoupdate(IConsole::IResult
*pResult
, void *pUserData
, IConsole::FCommandCallback pfnCallback
, void *pCallbackUserData
);
67 IKernel
*Kernel() { return IInterface::Kernel(); }
68 IEngine
*Engine() const { return m_pEngine
; }
69 class IGraphics
*Graphics() const { return m_pGraphics
; }
70 class IClient
*Client() const { return m_pClient
; }
71 class CUI
*UI() { return &m_UI
; }
72 class ISound
*Sound() const { return m_pSound
; }
73 class IInput
*Input() const { return m_pInput
; }
74 class IStorage
*Storage() const { return m_pStorage
; }
75 class IConsole
*Console() { return m_pConsole
; }
76 class ITextRender
*TextRender() const { return m_pTextRender
; }
77 class IDemoPlayer
*DemoPlayer() const { return m_pDemoPlayer
; }
78 class IDemoRecorder
*DemoRecorder() const { return m_pDemoRecorder
; }
79 class IServerBrowser
*ServerBrowser() const { return m_pServerBrowser
; }
80 class CRenderTools
*RenderTools() { return &m_RenderTools
; }
81 class CLayers
*Layers() { return &m_Layers
; };
82 class CCollision
*Collision() { return &m_Collision
; };
83 class IEditor
*Editor() { return m_pEditor
; }
84 class IFriends
*Friends() { return m_pFriends
; }
86 int NetobjNumCorrections() { return m_NetObjHandler
.NumObjCorrections(); }
87 const char *NetobjCorrectedOn() { return m_NetObjHandler
.CorrectedObjOn(); }
89 bool m_SuppressEvents
;
91 bool m_NewPredictedTick
;
92 int m_FlagDropTick
[2];
95 CTuningParams m_Tuning
;
107 vec2 m_LocalCharacterPos
;
110 CCharacterCore m_PredictedPrevChar
;
111 CCharacterCore m_PredictedChar
;
116 const CNetObj_Character
*m_pLocalCharacter
;
117 const CNetObj_Character
*m_pLocalPrevCharacter
;
118 const CNetObj_PlayerInfo
*m_pLocalInfo
;
119 const CNetObj_SpectatorInfo
*m_pSpectatorInfo
;
120 const CNetObj_SpectatorInfo
*m_pPrevSpectatorInfo
;
121 const CNetObj_Flag
*m_paFlags
[2];
122 const CNetObj_GameInfo
*m_pGameInfoObj
;
123 const CNetObj_GameData
*m_pGameDataObj
;
124 int m_GameDataSnapID
;
126 const CNetObj_PlayerInfo
*m_paPlayerInfos
[MAX_CLIENTS
];
127 const CNetObj_PlayerInfo
*m_paInfoByScore
[MAX_CLIENTS
];
143 struct CCharacterInfo
148 CNetObj_Character m_Prev
;
149 CNetObj_Character m_Cur
;
151 // interpolated position
155 CCharacterInfo m_aCharacters
[MAX_CLIENTS
];
163 int m_UseCustomColor
;
167 char m_aName
[MAX_NAME_LENGTH
];
168 char m_aClan
[MAX_CLAN_LENGTH
];
170 char m_aSkinName
[64];
176 CCharacterCore m_Predicted
;
178 CTeeRenderInfo m_SkinInfo
; // this is what the server reports
179 CTeeRenderInfo m_RenderInfo
; // this is what we use
186 void UpdateRenderInfo();
190 CClientData m_aClients
[MAX_CLIENTS
];
192 CRenderTools m_RenderTools
;
197 virtual void OnConnected();
198 virtual void OnRender();
199 virtual void OnRelease();
200 virtual void OnInit();
201 virtual void OnConsoleInit();
202 virtual void OnStateChange(int NewState
, int OldState
);
203 virtual void OnMessage(int MsgId
, CUnpacker
*pUnpacker
);
204 virtual void OnNewSnapshot();
205 virtual void OnPredict();
206 virtual void OnActivateEditor();
207 virtual int OnSnapInput(int *pData
);
208 virtual void OnShutdown();
209 virtual void OnEnterGame();
210 virtual void OnRconLine(const char *pLine
);
211 virtual void OnGameOver();
212 virtual void OnStartGame();
214 virtual const char *GetItemName(int Type
);
215 virtual const char *Version();
216 virtual const char *NetVersion();
221 void SendSwitchTeam(int Team
);
222 void SendInfo(bool Start
);
223 void SendKill(int ClientID
);
225 // pointers to all systems
226 class CGameConsole
*m_pGameConsole
;
227 class CBinds
*m_pBinds
;
228 class CParticles
*m_pParticles
;
229 class CMenus
*m_pMenus
;
230 class CSkins
*m_pSkins
;
231 class CCountryFlags
*m_pCountryFlags
;
232 class CFlow
*m_pFlow
;
233 class CChat
*m_pChat
;
234 class CDamageInd
*m_pDamageind
;
235 class CCamera
*m_pCamera
;
236 class CControls
*m_pControls
;
237 class CEffects
*m_pEffects
;
238 class CSounds
*m_pSounds
;
239 class CMotd
*m_pMotd
;
240 class CMapImages
*m_pMapimages
;
241 class CVoting
*m_pVoting
;
242 class CScoreboard
*m_pScoreboard
;
243 class CItems
*m_pItems
;
247 inline float HueToRgb(float v1
, float v2
, float h
)
251 if((6.0f
* h
) < 1.0f
) return v1
+ (v2
- v1
) * 6.0f
* h
;
252 if((2.0f
* h
) < 1.0f
) return v2
;
253 if((3.0f
* h
) < 2.0f
) return v1
+ (v2
- v1
) * ((2.0f
/3.0f
) - h
) * 6.0f
;
257 inline vec3
HslToRgb(vec3 HSL
)
260 return vec3(HSL
.l
, HSL
.l
, HSL
.l
);
263 float v2
= HSL
.l
< 0.5f
? HSL
.l
* (1.0f
+ HSL
.s
) : (HSL
.l
+HSL
.s
) - (HSL
.s
*HSL
.l
);
264 float v1
= 2.0f
* HSL
.l
- v2
;
266 return vec3(HueToRgb(v1
, v2
, HSL
.h
+ (1.0f
/3.0f
)), HueToRgb(v1
, v2
, HSL
.h
), HueToRgb(v1
, v2
, HSL
.h
- (1.0f
/3.0f
)));
271 extern const char *Localize(const char *Str
);