From 72c06a258940696093f255fb1061beb58e1cdd0b Mon Sep 17 00:00:00 2001 From: Magnus Auvinen Date: Sat, 29 May 2010 07:25:38 +0000 Subject: copied refactor to trunk --- src/engine/client.h | 159 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 src/engine/client.h (limited to 'src/engine/client.h') diff --git a/src/engine/client.h b/src/engine/client.h new file mode 100644 index 00000000..8e5a5577 --- /dev/null +++ b/src/engine/client.h @@ -0,0 +1,159 @@ +#ifndef ENGINE_CLIENT_H +#define ENGINE_CLIENT_H +#include "kernel.h" + +#include "message.h" + +class IClient : public IInterface +{ + MACRO_INTERFACE("client", 0) +protected: + // quick access to state of the client + int m_State; + + // quick access to time variables + int m_PrevGameTick; + int m_CurGameTick; + float m_GameIntraTick; + float m_GameTickTime; + + int m_PredTick; + float m_PredIntraTick; + + float m_LocalTime; + float m_FrameTime; + + int m_GameTickSpeed; +public: + + class CSnapItem + { + public: + int m_Type; + int m_Id; + int m_DataSize; + }; + + /* Constants: Client States + STATE_OFFLINE - The client is offline. + STATE_CONNECTING - The client is trying to connect to a server. + STATE_LOADING - The client has connected to a server and is loading resources. + STATE_ONLINE - The client is connected to a server and running the game. + STATE_DEMOPLAYBACK - The client is playing a demo + STATE_QUITING - The client is quiting. + */ + + enum + { + STATE_OFFLINE=0, + STATE_CONNECTING, + STATE_LOADING, + STATE_ONLINE, + STATE_DEMOPLAYBACK, + STATE_QUITING, + }; + + // + inline int State() const { return m_State; } + + // tick time access + inline int PrevGameTick() const { return m_PrevGameTick; } + inline int GameTick() const { return m_CurGameTick; } + inline int PredGameTick() const { return m_PredTick; } + inline float IntraGameTick() const { return m_GameIntraTick; } + inline float PredIntraGameTick() const { return m_PredIntraTick; } + inline float GameTickTime() const { return m_GameTickTime; } + inline int GameTickSpeed() const { return m_GameTickSpeed; } + + // other time access + inline float FrameTime() const { return m_FrameTime; } + inline float LocalTime() const { return m_LocalTime; } + + // actions + virtual void Connect(const char *pAddress) = 0; + virtual void Disconnect() = 0; + virtual void Quit() = 0; + virtual const char *DemoPlayer_Play(const char *pFilename) = 0; + + // networking + virtual void EnterGame() = 0; + + // + virtual int MapDownloadAmount() = 0; + virtual int MapDownloadTotalsize() = 0; + + // input + virtual int *GetInput(int Tick) = 0; + + // remote console + virtual void RconAuth(const char *pUsername, const char *pPassword) = 0; + virtual bool RconAuthed() = 0; + virtual void Rcon(const char *pLine) = 0; + + // server info + virtual void GetServerInfo(class CServerInfo *pServerInfo) = 0; + + // snapshot interface + + enum + { + SNAP_CURRENT=0, + SNAP_PREV=1 + }; + + // TODO: Refactor: should redo this a bit i think, too many virtual calls + virtual int SnapNumItems(int SnapId) = 0; + virtual void *SnapFindItem(int SnapId, int Type, int Id) = 0; + virtual void *SnapGetItem(int SnapId, int Index, CSnapItem *pItem) = 0; + virtual void SnapInvalidateItem(int SnapId, int Index) = 0; + + virtual void SnapSetStaticsize(int ItemType, int Size) = 0; + + virtual int SendMsg(CMsgPacker *pMsg, int Flags) = 0; + + template + int SendPackMsg(T *pMsg, int Flags) + { + CMsgPacker Packer(pMsg->MsgID()); + if(pMsg->Pack(&Packer)) + return -1; + return SendMsg(&Packer, Flags); + } + + // + virtual const char *UserDirectory() = 0; + + // + virtual const char *ErrorString() = 0; + virtual const char *LatestVersion() = 0; + virtual bool ConnectionProblems() = 0; +}; + +class IGameClient : public IInterface +{ + MACRO_INTERFACE("gameclient", 0) +protected: +public: + virtual void OnConsoleInit() = 0; + + virtual void OnRconLine(const char *pLine) = 0; + virtual void OnInit() = 0; + virtual void OnNewSnapshot() = 0; + virtual void OnEnterGame() = 0; + virtual void OnShutdown() = 0; + virtual void OnRender() = 0; + virtual void OnStateChange(int NewState, int OldState) = 0; + virtual void OnConnected() = 0; + virtual void OnMessage(int MsgId, CUnpacker *pUnpacker) = 0; + virtual void OnPredict() = 0; + + virtual int OnSnapInput(int *pData) = 0; + + virtual const char *GetItemName(int Type) = 0; + virtual const char *Version() = 0; + virtual const char *NetVersion() = 0; + +}; + +extern IGameClient *CreateGameClient(); +#endif -- cgit 1.4.1