179 lines
4.8 KiB
C
179 lines
4.8 KiB
C
|
// Copyright (C) 2007 Id Software, Inc.
|
||
|
//
|
||
|
|
||
|
#ifndef __GAME_DEMOS_DEMOMANAGER_H__
|
||
|
#define __GAME_DEMOS_DEMOMANAGER_H__
|
||
|
|
||
|
#include "../guis/UserInterfaceTypes.h"
|
||
|
#include "DemoAnalyzer.h"
|
||
|
|
||
|
class sdDemoCamera;
|
||
|
class sdDemoScript;
|
||
|
|
||
|
class sdDemoProperties : public sdUIPropertyHolder {
|
||
|
public:
|
||
|
sdDemoProperties() {}
|
||
|
~sdDemoProperties() {}
|
||
|
|
||
|
virtual sdProperties::sdProperty* GetProperty( const char* name );
|
||
|
virtual sdProperties::sdProperty* GetProperty( const char* name, sdProperties::ePropertyType type );
|
||
|
virtual sdProperties::sdPropertyHandler& GetProperties() { return properties; }
|
||
|
virtual const char* FindPropertyName( sdProperties::sdProperty* property, sdUserInterfaceScope*& scope ) { scope = this; return properties.NameForProperty( property ); }
|
||
|
|
||
|
virtual const char* GetName() const { return "demoProperties"; }
|
||
|
|
||
|
void Init();
|
||
|
void Shutdown();
|
||
|
void UpdateProperties();
|
||
|
|
||
|
private:
|
||
|
sdFloatProperty state;
|
||
|
|
||
|
sdFloatProperty time;
|
||
|
sdFloatProperty size;
|
||
|
sdFloatProperty position;
|
||
|
|
||
|
sdFloatProperty frame;
|
||
|
|
||
|
sdFloatProperty cutIsSet;
|
||
|
sdFloatProperty cutStartMarker;
|
||
|
sdFloatProperty cutEndMarker;
|
||
|
|
||
|
sdStringProperty demoName;
|
||
|
sdFloatProperty writingMDF;
|
||
|
sdStringProperty mdfName;
|
||
|
|
||
|
sdVec3Property viewOrigin;
|
||
|
sdVec3Property viewAngles;
|
||
|
|
||
|
sdProperties::sdPropertyHandler properties;
|
||
|
};
|
||
|
|
||
|
class sdDemoManagerLocal {
|
||
|
public:
|
||
|
typedef enum demoState_e {
|
||
|
DS_NONE = -1,
|
||
|
DS_RECORDING = 0,
|
||
|
DS_PLAYING = 1,
|
||
|
DS_PAUSED = 2
|
||
|
} demoState_t;
|
||
|
|
||
|
sdDemoManagerLocal() { script = NULL; melDataFile = NULL; }
|
||
|
~sdDemoManagerLocal();
|
||
|
|
||
|
void Init();
|
||
|
void InitGUIs();
|
||
|
void Shutdown();
|
||
|
|
||
|
bool InPlayBack( void ) const { return state == DS_PLAYING || state == DS_PAUSED; }
|
||
|
|
||
|
demoState_t GetState() const { return state; }
|
||
|
int GetTime() const { return time; }
|
||
|
int GetPreviousTime() const { return previousTime; }
|
||
|
|
||
|
int GetSize() const { return position; }
|
||
|
float GetPosition() const;
|
||
|
int GetLength() const { return length; }
|
||
|
|
||
|
int GetFrame() const { return demoGameFrames; }
|
||
|
|
||
|
bool CutIsSet() const { return cutStartMarker == -1 || cutEndMarker == -1 ? false : true; }
|
||
|
float GetCutStartMarker() const;
|
||
|
float GetCutEndMarker() const;
|
||
|
|
||
|
sdUIPropertyHolder& GetProperties() { return localDemoProperties; }
|
||
|
guiHandle_t GetHudHandle() { return hud; }
|
||
|
|
||
|
void StartDemo();
|
||
|
void EndDemo();
|
||
|
|
||
|
void RunDemoFrame( const usercmd_t* demoCmd );
|
||
|
void EndDemoFrame();
|
||
|
|
||
|
void SetActiveCamera( sdDemoCamera* camera );
|
||
|
|
||
|
bool CalculateRenderView( renderView_t* renderView );
|
||
|
|
||
|
void SetRenderedView( const renderView_t& renderView ) { renderedView = renderView; }
|
||
|
const renderView_t& GetRenderedView() { return renderedView; }
|
||
|
|
||
|
sdDemoCamera* CreateCamera( const char* type ) { return cameraFactory.CreateType( type ); }
|
||
|
|
||
|
bool NoClip() { return ( ( state == DS_PAUSED || ( state == DS_PLAYING && demo_noclip.GetBool() ) ) && !g_showDemoView.GetBool() ); }
|
||
|
|
||
|
bool WritingMDF() const { return melDataFile ? true : false; }
|
||
|
const idStr& GetMDFFileName() const { return melDataFileName; }
|
||
|
|
||
|
sdDemoScript* GetScript() const { return script; }
|
||
|
|
||
|
sdDemoAnalyzer& GetDemoAnalyzer() { return demoAnalyzer; }
|
||
|
|
||
|
const usercmd_t& GetDemoCommand() const { return demoCmd; }
|
||
|
|
||
|
public:
|
||
|
static idCVar g_showDemoHud;
|
||
|
|
||
|
private:
|
||
|
typedef sdFactory< sdDemoCamera > sdCameraFactory;
|
||
|
struct melPrimitive_t {
|
||
|
bool visible;
|
||
|
idBounds bounds;
|
||
|
};
|
||
|
|
||
|
private:
|
||
|
int demoGameFrames;
|
||
|
|
||
|
int pausedTime;
|
||
|
int previousPausedTime;
|
||
|
|
||
|
demoState_t state;
|
||
|
int time;
|
||
|
int previousTime;
|
||
|
int position;
|
||
|
int length;
|
||
|
int startPosition;
|
||
|
int endPosition;
|
||
|
|
||
|
int cutStartMarker;
|
||
|
int cutEndMarker;
|
||
|
|
||
|
sdDemoScript* script;
|
||
|
sdDemoCamera* activeCamera;
|
||
|
|
||
|
// moveable camera
|
||
|
usercmd_t demoCmd;
|
||
|
|
||
|
idVec3 viewOrigin;
|
||
|
idAngles viewAngles;
|
||
|
idAngles deltaViewAngles;
|
||
|
idVec3 currentVelocity;
|
||
|
|
||
|
renderView_t renderedView;
|
||
|
|
||
|
sdCameraFactory cameraFactory;
|
||
|
|
||
|
// conversion to MEL
|
||
|
static idCVar g_demoOutputMDF;
|
||
|
|
||
|
idStr melDataFileName;
|
||
|
idFile* melDataFile;
|
||
|
idList<melPrimitive_t*> melPrimitives;
|
||
|
int melFrames;
|
||
|
|
||
|
// hud
|
||
|
sdDemoProperties localDemoProperties;
|
||
|
|
||
|
guiHandle_t hud;
|
||
|
|
||
|
// demo analysis
|
||
|
sdDemoAnalyzer demoAnalyzer;
|
||
|
|
||
|
static idCVar g_showDemoView;
|
||
|
static idCVar g_demoAnalyze;
|
||
|
static idCVar demo_noclip;
|
||
|
};
|
||
|
|
||
|
typedef sdSingleton< sdDemoManagerLocal > sdDemoManager;
|
||
|
|
||
|
#endif // __GAME_DEMOS_DEMOMANAGER_H__
|