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_DEMO_H
4#define ENGINE_DEMO_H
5
6#include "kernel.h"
7#include <base/hash.h>
8#include <engine/map.h>
10
11#include <cstdint>
12
13enum
14{
16};
17
18static const unsigned char gs_aHeaderMarker[7] = {'T', 'W', 'D', 'E', 'M', 'O', 0};
19
20static constexpr double DEMO_SPEEDS[] = {0.1, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 2.0, 3.0, 4.0, 6.0, 8.0, 12.0, 16.0, 20.0, 24.0, 28.0, 32.0, 40.0, 48.0, 56.0, 64.0};
21static constexpr int DEMO_SPEED_INDEX_DEFAULT = 4;
22static_assert(DEMO_SPEEDS[DEMO_SPEED_INDEX_DEFAULT] == 1.0);
23
24typedef bool (*DEMOFUNC_FILTER)(const void *pData, int DataSize, void *pUser);
25
26// TODO: Properly extend demo format using uuids
27// "6be6da4a-cebd-380c-9b5b-1289c842d780"
29extern const CUuid SHA256_EXTENSION;
30
32{
33 unsigned char m_aMarker[7];
34 unsigned char m_Version;
35 char m_aNetversion[64];
36 char m_aMapName[64];
37 unsigned char m_aMapSize[sizeof(int32_t)];
38 unsigned char m_aMapCrc[sizeof(int32_t)];
39 char m_aType[8];
40 unsigned char m_aLength[sizeof(int32_t)];
41 char m_aTimestamp[20];
42
43 bool Valid() const;
44};
45
47{
48 unsigned char m_aNumTimelineMarkers[sizeof(int32_t)];
50};
51
53{
56 unsigned m_Crc;
57 unsigned m_Size;
58};
59
60class IDemoPlayer : public IInterface
61{
62 MACRO_INTERFACE("demoplayer")
63public:
65 {
66 public:
70 float m_Speed;
71
75
77 int m_aTimelineMarkers[MAX_TIMELINE_MARKERS];
78 };
79
81 {
82 TICK_CURRENT, // update the current tick again
83 TICK_PREVIOUS, // go to the previous tick
84 TICK_NEXT, // go to the next tick
85 };
86
87 virtual ~IDemoPlayer() = default;
88 virtual void SetSpeed(float Speed) = 0;
89 virtual void SetSpeedIndex(int SpeedIndex) = 0;
90 virtual void AdjustSpeedIndex(int Offset) = 0;
91 virtual int SeekPercent(float Percent) = 0;
92 virtual int SeekTime(float Seconds) = 0;
94 virtual int SetPos(int WantedTick) = 0;
95 virtual void Pause() = 0;
96 virtual void Unpause() = 0;
97 virtual const char *ErrorMessage() const = 0;
98 virtual bool IsPlaying() const = 0;
99 virtual const CInfo *BaseInfo() const = 0;
100 virtual void GetDemoName(char *pBuffer, size_t BufferSize) const = 0;
101 virtual 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 = 0;
102};
103
105{
106 MACRO_INTERFACE("demorecorder")
107public:
109 {
110 KEEP_FILE,
112 };
113
114 virtual ~IDemoRecorder() = default;
115 virtual bool IsRecording() const = 0;
116 virtual int Stop(IDemoRecorder::EStopMode Mode, const char *pTargetFilename = "") = 0;
117 virtual int Length() const = 0;
118 virtual const char *CurrentFilename() const = 0;
119};
120
122{
123 MACRO_INTERFACE("demoeditor")
124public:
125 virtual bool Slice(const char *pDemo, const char *pDst, int StartTick, int EndTick, DEMOFUNC_FILTER pfnFilter, void *pUser) = 0;
126};
127
128#endif
Definition console.h:18
Definition demo.h:122
virtual bool Slice(const char *pDemo, const char *pDst, int StartTick, int EndTick, DEMOFUNC_FILTER pfnFilter, void *pUser)=0
Definition demo.h:65
float m_Speed
Definition demo.h:70
int m_NumTimelineMarkers
Definition demo.h:76
bool m_LivePlayback
Definition demo.h:69
bool m_Paused
Definition demo.h:67
int m_CurrentTick
Definition demo.h:73
bool m_LiveDemo
Definition demo.h:68
int m_LastTick
Definition demo.h:74
int m_FirstTick
Definition demo.h:72
Definition demo.h:61
virtual 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 =0
virtual void SetSpeedIndex(int SpeedIndex)=0
virtual void Pause()=0
virtual int SeekTick(ETickOffset TickOffset)=0
virtual void GetDemoName(char *pBuffer, size_t BufferSize) const =0
virtual void SetSpeed(float Speed)=0
virtual void AdjustSpeedIndex(int Offset)=0
virtual ~IDemoPlayer()=default
virtual int SetPos(int WantedTick)=0
virtual const CInfo * BaseInfo() const =0
virtual int SeekTime(float Seconds)=0
virtual bool IsPlaying() const =0
virtual const char * ErrorMessage() const =0
virtual void Unpause()=0
virtual int SeekPercent(float Percent)=0
ETickOffset
Definition demo.h:81
@ TICK_NEXT
Definition demo.h:84
@ TICK_PREVIOUS
Definition demo.h:83
@ TICK_CURRENT
Definition demo.h:82
Definition demo.h:105
virtual int Stop(IDemoRecorder::EStopMode Mode, const char *pTargetFilename="")=0
virtual bool IsRecording() const =0
EStopMode
Definition demo.h:109
virtual int Length() const =0
virtual ~IDemoRecorder()=default
virtual const char * CurrentFilename() const =0
Definition kernel.h:10
Definition storage.h:21
Definition vmath.h:15
bool(* DEMOFUNC_FILTER)(const void *pData, int DataSize, void *pUser)
Definition demo.h:24
@ MAX_TIMELINE_MARKERS
Definition demo.h:15
static const unsigned char gs_aHeaderMarker[7]
Definition demo.h:18
static constexpr int DEMO_SPEED_INDEX_DEFAULT
Definition demo.h:21
static constexpr double DEMO_SPEEDS[]
Definition demo.h:20
const CUuid SHA256_EXTENSION
Definition demo.cpp:21
@ MAX_MAP_LENGTH
Definition map.h:12
#define MACRO_INTERFACE(Name)
Definition kernel.h:25
void * IOHANDLE
Definition logger.h:12
Definition demo.h:32
char m_aType[8]
Definition demo.h:39
char m_aTimestamp[20]
Definition demo.h:41
bool Valid() const
Definition demo.cpp:34
unsigned char m_aLength[sizeof(int32_t)]
Definition demo.h:40
unsigned char m_aMapSize[sizeof(int32_t)]
Definition demo.h:37
unsigned char m_aMarker[7]
Definition demo.h:33
unsigned char m_Version
Definition demo.h:34
char m_aMapName[64]
Definition demo.h:36
unsigned char m_aMapCrc[sizeof(int32_t)]
Definition demo.h:38
char m_aNetversion[64]
Definition demo.h:35
Definition demo.h:53
char m_aName[MAX_MAP_LENGTH]
Definition demo.h:54
unsigned m_Size
Definition demo.h:57
unsigned m_Crc
Definition demo.h:56
SHA256_DIGEST m_Sha256
Definition demo.h:55
Definition demo.h:47
unsigned char m_aTimelineMarkers[MAX_TIMELINE_MARKERS][sizeof(int32_t)]
Definition demo.h:49
unsigned char m_aNumTimelineMarkers[sizeof(int32_t)]
Definition demo.h:48
Definition uuid_manager.h:17
Definition hash.h:15