aboutsummaryrefslogtreecommitdiff
path: root/sp/src/common/replay/ireplayperformancecontroller.h
blob: 70a119e9eba38926a951e9c95d173d0b2125cf77 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//========= Copyright Valve Corporation, All rights reserved. ============//
//
//=======================================================================================//

#ifndef IREPLAYPERFORMANCECONTROLLER_H
#define IREPLAYPERFORMANCECONTROLLER_H
#ifdef _WIN32
#pragma once
#endif

//----------------------------------------------------------------------------------------

#include "interface.h"
#include "tier1/strtools.h"

//----------------------------------------------------------------------------------------

class IReplayPerformanceEditor;
class CReplay;
class Vector;
class QAngle;
class CReplayPerformance;

//----------------------------------------------------------------------------------------

// These values are what we use to represent 

struct SetViewParams_t 
{
	SetViewParams_t() { V_memset( this, 0, sizeof( SetViewParams_t ) ); }
	SetViewParams_t( float flTime, Vector *pOrigin, QAngle *pAngles, float flFov, float flAccel,
					 float flSpeed, float flRotFilter )
	:	m_flTime( flTime ),
		m_pOrigin( pOrigin ),
		m_pAngles( pAngles ),
		m_flFov( flFov ),
		m_flAccel( flAccel ),
		m_flSpeed( flSpeed ),
		m_flRotationFilter( flRotFilter )
	{
	}

	float	m_flTime;
	Vector	*m_pOrigin;
	QAngle	*m_pAngles;
	float	m_flFov;

	// Right now only used for updating UI during playback:
	float	m_flAccel;
	float	m_flSpeed;
	float	m_flRotationFilter;
};

//----------------------------------------------------------------------------------------

class IReplayPerformanceController : public IBaseInterface
{
public:
	virtual void		SetEditor( IReplayPerformanceEditor *pEditor ) = 0;

	virtual bool		IsPlaybackDataLeft() = 0;

	virtual void		StartRecording( CReplay *pReplay, bool bSnip ) = 0;
	virtual void		NotifyRewinding() = 0;

	virtual void		Stop() = 0;
	virtual bool		SaveAsync() = 0;
	virtual bool		SaveAsAsync( const wchar *pTitle ) = 0;

	virtual bool		IsSaving() const = 0;

	virtual void		SaveThink() = 0;

	virtual bool		GetLastSaveStatus() const = 0;

	virtual bool		IsRecording() const = 0;
	virtual bool		IsPlaying() const = 0;

	virtual bool		IsDirty() const = 0;
	virtual void		NotifyDirty() = 0;

	virtual CReplayPerformance	*GetPerformance() = 0;
	virtual CReplayPerformance	*GetSavedPerformance() = 0;
	virtual bool		HasSavedPerformance() = 0;

	virtual void		NotifyPauseState( bool bPaused ) = 0;

	virtual void		ClearRewinding() = 0;

	virtual void		OnSignonStateFull() = 0;

	virtual float		GetPlaybackTimeScale() const = 0;

	//
	// Recorder-specific:
	//
	virtual void		AddEvent_Camera_Change_FirstPerson( float flTime, int nEntityIndex ) = 0;
	virtual void		AddEvent_Camera_Change_ThirdPerson( float flTime, int nEntityIndex ) = 0;
	virtual void		AddEvent_Camera_Change_Free( float flTime ) = 0;
	virtual void		AddEvent_Camera_ChangePlayer( float flTime, int nEntIndex ) = 0;
	virtual void		AddEvent_Camera_SetView( const SetViewParams_t &params ) = 0;
	virtual void		AddEvent_TimeScale( float flTime, float flScale ) = 0;
};

//----------------------------------------------------------------------------------------

#endif // IREPLAYPERFORMANCECONTROLLER_H