about summary refs log tree commit diff
path: root/src/engine/client.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/client.h')
-rw-r--r--src/engine/client.h159
1 files changed, 159 insertions, 0 deletions
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<class T>
+	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