diff options
Diffstat (limited to 'game/client/replay/vgui/replayperformanceeditor.h')
| -rw-r--r-- | game/client/replay/vgui/replayperformanceeditor.h | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/game/client/replay/vgui/replayperformanceeditor.h b/game/client/replay/vgui/replayperformanceeditor.h new file mode 100644 index 0000000..034843a --- /dev/null +++ b/game/client/replay/vgui/replayperformanceeditor.h @@ -0,0 +1,241 @@ +//========= 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
\ No newline at end of file |