|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#if defined( REPLAY_ENABLED )
#ifndef REPLAYPERFORMANCEEDITOR_H
#define REPLAYPERFORMANCEEDITOR_H
#ifdef _WIN32
#pragma once
#endif
#include "vgui_controls/EditablePanel.h"
#include "vgui_controls/ImagePanel.h"
#include "vgui_controls/ImageList.h"
#include "tf/vgui/tf_controls.h"
#include "replay/replayhandle.h"
#include "replay/ireplayperformanceeditor.h"
#include "replay/ireplayperformancecontroller.h"
//-----------------------------------------------------------------------------
class CPlayerCell; class CCameraOptionsPanel; class CRecLightPanel; class CReplay; class CReplayPerformance; class CReplayTipLabel; class CSavingDialog;
//-----------------------------------------------------------------------------
// NOTE: Should not change order here - if you do, you need to modify g_pCamNames.
enum CameraMode_t { CAM_INVALID = -1, CAM_FREE, CAM_THIRD, CAM_FIRST, COMPONENT_TIMESCALE, NCAMS };
//-----------------------------------------------------------------------------
class CReplayPerformanceEditorPanel : public vgui::EditablePanel, public IReplayPerformanceEditor { DECLARE_CLASS_SIMPLE( CReplayPerformanceEditorPanel, vgui::EditablePanel ); public: CReplayPerformanceEditorPanel( Panel *parent, ReplayHandle_t hReplay ); virtual ~CReplayPerformanceEditorPanel();
virtual void ShowPanel( bool bShow );
bool OnEndOfReplayReached(); void OnInGameMouseWheelEvent( int nDelta ); void UpdateCameraSelectionPosition( CameraMode_t nCameraMode ); void UpdateFreeCamSettings( const SetViewParams_t ¶ms ); void UpdateTimeScale( float flScale ); void HandleUiToggle(); void Exit(); void Exit_ShowDialogs();
private: virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); virtual void ApplySettings( KeyValues *pInResourceData ); virtual void PerformLayout(); virtual void OnCommand( const char *command ); virtual void OnMouseWheeled( int nDelta ); virtual void OnTick();
void Achievements_Think( float flElapsed ); void Achievements_OnSpaceBarPressed(); void Achievements_Grant();
friend class CReplayButton; friend class CSavingDialog;
void SetButtonTip( wchar_t *pTipText, Panel *pContextPanel ); void ShowButtonTip( bool bShow );
void ShowSavingDialog();
//
// IReplayPerformanceEditor:
//
virtual CReplay *GetReplay(); virtual void OnRewindComplete();
// Called when the user attempts to change to a different camera, etc.
// Returns true if request is immediately granted - false means the event
// was queued and the user has been asked if they are OK with nuking any
// changes after the current time.
bool OnStateChangeRequested( const char *pEventStr );
void EnsureRecording( bool bShouldSnip = true ); // Start recording now if not already doing so
bool IsPaused();
void UpdateCameraButtonImages( bool bForceUseUnselected = false ); void LayoutPlayerCells(); void SetupHighlightPanel( EditablePanel *pPanel, CPlayerCell *pPlayerCell ); void UpdateTimeLabels(); void ClearPlayerCellData();
void HandleMouseWheel( int nDelta );
private: enum ControlButtons_t { CTRLBUTTON_IN, CTRLBUTTON_GOTOBEGINNING, CTRLBUTTON_REWIND, CTRLBUTTON_PLAY, CTRLBUTTON_FF, CTRLBUTTON_GOTOEND, CTRLBUTTON_OUT,
NUM_CTRLBUTTONS };
CReplayPerformance *GetPerformance() const; CReplayPerformance *GetSavedPerformance() const;
int GetCameraModeFromButtonIndex( CameraMode_t iCamera ); void AddSetViewEvent(); void AddTimeScaleEvent( float flTimeScale ); void AddPanelKeyboardInputDisableList( vgui::Panel *pPanel ); CameraMode_t IsMouseOverActiveCameraOptionsPanel( int nMouseX, int nMouseY ); void SetOrRemoveInTick( int nTick, bool bRemoveIfSet ); void SetOrRemoveOutTick( int nTick, bool bRemoveIfSet ); void SetOrRemoveTick( int nTick, bool bUseInTick, bool bRemoveIfSet ); void ToggleMenu(); void OnMenuCommand_Save( bool bExitEditorWhenDone = false ); void OnMenuCommand_SaveAs( bool bExitEditorWhenDone = false ); void OnMenuCommand_Exit(); void DisplaySavedTip( bool bSucceess ); void OnSaveComplete();
void SaveAs( const wchar_t *pTitle );
void ShowRewindConfirmMessage();
static void OnConfirmSaveAs( bool bShouldSave, wchar_t *pTitle, void *pContext ); static void OnConfirmDestroyChanges( bool bConfirmed, void *pContext ); static void OnConfirmDiscard( bool bConfirmed, void *pContext ); static void OnConfirmExit( bool bConfirmed, void *pContext ); static void OnConfirmRewind( bool bConfirmed, void *pContext );
MESSAGE_FUNC_PARAMS( OnSliderMoved, "SliderMoved", pParams );
ReplayHandle_t m_hReplay;
float m_flLastTime; // Can't use gpGlobals->frametime when playback is paused
float m_flOldFps;
CExLabel *m_pCurTimeLabel; CExLabel *m_pTotalTimeLabel; CExLabel *m_pPlayerNameLabel;
KeyValues *m_pPlayerCellData; CPlayerCell *m_pPlayerCells[2][MAX_PLAYERS+1]; vgui::ImageList *m_pImageList;
EditablePanel *m_pMouseTargetPanel; EditablePanel *m_pBottom; CPlayerCell *m_pCurTargetCell;
CExImageButton *m_pCameraButtons[NCAMS]; CExImageButton *m_pCtrlButtons[NUM_CTRLBUTTONS];
float m_flTimeScaleProxy;
EditablePanel *m_pPlayerCellsPanel;
vgui::ImagePanel *m_pCameraSelection; CameraMode_t m_iCameraSelection; // NOTE: Indexes into some arrays
CReplayTipLabel *m_pButtonTip; CSavingDialog *m_pSavingDlg;
enum MenuItems_t { MENU_SAVE, MENU_SAVEAS, MENU_EXIT,
NUM_MENUITEMS };
CExImageButton *m_pMenuButton; vgui::Menu *m_pMenu; int m_aMenuItemIds[ NUM_MENUITEMS ];
CExButton *m_pSlowMoButton;
CCameraOptionsPanel *m_pCameraOptionsPanels[NCAMS];
CUtlLinkedList< vgui::Panel *, int > m_lstDisableKeyboardInputPanels;
int m_nRedBlueLabelRightX; int m_nBottomPanelStartY; int m_nBottomPanelHeight; int m_nRedBlueSigns[2]; int m_iCurPlayerTarget; float m_flSpaceDownStart; // The time at which user started holding down space bar
bool m_bSpaceDown; bool m_bSpacePressed; int m_nLastRoundedTime; bool m_bMousePressed; bool m_bMouseDown; float m_flDefaultFramerate; // host_framerate before perf editor started mucking about with it
CameraMode_t m_nMouseClickedOverCameraSettingsPanel; // Allows user to drag slider outside of camera settings panel w/o the panel disappearing
CRecLightPanel *m_pRecLightPanel; bool m_bShownAtLeastOnce; // Has the replay editor shown at least once? In other words, has the user hit the space bar at all yet?
char m_szSuspendedEvent[128];
bool m_bAchievementAwarded; // Was an achievement awarded during this editing session?
float m_flLastTimeSpaceBarPressed; float m_flActiveTimeInEditor; // Will be zero'd out if user is idle (ie if they don't press space bar often enough)
CPanelAnimationVarAliasType( int, m_nRightMarginWidth, "right_margin_width", "0", "proportional_xpos" );
bool m_bCurrentTargetNeedsVisibilityUpdate; };
//-----------------------------------------------------------------------------
CReplayPerformanceEditorPanel *ReplayUI_InitPerformanceEditor( ReplayHandle_t hReplay ); CReplayPerformanceEditorPanel *ReplayUI_GetPerformanceEditor(); void ReplayUI_ClosePerformanceEditor();
//-----------------------------------------------------------------------------
#endif // REPLAYPERFORMANCEEDITOR_H
#endif
|