DDraceNetwork Documentation
Loading...
Searching...
No Matches
demo.h
Go to the documentation of this file.
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 ENGINE_SHARED_DEMO_H
4#define ENGINE_SHARED_DEMO_H
5
6#include <base/hash.h>
7
8#include <engine/demo.h>
10
11#include <functional>
12#include <vector>
13
14#include "snapshot.h"
15
16typedef std::function<void()> TUpdateIntraTimesFunc;
17
19{
22
28
31
34
36
38 void *m_pUser;
39
40 void WriteTickMarker(int Tick, bool Keyframe);
41 void Write(int Type, const void *pData, int Size);
42
43public:
45 CDemoRecorder() = default;
46 ~CDemoRecorder() override;
47
48 int Start(class IStorage *pStorage, class IConsole *pConsole, const char *pFilename, const char *pNetversion, const char *pMap, const SHA256_DIGEST &Sha256, unsigned MapCrc, const char *pType, unsigned MapSize, unsigned char *pMapData, IOHANDLE MapFile, DEMOFUNC_FILTER pfnFilter, void *pUser);
49 int Stop(IDemoRecorder::EStopMode Mode, const char *pTargetFilename = "") override;
50
51 void AddDemoMarker();
52 void AddDemoMarker(int Tick);
53
54 void RecordSnapshot(int Tick, const void *pData, int Size);
55 void RecordMessage(const void *pData, int Size);
56
57 bool IsRecording() const override { return m_File != nullptr; }
58 const char *CurrentFilename() const override { return m_aCurrentFilename; }
59
60 int Length() const override { return (m_LastTickMarker - m_FirstTick) / SERVER_TICK_SPEED; }
61};
62
64{
65public:
67 {
68 public:
69 virtual ~IListener() = default;
70 virtual void OnDemoPlayerSnapshot(void *pData, int Size) = 0;
71 virtual void OnDemoPlayerMessage(void *pData, int Size) = 0;
72 };
73
97
98private:
100
102
103 // Playback
105 {
106 public:
109
111 m_Filepos(Filepos), m_Tick(Tick)
112 {
113 }
114 };
115
121 std::vector<CKeyFrame> m_vKeyFrames;
124
128
129 // Depending on the chunk header
130 // this is either a full CSnapshot or a CSnapshotDelta.
132 // Storage for the full snapshot
133 // where the delta gets unpacked into.
138
140#if defined(CONF_VIDEORECORDER)
141 bool m_WasRecording = false;
142#endif
143
151 void DoTick();
153 {
154 SUCCESS,
157 };
159 void UpdateTimes();
160
161 int64_t Time();
163
164public:
167 ~CDemoPlayer() override;
168
170
172
173 int Load(class IStorage *pStorage, class IConsole *pConsole, const char *pFilename, int StorageType);
174 unsigned char *GetMapData(class IStorage *pStorage);
175 bool ExtractMap(class IStorage *pStorage);
176 void Play();
177 void Pause() override;
178 void Unpause() override;
179 void Stop(const char *pErrorMessage = "");
180 void SetSpeed(float Speed) override;
181 void SetSpeedIndex(int SpeedIndex) override;
182 void AdjustSpeedIndex(int Offset) override;
183 int SeekPercent(float Percent) override;
184 int SeekTime(float Seconds) override;
185 int SeekTick(ETickOffset TickOffset) override;
186 int SetPos(int WantedTick) override;
187 const CInfo *BaseInfo() const override { return &m_Info.m_Info; }
188 void GetDemoName(char *pBuffer, size_t BufferSize) const override;
189 bool GetDemoInfo(class IStorage *pStorage, class IConsole *pConsole, const char *pFilename, int StorageType, CDemoHeader *pDemoHeader, CTimelineMarkers *pTimelineMarkers, CMapInfo *pMapInfo, IOHANDLE *pFile = nullptr, char *pErrorMessage = nullptr, size_t ErrorMessageSize = 0) const override;
190 const char *Filename() const { return m_aFilename; }
191 const char *ErrorMessage() const override { return m_aErrorMessage; }
192
193 void Update(bool RealTime = true);
194 bool IsSixup() const { return m_Sixup; }
195
196 const CPlaybackInfo *Info() const { return &m_Info; }
197 bool IsPlaying() const override { return m_File != nullptr; }
198 const CMapInfo *GetMapInfo() const { return &m_MapInfo; }
199};
200
202{
206
207public:
208 virtual void Init(class CSnapshotDelta *pSnapshotDelta, class IConsole *pConsole, class IStorage *pStorage);
209 bool Slice(const char *pDemo, const char *pDst, int StartTick, int EndTick, DEMOFUNC_FILTER pfnFilter, void *pUser) override;
210};
211
212#endif
Definition demo.h:202
IConsole * m_pConsole
Definition demo.h:203
class CSnapshotDelta * m_pSnapshotDelta
Definition demo.h:205
bool Slice(const char *pDemo, const char *pDst, int StartTick, int EndTick, DEMOFUNC_FILTER pfnFilter, void *pUser) override
Definition demo.cpp:1396
virtual void Init(class CSnapshotDelta *pSnapshotDelta, class IConsole *pConsole, class IStorage *pStorage)
Definition demo.cpp:1389
IStorage * m_pStorage
Definition demo.h:204
Definition demo.h:105
int64_t m_Filepos
Definition demo.h:107
int m_Tick
Definition demo.h:108
CKeyFrame(int64_t Filepos, int Tick)
Definition demo.h:110
Definition demo.h:75
CTimelineMarkers m_TimelineMarkers
Definition demo.h:78
bool m_LiveStateUpdating
Definition demo.h:93
float m_IntraTickSincePrev
Definition demo.h:90
CDemoHeader m_Header
Definition demo.h:77
int64_t m_LastScan
Definition demo.h:83
float m_IntraTick
Definition demo.h:89
int m_LiveStateFailedCount
Definition demo.h:94
IDemoPlayer::CInfo m_Info
Definition demo.h:80
int64_t m_CurrentTime
Definition demo.h:84
int64_t m_LastUpdate
Definition demo.h:82
int m_LiveStateUnchangedCount
Definition demo.h:95
int m_NextTick
Definition demo.h:86
int m_PreviousTick
Definition demo.h:87
float m_TickTime
Definition demo.h:91
Definition demo.h:67
virtual void OnDemoPlayerMessage(void *pData, int Size)=0
virtual ~IListener()=default
virtual void OnDemoPlayerSnapshot(void *pData, int Size)=0
Definition demo.h:64
const char * ErrorMessage() const override
Definition demo.h:191
int m_LastSnapshotDataSize
Definition demo.h:136
std::vector< CKeyFrame > m_vKeyFrames
Definition demo.h:121
void SetListener(IListener *pListener)
Definition demo.cpp:509
bool ExtractMap(class IStorage *pStorage)
Definition demo.cpp:903
int Load(class IStorage *pStorage, class IConsole *pConsole, const char *pFilename, int StorageType)
Definition demo.cpp:817
bool m_Sixup
Definition demo.h:162
int m_SpeedIndex
Definition demo.h:123
void Play()
Definition demo.cpp:967
EScanFileResult ScanFile()
Definition demo.cpp:579
int SeekTick(ETickOffset TickOffset) override
Definition demo.cpp:1006
unsigned char m_aSnapshot[CSnapshot::MAX_SIZE]
Definition demo.h:134
void Construct(class CSnapshotDelta *pSnapshotDelta, bool UseVideo)
Definition demo.cpp:495
IListener * m_pListener
Definition demo.h:99
const char * Filename() const
Definition demo.h:190
IOHANDLE m_File
Definition demo.h:117
bool IsPlaying() const override
Definition demo.h:197
EReadChunkHeaderResult
Definition demo.h:145
@ CHUNKHEADER_SUCCESS
Definition demo.h:146
@ CHUNKHEADER_ERROR
Definition demo.h:147
@ CHUNKHEADER_EOF
Definition demo.h:148
~CDemoPlayer() override
Definition demo.cpp:490
void UpdateTimes()
Definition demo.cpp:1218
bool IsSixup() const
Definition demo.h:194
void AdjustSpeedIndex(int Offset) override
Definition demo.cpp:1098
bool m_UseVideo
Definition demo.h:139
unsigned char * GetMapData(class IStorage *pStorage)
Definition demo.cpp:885
CPlaybackInfo m_Info
Definition demo.h:125
int SeekPercent(float Percent) override
Definition demo.cpp:994
char m_aFilename[IO_MAX_PATH_LENGTH]
Definition demo.h:119
class CSnapshotDelta * m_pSnapshotDelta
Definition demo.h:137
int SeekTime(float Seconds) override
Definition demo.cpp:1000
unsigned char m_aCompressedSnapshotData[CSnapshot::MAX_SIZE]
Definition demo.h:126
void SetSpeedIndex(int SpeedIndex) override
Definition demo.cpp:1091
const CMapInfo * GetMapInfo() const
Definition demo.h:198
const CInfo * BaseInfo() const override
Definition demo.h:187
bool m_WasRecording
Definition demo.h:141
void Update(bool RealTime=true)
Definition demo.cpp:1103
const CPlaybackInfo * Info() const
Definition demo.h:196
void SetSpeed(float Speed) override
Definition demo.cpp:1086
EScanFileResult
Definition demo.h:153
class IConsole * m_pConsole
Definition demo.h:116
void Unpause() override
Definition demo.cpp:808
unsigned char m_aDecompressedSnapshotData[CSnapshot::MAX_SIZE]
Definition demo.h:127
char m_aErrorMessage[256]
Definition demo.h:120
EReadChunkHeaderResult ReadChunkHeader(int *pType, int *pSize, int *pTick)
Definition demo.cpp:514
int64_t Time()
Definition demo.cpp:940
int64_t m_MapOffset
Definition demo.h:118
void DoTick()
Definition demo.cpp:656
unsigned char m_aChunkData[CSnapshot::MAX_SIZE]
Definition demo.h:131
unsigned char m_aLastSnapshotData[CSnapshot::MAX_SIZE]
Definition demo.h:135
void Pause() override
Definition demo.cpp:799
void Stop(const char *pErrorMessage="")
Definition demo.cpp:1234
CMapInfo m_MapInfo
Definition demo.h:122
int SetPos(int WantedTick) override
Definition demo.cpp:1031
void GetDemoName(char *pBuffer, size_t BufferSize) const override
Definition demo.cpp:1262
TUpdateIntraTimesFunc m_UpdateIntraTimesFunc
Definition demo.h:101
bool GetDemoInfo(class IStorage *pStorage, class IConsole *pConsole, const char *pFilename, int StorageType, CDemoHeader *pDemoHeader, CTimelineMarkers *pTimelineMarkers, CMapInfo *pMapInfo, IOHANDLE *pFile=nullptr, char *pErrorMessage=nullptr, size_t ErrorMessageSize=0) const override
Definition demo.cpp:1267
Definition demo.h:19
int m_LastKeyFrame
Definition demo.h:26
bool IsRecording() const override
Definition demo.h:57
class IConsole * m_pConsole
Definition demo.h:20
~CDemoRecorder() override
Definition demo.cpp:55
class CSnapshotDelta * m_pSnapshotDelta
Definition demo.h:30
void WriteTickMarker(int Tick, bool Keyframe)
Definition demo.cpp:252
char m_aCurrentFilename[IO_MAX_PATH_LENGTH]
Definition demo.h:24
int Length() const override
Definition demo.h:60
void RecordSnapshot(int Tick, const void *pData, int Size)
Definition demo.cpp:327
class IStorage * m_pStorage
Definition demo.h:21
bool m_NoMapData
Definition demo.h:35
IOHANDLE m_File
Definition demo.h:23
int m_LastTickMarker
Definition demo.h:25
int Stop(IDemoRecorder::EStopMode Mode, const char *pTargetFilename="") override
Definition demo.cpp:371
int m_NumTimelineMarkers
Definition demo.h:32
CDemoRecorder()=default
int m_FirstTick
Definition demo.h:27
void RecordMessage(const void *pData, int Size)
Definition demo.cpp:359
void AddDemoMarker()
Definition demo.cpp:437
DEMOFUNC_FILTER m_pfnFilter
Definition demo.h:37
int m_aTimelineMarkers[MAX_TIMELINE_MARKERS]
Definition demo.h:33
const char * CurrentFilename() const override
Definition demo.h:58
unsigned char m_aLastSnapshotData[CSnapshot::MAX_SIZE]
Definition demo.h:29
void * m_pUser
Definition demo.h:38
int Start(class IStorage *pStorage, class IConsole *pConsole, const char *pFilename, const char *pNetversion, const char *pMap, const SHA256_DIGEST &Sha256, unsigned MapCrc, const char *pType, unsigned MapSize, unsigned char *pMapData, IOHANDLE MapFile, DEMOFUNC_FILTER pfnFilter, void *pUser)
Definition demo.cpp:61
Definition snapshot.h:78
@ MAX_SIZE
Definition snapshot.h:52
Definition console.h:18
Definition demo.h:122
Definition demo.h:65
Definition demo.h:61
ETickOffset
Definition demo.h:81
Definition demo.h:105
EStopMode
Definition demo.h:109
Definition storage.h:21
Definition vmath.h:15
Write
Definition connection_pool.h:35
bool(* DEMOFUNC_FILTER)(const void *pData, int DataSize, void *pUser)
Definition demo.h:24
@ MAX_TIMELINE_MARKERS
Definition demo.h:15
@ SERVER_TICK_SPEED
Definition protocol.h:80
void * IOHANDLE
Definition logger.h:12
std::function< void()> TUpdateIntraTimesFunc
Definition demo.h:16
Definition demo.h:32
Definition demo.h:53
Definition demo.h:47
Definition hash.h:15
constexpr auto IO_MAX_PATH_LENGTH
Definition types.h:49