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_CLIENT_H
|
|
|
|
#define ENGINE_CLIENT_CLIENT_H
|
2009-10-29 12:14:31 +00:00
|
|
|
|
2023-06-28 20:14:51 +00:00
|
|
|
#include <deque>
|
2017-11-23 14:47:38 +00:00
|
|
|
#include <memory>
|
|
|
|
|
2018-06-05 19:22:40 +00:00
|
|
|
#include <base/hash.h>
|
2023-10-22 10:30:23 +00:00
|
|
|
|
Make sure headers compile standalone
Not planning to do this automatically, but at least cleaning it up once
provides some benefit. Every header should include what it uses.
$ for i in src/**/*.h; do j=${i#"src/"}; echo $j; echo "#include <$j>\nint main() { return 0; }" | /usr/bin/c++ -DCONF_OPENSSL -DCONF_SQL -DCONF_VIDEORECORDER -DCONF_WAVPACK_CLOSE_FILE -DCONF_WAVPACK_OPEN_FILE_INPUT_EX -DGAME_RELEASE_VERSION=\"15.0.5\" -DGLEW_STATIC -D_FORTIFY_SOURCE=2 -I/usr/include/freetype2 -I/usr/include/opus -I/usr/include/SDL2 -I/usr/include/wavpack -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -Isrc -I/usr/include/mysql -I/home/deen/sys/include/ -O2 -g -DNDEBUG -fdiagnostics-color=always -fstack-protector-all -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wformat=2 -Wno-nullability-completeness -Wduplicated-cond -Wduplicated-branches -Wlogical-op -Wrestrict -std=gnu++11 -o /dev/null -x c++ -; done
Ignored: tuning.h, variables.h, config_common.h, mapitems_ex_types.h, mapbugs_list.h, protocol7.h, teehistorian_ex_chunks.h, protocol_ex_msgs.h, config.h, config_variables.h, external, keynames.h
2020-09-26 08:23:33 +00:00
|
|
|
#include <engine/client.h>
|
2022-01-31 02:11:47 +00:00
|
|
|
#include <engine/client/checksum.h>
|
2020-09-10 18:14:47 +00:00
|
|
|
#include <engine/client/friends.h>
|
2020-10-10 21:01:57 +00:00
|
|
|
#include <engine/client/ghost.h>
|
Make sure headers compile standalone
Not planning to do this automatically, but at least cleaning it up once
provides some benefit. Every header should include what it uses.
$ for i in src/**/*.h; do j=${i#"src/"}; echo $j; echo "#include <$j>\nint main() { return 0; }" | /usr/bin/c++ -DCONF_OPENSSL -DCONF_SQL -DCONF_VIDEORECORDER -DCONF_WAVPACK_CLOSE_FILE -DCONF_WAVPACK_OPEN_FILE_INPUT_EX -DGAME_RELEASE_VERSION=\"15.0.5\" -DGLEW_STATIC -D_FORTIFY_SOURCE=2 -I/usr/include/freetype2 -I/usr/include/opus -I/usr/include/SDL2 -I/usr/include/wavpack -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -Isrc -I/usr/include/mysql -I/home/deen/sys/include/ -O2 -g -DNDEBUG -fdiagnostics-color=always -fstack-protector-all -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wformat=2 -Wno-nullability-completeness -Wduplicated-cond -Wduplicated-branches -Wlogical-op -Wrestrict -std=gnu++11 -o /dev/null -x c++ -; done
Ignored: tuning.h, variables.h, config_common.h, mapitems_ex_types.h, mapbugs_list.h, protocol7.h, teehistorian_ex_chunks.h, protocol_ex_msgs.h, config.h, config_variables.h, external, keynames.h
2020-09-26 08:23:33 +00:00
|
|
|
#include <engine/client/serverbrowser.h>
|
2020-09-03 12:08:26 +00:00
|
|
|
#include <engine/client/updater.h>
|
Make sure headers compile standalone
Not planning to do this automatically, but at least cleaning it up once
provides some benefit. Every header should include what it uses.
$ for i in src/**/*.h; do j=${i#"src/"}; echo $j; echo "#include <$j>\nint main() { return 0; }" | /usr/bin/c++ -DCONF_OPENSSL -DCONF_SQL -DCONF_VIDEORECORDER -DCONF_WAVPACK_CLOSE_FILE -DCONF_WAVPACK_OPEN_FILE_INPUT_EX -DGAME_RELEASE_VERSION=\"15.0.5\" -DGLEW_STATIC -D_FORTIFY_SOURCE=2 -I/usr/include/freetype2 -I/usr/include/opus -I/usr/include/SDL2 -I/usr/include/wavpack -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -Isrc -I/usr/include/mysql -I/home/deen/sys/include/ -O2 -g -DNDEBUG -fdiagnostics-color=always -fstack-protector-all -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wformat=2 -Wno-nullability-completeness -Wduplicated-cond -Wduplicated-branches -Wlogical-op -Wrestrict -std=gnu++11 -o /dev/null -x c++ -; done
Ignored: tuning.h, variables.h, config_common.h, mapitems_ex_types.h, mapbugs_list.h, protocol7.h, teehistorian_ex_chunks.h, protocol_ex_msgs.h, config.h, config_variables.h, external, keynames.h
2020-09-26 08:23:33 +00:00
|
|
|
#include <engine/editor.h>
|
|
|
|
#include <engine/graphics.h>
|
|
|
|
#include <engine/shared/config.h>
|
|
|
|
#include <engine/shared/demo.h>
|
|
|
|
#include <engine/shared/fifo.h>
|
2021-12-24 11:17:46 +00:00
|
|
|
#include <engine/shared/http.h>
|
Make sure headers compile standalone
Not planning to do this automatically, but at least cleaning it up once
provides some benefit. Every header should include what it uses.
$ for i in src/**/*.h; do j=${i#"src/"}; echo $j; echo "#include <$j>\nint main() { return 0; }" | /usr/bin/c++ -DCONF_OPENSSL -DCONF_SQL -DCONF_VIDEORECORDER -DCONF_WAVPACK_CLOSE_FILE -DCONF_WAVPACK_OPEN_FILE_INPUT_EX -DGAME_RELEASE_VERSION=\"15.0.5\" -DGLEW_STATIC -D_FORTIFY_SOURCE=2 -I/usr/include/freetype2 -I/usr/include/opus -I/usr/include/SDL2 -I/usr/include/wavpack -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -Isrc -I/usr/include/mysql -I/home/deen/sys/include/ -O2 -g -DNDEBUG -fdiagnostics-color=always -fstack-protector-all -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wformat=2 -Wno-nullability-completeness -Wduplicated-cond -Wduplicated-branches -Wlogical-op -Wrestrict -std=gnu++11 -o /dev/null -x c++ -; done
Ignored: tuning.h, variables.h, config_common.h, mapitems_ex_types.h, mapbugs_list.h, protocol7.h, teehistorian_ex_chunks.h, protocol_ex_msgs.h, config.h, config_variables.h, external, keynames.h
2020-09-26 08:23:33 +00:00
|
|
|
#include <engine/shared/network.h>
|
2024-03-25 05:46:00 +00:00
|
|
|
#include <engine/textrender.h>
|
2020-10-02 13:43:52 +00:00
|
|
|
#include <engine/warning.h>
|
2017-11-23 14:47:38 +00:00
|
|
|
|
2023-10-17 15:31:52 +00:00
|
|
|
#include "graph.h"
|
2023-10-17 15:37:12 +00:00
|
|
|
#include "smooth_time.h"
|
2023-10-17 15:31:52 +00:00
|
|
|
|
2022-06-16 17:50:46 +00:00
|
|
|
class CDemoEdit;
|
|
|
|
class IDemoRecorder;
|
|
|
|
class CMsgPacker;
|
|
|
|
class CUnpacker;
|
|
|
|
class IConfigManager;
|
|
|
|
class IDiscord;
|
2023-10-22 10:30:23 +00:00
|
|
|
class IEngine;
|
2022-06-16 17:50:46 +00:00
|
|
|
class IEngineInput;
|
|
|
|
class IEngineMap;
|
|
|
|
class IEngineSound;
|
|
|
|
class IFriends;
|
2023-10-22 10:30:23 +00:00
|
|
|
class ILogger;
|
2022-06-16 17:50:46 +00:00
|
|
|
class ISteam;
|
2023-12-03 11:53:20 +00:00
|
|
|
class INotifications;
|
2022-06-16 17:50:46 +00:00
|
|
|
class IStorage;
|
|
|
|
class IUpdater;
|
|
|
|
|
2022-11-29 17:14:38 +00:00
|
|
|
#define CONNECTLINK_DOUBLE_SLASH "ddnet://"
|
|
|
|
#define CONNECTLINK_NO_SLASH "ddnet:"
|
2018-12-13 18:57:32 +00:00
|
|
|
|
2019-06-03 19:52:14 +00:00
|
|
|
class CServerCapabilities
|
|
|
|
{
|
|
|
|
public:
|
2023-11-27 21:29:14 +00:00
|
|
|
bool m_ChatTimeoutCode = false;
|
|
|
|
bool m_AnyPlayerFlag = false;
|
|
|
|
bool m_PingEx = false;
|
|
|
|
bool m_AllowDummy = false;
|
|
|
|
bool m_SyncWeaponInput = false;
|
2019-06-03 19:52:14 +00:00
|
|
|
};
|
|
|
|
|
2016-04-27 15:05:30 +00:00
|
|
|
class CClient : public IClient, public CDemoPlayer::IListener
|
2010-05-29 07:25:38 +00:00
|
|
|
{
|
|
|
|
// needed interfaces
|
2023-08-15 17:36:18 +00:00
|
|
|
IConfigManager *m_pConfigManager = nullptr;
|
|
|
|
CConfig *m_pConfig = nullptr;
|
|
|
|
IConsole *m_pConsole = nullptr;
|
|
|
|
IDiscord *m_pDiscord = nullptr;
|
|
|
|
IEditor *m_pEditor = nullptr;
|
|
|
|
IEngine *m_pEngine = nullptr;
|
|
|
|
IFavorites *m_pFavorites = nullptr;
|
|
|
|
IGameClient *m_pGameClient = nullptr;
|
|
|
|
IEngineGraphics *m_pGraphics = nullptr;
|
|
|
|
IEngineInput *m_pInput = nullptr;
|
|
|
|
IEngineMap *m_pMap = nullptr;
|
|
|
|
IEngineSound *m_pSound = nullptr;
|
|
|
|
ISteam *m_pSteam = nullptr;
|
2023-12-03 11:53:20 +00:00
|
|
|
INotifications *m_pNotifications = nullptr;
|
2023-08-15 17:36:18 +00:00
|
|
|
IStorage *m_pStorage = nullptr;
|
2023-08-15 17:39:22 +00:00
|
|
|
IEngineTextRender *m_pTextRender = nullptr;
|
2023-08-15 17:36:18 +00:00
|
|
|
IUpdater *m_pUpdater = nullptr;
|
2023-12-18 19:01:26 +00:00
|
|
|
CHttp m_Http;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2022-06-30 22:36:32 +00:00
|
|
|
CNetClient m_aNetClient[NUM_CONNS];
|
2022-06-16 17:50:46 +00:00
|
|
|
CDemoPlayer m_DemoPlayer;
|
2022-06-30 22:36:32 +00:00
|
|
|
CDemoRecorder m_aDemoRecorder[RECORDER_MAX];
|
2022-06-16 17:50:46 +00:00
|
|
|
CDemoEditor m_DemoEditor;
|
|
|
|
CGhostRecorder m_GhostRecorder;
|
|
|
|
CGhostLoader m_GhostLoader;
|
|
|
|
CServerBrowser m_ServerBrowser;
|
|
|
|
CUpdater m_Updater;
|
|
|
|
CFriends m_Friends;
|
|
|
|
CFriends m_Foes;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2023-11-27 21:29:14 +00:00
|
|
|
char m_aConnectAddressStr[MAX_SERVER_ADDRESSES * NETADDR_MAXSTRSIZE] = "";
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2024-03-05 14:44:09 +00:00
|
|
|
CUuid m_ConnectionId = UUID_ZEROED;
|
2020-05-22 15:58:41 +00:00
|
|
|
|
2023-12-04 01:52:23 +00:00
|
|
|
bool m_HaveGlobalTcpAddr = false;
|
2023-11-27 21:29:14 +00:00
|
|
|
NETADDR m_GlobalTcpAddr = NETADDR_ZEROED;
|
2022-05-15 19:59:17 +00:00
|
|
|
|
2023-11-27 21:29:14 +00:00
|
|
|
uint64_t m_aSnapshotParts[NUM_DUMMIES] = {0, 0};
|
|
|
|
int64_t m_LocalStartTime = 0;
|
|
|
|
int64_t m_GlobalStartTime = 0;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2012-08-12 10:41:50 +00:00
|
|
|
IGraphics::CTextureHandle m_DebugFont;
|
2015-07-09 00:08:14 +00:00
|
|
|
|
2021-06-23 05:05:49 +00:00
|
|
|
int64_t m_LastRenderTime;
|
2012-01-01 12:38:46 +00:00
|
|
|
|
2023-11-27 21:29:14 +00:00
|
|
|
int m_SnapCrcErrors = 0;
|
|
|
|
bool m_AutoScreenshotRecycle = false;
|
|
|
|
bool m_AutoStatScreenshotRecycle = false;
|
|
|
|
bool m_AutoCSVRecycle = false;
|
|
|
|
bool m_EditorActive = false;
|
|
|
|
|
|
|
|
int m_aAckGameTick[NUM_DUMMIES] = {-1, -1};
|
|
|
|
int m_aCurrentRecvTick[NUM_DUMMIES] = {0, 0};
|
|
|
|
int m_aRconAuthed[NUM_DUMMIES] = {0, 0};
|
|
|
|
char m_aRconUsername[32] = "";
|
|
|
|
char m_aRconPassword[sizeof(g_Config.m_SvRconPassword)] = "";
|
|
|
|
int m_UseTempRconCommands = 0;
|
2024-01-13 15:18:19 +00:00
|
|
|
bool m_ReceivingRconCommands = false;
|
2023-11-27 21:29:14 +00:00
|
|
|
char m_aPassword[sizeof(g_Config.m_Password)] = "";
|
|
|
|
bool m_SendPassword = false;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
|
|
|
// version-checking
|
2023-11-27 21:29:14 +00:00
|
|
|
char m_aVersionStr[10] = "0";
|
2010-05-29 07:25:38 +00:00
|
|
|
|
|
|
|
// pinging
|
2023-11-27 21:29:14 +00:00
|
|
|
int64_t m_PingStartTime = 0;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2023-11-27 21:29:14 +00:00
|
|
|
char m_aCurrentMap[IO_MAX_PATH_LENGTH] = "";
|
|
|
|
char m_aCurrentMapPath[IO_MAX_PATH_LENGTH] = "";
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2023-11-27 21:29:14 +00:00
|
|
|
char m_aTimeoutCodes[NUM_DUMMIES][32] = {"", ""};
|
|
|
|
bool m_aCodeRunAfterJoin[NUM_DUMMIES] = {false, false};
|
|
|
|
bool m_GenerateTimeoutSeed = true;
|
2014-08-17 17:19:40 +00:00
|
|
|
|
2023-11-27 21:29:14 +00:00
|
|
|
char m_aCmdConnect[256] = "";
|
|
|
|
char m_aCmdPlayDemo[IO_MAX_PATH_LENGTH] = "";
|
|
|
|
char m_aCmdEditMap[IO_MAX_PATH_LENGTH] = "";
|
2010-05-29 07:25:38 +00:00
|
|
|
|
|
|
|
// map download
|
2023-11-27 21:29:14 +00:00
|
|
|
char m_aMapDownloadUrl[256] = "";
|
|
|
|
std::shared_ptr<CHttpRequest> m_pMapdownloadTask = nullptr;
|
|
|
|
char m_aMapdownloadFilename[256] = "";
|
|
|
|
char m_aMapdownloadFilenameTemp[256] = "";
|
|
|
|
char m_aMapdownloadName[256] = "";
|
|
|
|
IOHANDLE m_MapdownloadFileTemp = 0;
|
|
|
|
int m_MapdownloadChunk = 0;
|
|
|
|
int m_MapdownloadCrc = 0;
|
|
|
|
int m_MapdownloadAmount = -1;
|
|
|
|
int m_MapdownloadTotalsize = -1;
|
|
|
|
bool m_MapdownloadSha256Present = false;
|
|
|
|
SHA256_DIGEST m_MapdownloadSha256 = SHA256_ZEROED;
|
|
|
|
|
|
|
|
bool m_MapDetailsPresent = false;
|
|
|
|
char m_aMapDetailsName[256] = "";
|
|
|
|
int m_MapDetailsCrc = 0;
|
|
|
|
SHA256_DIGEST m_MapDetailsSha256 = SHA256_ZEROED;
|
|
|
|
char m_aMapDetailsUrl[256] = "";
|
2017-09-03 15:36:51 +00:00
|
|
|
|
2023-11-27 21:29:14 +00:00
|
|
|
std::shared_ptr<CHttpRequest> m_pDDNetInfoTask = nullptr;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
|
|
|
// time
|
2022-06-30 22:36:32 +00:00
|
|
|
CSmoothTime m_aGameTime[NUM_DUMMIES];
|
2014-05-03 21:28:48 +00:00
|
|
|
CSmoothTime m_PredictedTime;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
|
|
|
// input
|
|
|
|
struct // TODO: handle input better
|
|
|
|
{
|
|
|
|
int m_aData[MAX_INPUT_SIZE]; // the input data
|
|
|
|
int m_Tick; // the tick that the input is for
|
2021-06-23 05:05:49 +00:00
|
|
|
int64_t m_PredictedTime; // prediction latency when we sent this input
|
2022-01-09 12:06:41 +00:00
|
|
|
int64_t m_PredictionMargin; // prediction margin when we sent this input
|
2021-06-23 05:05:49 +00:00
|
|
|
int64_t m_Time;
|
2020-10-18 14:51:26 +00:00
|
|
|
} m_aInputs[NUM_DUMMIES][200];
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2023-11-27 21:29:14 +00:00
|
|
|
int m_aCurrentInput[NUM_DUMMIES] = {0, 0};
|
|
|
|
bool m_LastDummy = false;
|
|
|
|
bool m_DummySendConnInfo = false;
|
|
|
|
bool m_DummyConnected = false;
|
|
|
|
int m_LastDummyConnectTime = 0;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
|
|
|
// graphs
|
|
|
|
CGraph m_InputtimeMarginGraph;
|
|
|
|
CGraph m_GametimeMarginGraph;
|
|
|
|
CGraph m_FpsGraph;
|
|
|
|
|
|
|
|
// the game snapshots are modifiable by the game
|
2022-06-30 22:36:32 +00:00
|
|
|
CSnapshotStorage m_aSnapshotStorage[NUM_DUMMIES];
|
|
|
|
CSnapshotStorage::CHolder *m_aapSnapshots[NUM_DUMMIES][NUM_SNAPSHOT_TYPES];
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2023-11-27 21:29:14 +00:00
|
|
|
int m_aReceivedSnapshots[NUM_DUMMIES] = {0, 0};
|
2022-06-30 22:36:32 +00:00
|
|
|
char m_aaSnapshotIncomingData[NUM_DUMMIES][CSnapshot::MAX_SIZE];
|
2023-11-27 21:29:14 +00:00
|
|
|
int m_aSnapshotIncomingDataSize[NUM_DUMMIES] = {0, 0};
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2022-06-16 17:50:46 +00:00
|
|
|
CSnapshotStorage::CHolder m_aDemorecSnapshotHolders[NUM_SNAPSHOT_TYPES];
|
2022-11-12 19:12:24 +00:00
|
|
|
char m_aaaDemorecSnapshotData[NUM_SNAPSHOT_TYPES][2][CSnapshot::MAX_SIZE];
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2022-06-16 17:50:46 +00:00
|
|
|
CSnapshotDelta m_SnapshotDelta;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2023-06-28 20:14:51 +00:00
|
|
|
std::deque<std::shared_ptr<CDemoEdit>> m_EditJobs;
|
2019-05-28 11:24:55 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
//
|
2023-11-27 21:29:14 +00:00
|
|
|
bool m_CanReceiveServerCapabilities = false;
|
|
|
|
bool m_ServerSentCapabilities = false;
|
2019-06-03 19:52:14 +00:00
|
|
|
CServerCapabilities m_ServerCapabilities;
|
|
|
|
|
2022-06-16 17:50:46 +00:00
|
|
|
CServerInfo m_CurrentServerInfo;
|
2023-11-27 21:29:14 +00:00
|
|
|
int64_t m_CurrentServerInfoRequestTime = -1; // >= 0 should request, == -1 got info
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2023-11-27 21:29:14 +00:00
|
|
|
int m_CurrentServerPingInfoType = -1;
|
|
|
|
int m_CurrentServerPingBasicToken = -1;
|
|
|
|
int m_CurrentServerPingToken = -1;
|
|
|
|
CUuid m_CurrentServerPingUuid = UUID_ZEROED;
|
|
|
|
int64_t m_CurrentServerCurrentPingTime = -1; // >= 0 request running
|
|
|
|
int64_t m_CurrentServerNextPingTime = -1; // >= 0 should request
|
2021-04-23 21:12:16 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
// version info
|
2011-03-17 16:41:57 +00:00
|
|
|
struct CVersionInfo
|
2010-05-29 07:25:38 +00:00
|
|
|
{
|
2011-03-17 16:41:57 +00:00
|
|
|
enum
|
|
|
|
{
|
2020-09-26 19:41:58 +00:00
|
|
|
STATE_INIT = 0,
|
2011-03-17 16:41:57 +00:00
|
|
|
STATE_START,
|
|
|
|
STATE_READY,
|
|
|
|
};
|
|
|
|
|
2023-11-27 21:29:14 +00:00
|
|
|
int m_State = STATE_INIT;
|
2010-05-29 07:25:38 +00:00
|
|
|
} m_VersionInfo;
|
2011-02-27 14:03:57 +00:00
|
|
|
|
2022-06-11 19:38:18 +00:00
|
|
|
std::vector<SWarning> m_vWarnings;
|
2024-02-07 20:01:00 +00:00
|
|
|
std::vector<SWarning> m_vQuittingWarnings;
|
2020-10-02 13:43:52 +00:00
|
|
|
|
2016-05-02 21:36:21 +00:00
|
|
|
CFifo m_Fifo;
|
|
|
|
|
2023-11-27 21:29:14 +00:00
|
|
|
IOHANDLE m_BenchmarkFile = 0;
|
|
|
|
int64_t m_BenchmarkStopTime = 0;
|
2020-11-19 15:15:07 +00:00
|
|
|
|
2022-01-31 02:11:47 +00:00
|
|
|
CChecksum m_Checksum;
|
|
|
|
int m_OwnExecutableSize = 0;
|
2023-11-27 21:29:14 +00:00
|
|
|
IOHANDLE m_OwnExecutable = 0;
|
2022-01-31 02:11:47 +00:00
|
|
|
|
2022-05-23 18:16:18 +00:00
|
|
|
// favorite command handling
|
|
|
|
bool m_FavoritesGroup = false;
|
|
|
|
bool m_FavoritesGroupAllowPing = false;
|
|
|
|
int m_FavoritesGroupNum = 0;
|
|
|
|
NETADDR m_aFavoritesGroupAddresses[MAX_SERVER_ADDRESSES];
|
|
|
|
|
2021-07-19 18:14:12 +00:00
|
|
|
void UpdateDemoIntraTimers();
|
2022-01-09 12:06:41 +00:00
|
|
|
int MaxLatencyTicks() const;
|
2022-01-09 13:14:45 +00:00
|
|
|
int PredictionMargin() const;
|
2021-07-19 18:14:12 +00:00
|
|
|
|
2022-06-13 19:43:05 +00:00
|
|
|
std::shared_ptr<ILogger> m_pFileLogger = nullptr;
|
|
|
|
std::shared_ptr<ILogger> m_pStdoutLogger = nullptr;
|
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
public:
|
2023-08-15 17:36:18 +00:00
|
|
|
IConfigManager *ConfigManager() { return m_pConfigManager; }
|
|
|
|
CConfig *Config() { return m_pConfig; }
|
|
|
|
IDiscord *Discord() { return m_pDiscord; }
|
2011-02-27 14:03:57 +00:00
|
|
|
IEngine *Engine() { return m_pEngine; }
|
2023-08-15 17:36:18 +00:00
|
|
|
IGameClient *GameClient() { return m_pGameClient; }
|
2010-05-29 07:25:38 +00:00
|
|
|
IEngineGraphics *Graphics() { return m_pGraphics; }
|
|
|
|
IEngineInput *Input() { return m_pInput; }
|
|
|
|
IEngineSound *Sound() { return m_pSound; }
|
2023-08-15 17:36:18 +00:00
|
|
|
ISteam *Steam() { return m_pSteam; }
|
2023-12-03 11:53:20 +00:00
|
|
|
INotifications *Notifications() { return m_pNotifications; }
|
2010-05-29 07:25:38 +00:00
|
|
|
IStorage *Storage() { return m_pStorage; }
|
2023-08-15 17:39:22 +00:00
|
|
|
IEngineTextRender *TextRender() { return m_pTextRender; }
|
2015-04-18 19:17:27 +00:00
|
|
|
IUpdater *Updater() { return m_pUpdater; }
|
2023-12-18 19:01:26 +00:00
|
|
|
IHttp *Http() { return &m_Http; }
|
2010-05-29 07:25:38 +00:00
|
|
|
|
|
|
|
CClient();
|
|
|
|
|
|
|
|
// ----- send functions -----
|
2022-05-17 20:13:44 +00:00
|
|
|
int SendMsg(int Conn, CMsgPacker *pMsg, int Flags) override;
|
2022-01-21 00:54:14 +00:00
|
|
|
// Send via the currently active client (main/dummy)
|
2022-05-17 20:13:44 +00:00
|
|
|
int SendMsgActive(CMsgPacker *pMsg, int Flags) override;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2023-10-24 17:45:54 +00:00
|
|
|
void SendInfo(int Conn);
|
2022-01-21 21:13:35 +00:00
|
|
|
void SendEnterGame(int Conn);
|
2023-10-24 17:45:54 +00:00
|
|
|
void SendReady(int Conn);
|
2014-10-29 12:37:38 +00:00
|
|
|
void SendMapRequest();
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2022-06-30 22:36:32 +00:00
|
|
|
bool RconAuthed() const override { return m_aRconAuthed[g_Config.m_ClDummy] != 0; }
|
2022-05-17 20:13:44 +00:00
|
|
|
bool UseTempRconCommands() const override { return m_UseTempRconCommands != 0; }
|
|
|
|
void RconAuth(const char *pName, const char *pPassword) override;
|
|
|
|
void Rcon(const char *pCmd) override;
|
2024-01-13 15:18:19 +00:00
|
|
|
bool ReceivingRconCommands() const override { return m_ReceivingRconCommands; }
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
bool ConnectionProblems() const override;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
IGraphics::CTextureHandle GetDebugFont() const override { return m_DebugFont; }
|
2011-02-18 10:41:27 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
void DirectInput(int *pInput, int Size);
|
|
|
|
void SendInput();
|
|
|
|
|
2018-02-04 15:00:47 +00:00
|
|
|
// TODO: OPT: do this a lot smarter!
|
2022-05-17 20:13:44 +00:00
|
|
|
int *GetInput(int Tick, int IsDummy) const override;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
const char *LatestVersion() const override;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
|
|
|
// ------ state handling -----
|
2024-03-01 17:06:14 +00:00
|
|
|
void SetState(EClientState State);
|
2010-05-29 07:25:38 +00:00
|
|
|
|
|
|
|
// called when the map is loaded and we should init for a new round
|
2021-12-20 22:17:09 +00:00
|
|
|
void OnEnterGame(bool Dummy);
|
2022-05-17 20:13:44 +00:00
|
|
|
void EnterGame(int Conn) override;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2022-06-13 16:28:13 +00:00
|
|
|
void Connect(const char *pAddress, const char *pPassword = nullptr) override;
|
2023-05-16 12:10:00 +00:00
|
|
|
void DisconnectWithReason(const char *pReason);
|
2022-05-17 20:13:44 +00:00
|
|
|
void Disconnect() override;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
void DummyDisconnect(const char *pReason) override;
|
|
|
|
void DummyConnect() override;
|
|
|
|
bool DummyConnected() override;
|
|
|
|
bool DummyConnecting() override;
|
|
|
|
bool DummyAllowed() override;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
void GetServerInfo(CServerInfo *pServerInfo) const override;
|
2010-05-29 07:25:38 +00:00
|
|
|
void ServerInfoRequest();
|
|
|
|
|
2023-01-11 21:32:51 +00:00
|
|
|
void LoadDebugFont();
|
2010-05-29 07:25:38 +00:00
|
|
|
|
|
|
|
// ---
|
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
int GetPredictionTime() override;
|
2024-03-05 14:44:09 +00:00
|
|
|
void *SnapGetItem(int SnapId, int Index, CSnapItem *pItem) const override;
|
|
|
|
int SnapItemSize(int SnapId, int Index) const override;
|
|
|
|
const void *SnapFindItem(int SnapId, int Type, int Id) const override;
|
|
|
|
int SnapNumItems(int SnapId) const override;
|
2022-05-17 20:13:44 +00:00
|
|
|
void SnapSetStaticsize(int ItemType, int Size) override;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
|
|
|
void Render();
|
|
|
|
void DebugRender();
|
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
void Restart() override;
|
|
|
|
void Quit() override;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
const char *PlayerName() const override;
|
|
|
|
const char *DummyName() const override;
|
|
|
|
const char *ErrorString() const override;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2018-06-05 19:22:40 +00:00
|
|
|
const char *LoadMap(const char *pName, const char *pFilename, SHA256_DIGEST *pWantedSha256, unsigned WantedCrc);
|
|
|
|
const char *LoadMapSearch(const char *pMapName, SHA256_DIGEST *pWantedSha256, int WantedCrc);
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2011-03-17 16:41:57 +00:00
|
|
|
void ProcessConnlessPacket(CNetChunk *pPacket);
|
2017-03-29 10:56:13 +00:00
|
|
|
void ProcessServerInfo(int Type, NETADDR *pFrom, const void *pData, int DataSize);
|
2022-01-21 21:13:35 +00:00
|
|
|
void ProcessServerPacket(CNetChunk *pPacket, int Conn, bool Dummy);
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2022-06-22 21:46:25 +00:00
|
|
|
int UnpackAndValidateSnapshot(CSnapshot *pFrom, CSnapshot *pTo);
|
|
|
|
|
2014-10-29 12:37:38 +00:00
|
|
|
void ResetMapDownload();
|
|
|
|
void FinishMapDownload();
|
2017-09-03 15:36:51 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
void RequestDDNetInfo() override;
|
2024-02-04 16:09:37 +00:00
|
|
|
void ResetDDNetInfoTask();
|
2017-09-03 15:36:51 +00:00
|
|
|
void FinishDDNetInfo();
|
|
|
|
void LoadDDNetInfo();
|
2014-10-29 12:37:38 +00:00
|
|
|
|
2022-06-01 10:09:22 +00:00
|
|
|
const NETADDR &ServerAddress() const override { return *m_aNetClient[CONN_MAIN].ServerAddress(); }
|
|
|
|
int ConnectNetTypes() const override;
|
2022-05-14 17:30:26 +00:00
|
|
|
const char *ConnectAddressString() const override { return m_aConnectAddressStr; }
|
2022-05-17 20:13:44 +00:00
|
|
|
const char *MapDownloadName() const override { return m_aMapdownloadName; }
|
|
|
|
int MapDownloadAmount() const override { return !m_pMapdownloadTask ? m_MapdownloadAmount : (int)m_pMapdownloadTask->Current(); }
|
|
|
|
int MapDownloadTotalsize() const override { return !m_pMapdownloadTask ? m_MapdownloadTotalsize : (int)m_pMapdownloadTask->Size(); }
|
2010-05-29 07:25:38 +00:00
|
|
|
|
|
|
|
void PumpNetwork();
|
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
void OnDemoPlayerSnapshot(void *pData, int Size) override;
|
|
|
|
void OnDemoPlayerMessage(void *pData, int Size) override;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
|
|
|
void Update();
|
|
|
|
|
|
|
|
void RegisterInterfaces();
|
|
|
|
void InitInterfaces();
|
|
|
|
|
|
|
|
void Run();
|
|
|
|
|
2023-05-03 18:29:58 +00:00
|
|
|
bool InitNetworkClient(char *pError, size_t ErrorSize);
|
2014-01-31 00:41:57 +00:00
|
|
|
bool CtrlShiftKey(int Key, bool &Last);
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2011-08-13 00:11:06 +00:00
|
|
|
static void Con_Connect(IConsole::IResult *pResult, void *pUserData);
|
|
|
|
static void Con_Disconnect(IConsole::IResult *pResult, void *pUserData);
|
2014-04-26 18:29:42 +00:00
|
|
|
|
|
|
|
static void Con_DummyConnect(IConsole::IResult *pResult, void *pUserData);
|
|
|
|
static void Con_DummyDisconnect(IConsole::IResult *pResult, void *pUserData);
|
2021-03-17 15:09:39 +00:00
|
|
|
static void Con_DummyResetInput(IConsole::IResult *pResult, void *pUserData);
|
2014-04-26 18:29:42 +00:00
|
|
|
|
2011-08-13 00:11:06 +00:00
|
|
|
static void Con_Quit(IConsole::IResult *pResult, void *pUserData);
|
2023-05-09 21:39:31 +00:00
|
|
|
static void Con_Restart(IConsole::IResult *pResult, void *pUserData);
|
2015-08-12 12:26:48 +00:00
|
|
|
static void Con_DemoPlay(IConsole::IResult *pResult, void *pUserData);
|
2016-04-27 15:21:40 +00:00
|
|
|
static void Con_DemoSpeed(IConsole::IResult *pResult, void *pUserData);
|
2011-08-13 00:11:06 +00:00
|
|
|
static void Con_Minimize(IConsole::IResult *pResult, void *pUserData);
|
|
|
|
static void Con_Ping(IConsole::IResult *pResult, void *pUserData);
|
|
|
|
static void Con_Screenshot(IConsole::IResult *pResult, void *pUserData);
|
2016-08-27 19:10:27 +00:00
|
|
|
|
|
|
|
#if defined(CONF_VIDEORECORDER)
|
2022-03-01 22:52:46 +00:00
|
|
|
static void StartVideo(IConsole::IResult *pResult, void *pUserData, const char *pVideoName);
|
2016-08-27 15:51:23 +00:00
|
|
|
static void Con_StartVideo(IConsole::IResult *pResult, void *pUserData);
|
|
|
|
static void Con_StopVideo(IConsole::IResult *pResult, void *pUserData);
|
2023-08-19 10:37:41 +00:00
|
|
|
const char *DemoPlayer_Render(const char *pFilename, int StorageType, const char *pVideoName, int SpeedIndex, bool StartPaused = false) override;
|
2016-08-27 19:10:27 +00:00
|
|
|
#endif
|
|
|
|
|
2011-08-13 00:11:06 +00:00
|
|
|
static void Con_Rcon(IConsole::IResult *pResult, void *pUserData);
|
|
|
|
static void Con_RconAuth(IConsole::IResult *pResult, void *pUserData);
|
2017-03-06 09:31:05 +00:00
|
|
|
static void Con_RconLogin(IConsole::IResult *pResult, void *pUserData);
|
2022-05-23 18:16:18 +00:00
|
|
|
static void Con_BeginFavoriteGroup(IConsole::IResult *pResult, void *pUserData);
|
|
|
|
static void Con_EndFavoriteGroup(IConsole::IResult *pResult, void *pUserData);
|
2011-08-13 00:11:06 +00:00
|
|
|
static void Con_AddFavorite(IConsole::IResult *pResult, void *pUserData);
|
|
|
|
static void Con_RemoveFavorite(IConsole::IResult *pResult, void *pUserData);
|
|
|
|
static void Con_Play(IConsole::IResult *pResult, void *pUserData);
|
|
|
|
static void Con_Record(IConsole::IResult *pResult, void *pUserData);
|
|
|
|
static void Con_StopRecord(IConsole::IResult *pResult, void *pUserData);
|
2012-01-10 22:13:19 +00:00
|
|
|
static void Con_AddDemoMarker(IConsole::IResult *pResult, void *pUserData);
|
2020-11-19 15:15:07 +00:00
|
|
|
static void Con_BenchmarkQuit(IConsole::IResult *pResult, void *pUserData);
|
2011-03-18 18:03:13 +00:00
|
|
|
static void ConchainServerBrowserUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
2016-04-29 22:34:12 +00:00
|
|
|
static void ConchainFullscreen(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
|
|
|
static void ConchainWindowBordered(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
|
|
|
static void ConchainWindowScreen(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
|
|
|
static void ConchainWindowVSync(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
2023-09-20 09:01:43 +00:00
|
|
|
static void ConchainWindowResize(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
2016-10-02 09:31:11 +00:00
|
|
|
static void ConchainTimeoutSeed(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
2018-06-20 06:36:10 +00:00
|
|
|
static void ConchainPassword(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
2019-06-05 17:17:55 +00:00
|
|
|
static void ConchainReplays(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
2022-06-13 19:43:05 +00:00
|
|
|
static void ConchainLoglevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
|
|
|
static void ConchainStdoutOutputLevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
2019-04-21 16:20:53 +00:00
|
|
|
|
2014-08-12 14:21:06 +00:00
|
|
|
static void Con_DemoSlice(IConsole::IResult *pResult, void *pUserData);
|
2014-08-13 14:35:15 +00:00
|
|
|
static void Con_DemoSliceBegin(IConsole::IResult *pResult, void *pUserData);
|
2014-08-12 14:21:06 +00:00
|
|
|
static void Con_DemoSliceEnd(IConsole::IResult *pResult, void *pUserData);
|
2019-05-20 21:55:40 +00:00
|
|
|
static void Con_SaveReplay(IConsole::IResult *pResult, void *pUserData);
|
2014-08-12 14:21:06 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
void RegisterCommands();
|
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
const char *DemoPlayer_Play(const char *pFilename, int StorageType) override;
|
2023-08-29 20:05:12 +00:00
|
|
|
void DemoRecorder_Start(const char *pFilename, bool WithTimestamp, int Recorder, bool Verbose = false) override;
|
2022-05-17 20:13:44 +00:00
|
|
|
void DemoRecorder_HandleAutoStart() override;
|
2024-01-01 17:17:05 +00:00
|
|
|
void DemoRecorder_UpdateReplayRecorder() override;
|
2014-10-16 15:42:13 +00:00
|
|
|
void DemoRecorder_AddDemoMarker(int Recorder);
|
2022-06-16 17:50:46 +00:00
|
|
|
IDemoRecorder *DemoRecorder(int Recorder) override;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
void AutoScreenshot_Start() override;
|
|
|
|
void AutoStatScreenshot_Start() override;
|
2010-12-12 15:48:13 +00:00
|
|
|
void AutoScreenshot_Cleanup();
|
2015-05-19 22:51:02 +00:00
|
|
|
void AutoStatScreenshot_Cleanup();
|
2010-12-12 15:48:13 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
void AutoCSV_Start() override;
|
2017-04-26 03:10:31 +00:00
|
|
|
void AutoCSV_Cleanup();
|
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
void ServerBrowserUpdate() override;
|
2011-02-13 05:35:13 +00:00
|
|
|
|
2020-09-06 11:37:48 +00:00
|
|
|
void HandleConnectAddress(const NETADDR *pAddr);
|
2018-12-13 18:57:32 +00:00
|
|
|
void HandleConnectLink(const char *pLink);
|
2019-04-10 06:56:20 +00:00
|
|
|
void HandleDemoPath(const char *pPath);
|
2020-08-02 11:00:01 +00:00
|
|
|
void HandleMapPath(const char *pPath);
|
2018-12-13 18:57:32 +00:00
|
|
|
|
2022-01-31 02:11:47 +00:00
|
|
|
virtual void InitChecksum();
|
|
|
|
virtual int HandleChecksum(int Conn, CUuid Uuid, CUnpacker *pUnpacker);
|
|
|
|
|
2016-04-29 22:34:12 +00:00
|
|
|
// gfx
|
2022-05-17 20:13:44 +00:00
|
|
|
void SwitchWindowScreen(int Index) override;
|
2024-01-23 16:49:53 +00:00
|
|
|
void SetWindowParams(int FullscreenMode, bool IsBorderless) override;
|
2022-05-17 20:13:44 +00:00
|
|
|
void ToggleWindowVSync() override;
|
|
|
|
void Notify(const char *pTitle, const char *pMessage) override;
|
2023-08-15 17:39:22 +00:00
|
|
|
void OnWindowResize() override;
|
2020-11-19 15:15:07 +00:00
|
|
|
void BenchmarkQuit(int Seconds, const char *pFilename);
|
2016-04-29 22:34:12 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
void UpdateAndSwap() override;
|
2022-04-02 11:37:59 +00:00
|
|
|
|
2011-02-13 05:35:13 +00:00
|
|
|
// DDRace
|
2011-04-09 06:41:31 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
void GenerateTimeoutSeed() override;
|
2022-06-01 10:09:22 +00:00
|
|
|
void GenerateTimeoutCodes(const NETADDR *pAddrs, int NumAddrs);
|
2016-10-02 09:31:11 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
int GetCurrentRaceTime() override;
|
2019-03-25 19:02:50 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
const char *GetCurrentMap() const override;
|
|
|
|
const char *GetCurrentMapPath() const override;
|
|
|
|
SHA256_DIGEST GetCurrentMapSha256() const override;
|
|
|
|
unsigned GetCurrentMapCrc() const override;
|
2017-09-09 21:10:42 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
void RaceRecord_Start(const char *pFilename) override;
|
|
|
|
void RaceRecord_Stop() override;
|
|
|
|
bool RaceRecord_IsRecording() override;
|
2014-08-13 14:35:15 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
void DemoSliceBegin() override;
|
|
|
|
void DemoSliceEnd() override;
|
|
|
|
void DemoSlice(const char *pDstPath, CLIENTFUNC_FILTER pfnFilter, void *pUser) override;
|
2022-03-14 04:56:44 +00:00
|
|
|
virtual void SaveReplay(int Length, const char *pFilename = "");
|
2014-09-19 22:36:22 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
bool EditorHasUnsavedData() const override { return m_pEditor->HasUnsavedData(); }
|
2015-07-22 20:16:49 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
IFriends *Foes() override { return &m_Foes; }
|
2019-04-11 22:46:54 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
void GetSmoothTick(int *pSmoothTick, float *pSmoothIntraTick, float MixAmount) override;
|
2020-10-02 13:43:52 +00:00
|
|
|
|
2023-11-01 21:11:07 +00:00
|
|
|
void AddWarning(const SWarning &Warning) override;
|
2022-05-17 20:13:44 +00:00
|
|
|
SWarning *GetCurWarning() override;
|
2024-02-07 20:01:00 +00:00
|
|
|
std::vector<SWarning> &&QuittingWarnings() { return std::move(m_vQuittingWarnings); }
|
2023-11-01 21:11:07 +00:00
|
|
|
|
2022-05-17 20:13:44 +00:00
|
|
|
CChecksumData *ChecksumData() override { return &m_Checksum.m_Data; }
|
2022-05-15 19:59:17 +00:00
|
|
|
int UdpConnectivity(int NetType) override;
|
2022-12-25 20:02:35 +00:00
|
|
|
|
|
|
|
#if defined(CONF_FAMILY_WINDOWS)
|
|
|
|
void ShellRegister() override;
|
2022-12-29 16:16:51 +00:00
|
|
|
void ShellUnregister() override;
|
2022-12-25 20:02:35 +00:00
|
|
|
#endif
|
2023-05-04 17:46:40 +00:00
|
|
|
|
|
|
|
void ShowMessageBox(const char *pTitle, const char *pMessage, EMessageBoxType Type = MESSAGE_BOX_TYPE_ERROR) override;
|
2024-03-05 14:44:09 +00:00
|
|
|
void GetGpuInfoString(char (&aGpuInfo)[256]) override;
|
2022-06-13 19:43:05 +00:00
|
|
|
void SetLoggers(std::shared_ptr<ILogger> &&pFileLogger, std::shared_ptr<ILogger> &&pStdoutLogger);
|
2010-05-29 07:25:38 +00:00
|
|
|
};
|
2019-05-24 22:24:13 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
#endif
|