ddnet/src/engine/client.h

232 lines
6.3 KiB
C
Raw Normal View History

2010-11-20 10:37:14 +00:00
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
/* If you are missing that file, acquire a complete release at teeworlds.com. */
2010-05-29 07:25:38 +00:00
#ifndef ENGINE_CLIENT_H
#define ENGINE_CLIENT_H
#include "kernel.h"
#include "message.h"
2015-07-22 20:16:49 +00:00
#include <engine/friends.h>
2014-04-28 15:26:31 +00:00
#include <engine/shared/config.h>
2014-06-05 10:11:41 +00:00
#include <versionsrv/versionsrv.h>
2010-05-29 07:25:38 +00:00
enum
{
RECORDER_MANUAL=0,
RECORDER_AUTO=1,
RECORDER_RACE=2,
RECORDER_MAX=3,
};
typedef bool (*CLIENTFUNC_FILTER)(const void *pData, int DataSize, void *pUser);
2010-05-29 07:25:38 +00:00
class IClient : public IInterface
{
MACRO_INTERFACE("client", 0)
protected:
// quick access to state of the client
int m_State;
// quick access to time variables
2014-04-28 15:26:31 +00:00
int m_PrevGameTick[2];
int m_CurGameTick[2];
float m_GameIntraTick[2];
float m_GameTickTime[2];
2014-04-28 15:26:31 +00:00
int m_PredTick[2];
float m_PredIntraTick[2];
2010-05-29 07:25:38 +00:00
float m_LocalTime;
float m_RenderFrameTime;
2010-05-29 07:25:38 +00:00
int m_GameTickSpeed;
public:
2014-06-05 10:11:41 +00:00
char m_aNews[NEWS_SIZE];
int64 m_ReconnectTime;
2010-05-29 07:25:38 +00:00
class CSnapItem
{
public:
int m_Type;
int m_ID;
2010-05-29 07:25:38 +00:00
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
2014-04-28 15:26:31 +00:00
inline int PrevGameTick() const { return m_PrevGameTick[g_Config.m_ClDummy]; }
inline int GameTick() const { return m_CurGameTick[g_Config.m_ClDummy]; }
inline int PredGameTick() const { return m_PredTick[g_Config.m_ClDummy]; }
inline float IntraGameTick() const { return m_GameIntraTick[g_Config.m_ClDummy]; }
inline float PredIntraGameTick() const { return m_PredIntraTick[g_Config.m_ClDummy]; }
inline float GameTickTime() const { return m_GameTickTime[g_Config.m_ClDummy]; }
2010-05-29 07:25:38 +00:00
inline int GameTickSpeed() const { return m_GameTickSpeed; }
2010-05-29 07:25:38 +00:00
// other time access
inline float RenderFrameTime() const { return m_RenderFrameTime; }
2010-05-29 07:25:38 +00:00
inline float LocalTime() const { return m_LocalTime; }
2010-05-29 07:25:38 +00:00
// actions
virtual void Connect(const char *pAddress) = 0;
virtual void Disconnect() = 0;
// dummy
virtual void DummyDisconnect(const char *pReason) = 0;
2014-04-28 13:19:57 +00:00
virtual void DummyConnect() = 0;
virtual bool DummyConnected() = 0;
virtual bool DummyConnecting() = 0;
2014-12-31 14:35:49 +00:00
virtual void Restart() = 0;
2010-05-29 07:25:38 +00:00
virtual void Quit() = 0;
2010-10-06 21:07:35 +00:00
virtual const char *DemoPlayer_Play(const char *pFilename, int StorageType) = 0;
virtual void DemoRecorder_Start(const char *pFilename, bool WithTimestamp, int Recorder) = 0;
virtual void DemoRecorder_HandleAutoStart() = 0;
virtual void DemoRecorder_Stop(int Recorder) = 0;
virtual class IDemoRecorder *DemoRecorder(int Recorder) = 0;
virtual void AutoScreenshot_Start() = 0;
2015-05-19 22:51:02 +00:00
virtual void AutoStatScreenshot_Start() = 0;
virtual void ServerBrowserUpdate() = 0;
2010-05-29 07:25:38 +00:00
// gfx
virtual void SwitchWindowScreen(int Index) = 0;
virtual void ToggleFullscreen() = 0;
virtual void ToggleWindowBordered() = 0;
virtual void ToggleWindowVSync() = 0;
2010-05-29 07:25:38 +00:00
// networking
virtual void EnterGame() = 0;
//
2014-08-15 23:06:17 +00:00
virtual const char *MapDownloadName() = 0;
2010-05-29 07:25:38 +00:00
virtual int MapDownloadAmount() = 0;
virtual int MapDownloadTotalsize() = 0;
2010-05-29 07:25:38 +00:00
// input
virtual int *GetInput(int Tick) = 0;
virtual bool InputExists(int Tick) = 0;
2010-05-29 07:25:38 +00:00
// remote console
virtual void RconAuth(const char *pUsername, const char *pPassword) = 0;
virtual bool RconAuthed() = 0;
virtual bool UseTempRconCommands() = 0;
2010-05-29 07:25:38 +00:00
virtual void Rcon(const char *pLine) = 0;
2010-05-29 07:25:38 +00:00
// server info
virtual void GetServerInfo(class CServerInfo *pServerInfo) = 0;
virtual void CheckVersionUpdate() = 0;
2016-05-05 16:07:00 +00:00
virtual int GetPredictionTime() = 0;
2010-05-29 07:25:38 +00:00
// snapshot interface
2010-05-29 07:25:38 +00:00
enum
{
SNAP_CURRENT=0,
SNAP_PREV=1
};
2010-05-29 07:25:38 +00:00
// 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;
2010-05-29 07:25:38 +00:00
virtual void SnapSetStaticsize(int ItemType, int Size) = 0;
virtual int SendMsg(CMsgPacker *pMsg, int Flags) = 0;
2014-04-28 13:19:57 +00:00
virtual int SendMsgExY(CMsgPacker *pMsg, int Flags, bool System=true, int NetClient=1) = 0;
2010-05-29 07:25:38 +00:00
template<class T>
int SendPackMsg(T *pMsg, int Flags)
{
CMsgPacker Packer(pMsg->MsgID());
if(pMsg->Pack(&Packer))
return -1;
return SendMsg(&Packer, Flags);
}
//
2010-05-29 07:25:38 +00:00
virtual const char *ErrorString() = 0;
virtual const char *LatestVersion() = 0;
virtual bool ConnectionProblems() = 0;
virtual bool SoundInitFailed() = 0;
virtual int GetDebugFont() = 0;
//DDRace
virtual const char* GetCurrentMap() = 0;
virtual int GetCurrentMapCrc() = 0;
2016-08-23 01:08:36 +00:00
virtual const char* GetCurrentMapPath() = 0;
virtual const char* RaceRecordStart(const char *pFilename) = 0;
virtual void RaceRecordStop() = 0;
virtual bool RaceRecordIsRecording() = 0;
virtual void DemoSliceBegin() = 0;
virtual void DemoSliceEnd() = 0;
virtual void DemoSlice(const char *pDstPath, CLIENTFUNC_FILTER pfnFilter, void *pUser) = 0;
2014-09-19 22:36:22 +00:00
virtual void RequestDDNetSrvList() = 0;
virtual bool EditorHasUnsavedData() = 0;
2015-07-22 20:16:49 +00:00
virtual void GenerateTimeoutSeed() = 0;
2015-07-22 20:16:49 +00:00
virtual IFriends* Foes() = 0;
2010-05-29 07:25:38 +00:00
};
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 OnUpdate() = 0;
2010-05-29 07:25:38 +00:00
virtual void OnStateChange(int NewState, int OldState) = 0;
virtual void OnConnected() = 0;
2014-05-03 00:30:05 +00:00
virtual void OnMessage(int MsgID, CUnpacker *pUnpacker, bool IsDummy = 0) = 0;
2010-05-29 07:25:38 +00:00
virtual void OnPredict() = 0;
virtual void OnActivateEditor() = 0;
virtual int OnSnapInput(int *pData, bool Dummy, bool Force) = 0;
virtual void OnDummySwap() = 0;
2014-04-28 13:19:57 +00:00
virtual void SendDummyInfo(bool Start) = 0;
2010-05-29 07:25:38 +00:00
virtual const char *GetItemName(int Type) = 0;
virtual const char *Version() = 0;
virtual const char *NetVersion() = 0;
2014-04-28 14:47:44 +00:00
virtual void OnDummyDisconnect() = 0;
2010-05-29 07:25:38 +00:00
};
extern IGameClient *CreateGameClient();
#endif