made the dropped flag sign blink faster the last 5 seconds to indicate that it's...
[twcon.git] / src / game / client / gameclient.h
blob4783f8b4088ddbb97703bf477d14978d36144666
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>
11 #include "render.h"
13 class CGameClient : public IGameClient
15 class CStack
17 public:
18 enum
20 MAX_COMPONENTS = 64,
23 CStack();
24 void Add(class CComponent *pComponent);
26 class CComponent *m_paComponents[MAX_COMPONENTS];
27 int m_Num;
30 CStack m_All;
31 CStack m_Input;
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;
48 CLayers m_Layers;
49 class CCollision m_Collision;
50 CUI m_UI;
52 void DispatchInput();
53 void ProcessEvents();
54 void UpdatePositions();
56 int m_PredictedTick;
57 int m_LastNewPredictedTick;
59 int64 m_LastSendInfo;
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);
66 public:
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;
90 bool m_NewTick;
91 bool m_NewPredictedTick;
92 int m_FlagDropTick[2];
94 // TODO: move this
95 CTuningParams m_Tuning;
97 enum
99 SERVERMODE_PURE=0,
100 SERVERMODE_MOD,
101 SERVERMODE_PUREMOD,
103 int m_ServerMode;
105 int m_DemoSpecID;
107 vec2 m_LocalCharacterPos;
109 // predicted players
110 CCharacterCore m_PredictedPrevChar;
111 CCharacterCore m_PredictedChar;
113 // snap pointers
114 struct CSnapState
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];
129 int m_LocalClientID;
130 int m_NumPlayers;
131 int m_aTeamSize[2];
133 // spectate data
134 struct CSpectateInfo
136 bool m_Active;
137 int m_SpectatorID;
138 bool m_UsePosition;
139 vec2 m_Position;
140 } m_SpecInfo;
143 struct CCharacterInfo
145 bool m_Active;
147 // snapshots
148 CNetObj_Character m_Prev;
149 CNetObj_Character m_Cur;
151 // interpolated position
152 vec2 m_Position;
155 CCharacterInfo m_aCharacters[MAX_CLIENTS];
158 CSnapState m_Snap;
160 // client data
161 struct CClientData
163 int m_UseCustomColor;
164 int m_ColorBody;
165 int m_ColorFeet;
167 char m_aName[MAX_NAME_LENGTH];
168 char m_aClan[MAX_CLAN_LENGTH];
169 int m_Country;
170 char m_aSkinName[64];
171 int m_SkinID;
172 int m_SkinColor;
173 int m_Team;
174 int m_Emoticon;
175 int m_EmoticonStart;
176 CCharacterCore m_Predicted;
178 CTeeRenderInfo m_SkinInfo; // this is what the server reports
179 CTeeRenderInfo m_RenderInfo; // this is what we use
181 float m_Angle;
182 bool m_Active;
183 bool m_ChatIgnore;
184 bool m_Friend;
186 void UpdateRenderInfo();
187 void Reset();
190 CClientData m_aClients[MAX_CLIENTS];
192 CRenderTools m_RenderTools;
194 void OnReset();
196 // hooks
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();
219 // actions
220 // TODO: move these
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)
249 if(h < 0.0f) h += 1;
250 if(h > 1.0f) h -= 1;
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;
254 return v1;
257 inline vec3 HslToRgb(vec3 HSL)
259 if(HSL.s == 0.0f)
260 return vec3(HSL.l, HSL.l, HSL.l);
261 else
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);
273 #endif