Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

151 lines
5.7 KiB

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================
#ifndef BASEANIMATIONSETEDITOR_H
#define BASEANIMATIONSETEDITOR_H
#ifdef _WIN32
#pragma once
#endif
#include "vgui_controls/EditablePanel.h"
#include "vgui_controls/ImageList.h"
#include "datamodel/dmehandle.h"
#include "vgui/KeyCode.h"
#include "dme_controls//AnimSetAttributeValue.h"
#include "dme_controls/RecordingState.h"
#include "tier1/utlvector.h"
#include "movieobjects/dmelog.h"
#include "vgui_controls/fileopenstatemachine.h"
//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
struct LogPreview_t;
class CDmeAnimationSet;
class CDmeAnimationList;
class CDmeChannelsClip;
class CDmeChannel;
class CBaseAnimSetControlGroupPanel;
class CBaseAnimSetPresetFaderPanel;
class CBaseAnimSetAttributeSliderPanel;
class CDmeGameModel;
//-----------------------------------------------------------------------------
// Base class for the panel for editing animation sets
//-----------------------------------------------------------------------------
class CBaseAnimationSetEditor : public vgui::EditablePanel, public vgui::IFileOpenStateMachineClient
{
DECLARE_CLASS_SIMPLE( CBaseAnimationSetEditor, vgui::EditablePanel );
public:
enum EAnimSetLayout_t
{
LAYOUT_SPLIT = 0,
LAYOUT_VERTICAL,
LAYOUT_HORIZONTAL,
};
CBaseAnimationSetEditor( vgui::Panel *parent, char const *panelName, bool bShowGroups );
virtual ~CBaseAnimationSetEditor();
virtual void CreateToolsSubPanels();
int BuildVisibleControlList( CUtlVector< LogPreview_t >& list );
int BuildFullControlList( CUtlVector< LogPreview_t >& list );
void RecomputePreview();
virtual void ChangeLayout( EAnimSetLayout_t newLayout );
CBaseAnimSetControlGroupPanel *GetControlGroup();
CBaseAnimSetPresetFaderPanel *GetPresetFader();
CBaseAnimSetAttributeSliderPanel *GetAttributeSlider();
void ChangeAnimationSet( CDmeAnimationSet *newAnimSet );
virtual void SetRecordingState( RecordingState_t state, bool updateSettings );
RecordingState_t GetRecordingState() const;
CDmeAnimationSet *GetAnimationSet();
// Inherited from IFileOpenStateMachineClient
public:
virtual void SetupFileOpenDialog( vgui::FileOpenDialog *pDialog, bool bOpenFile, const char *pFileFormat, KeyValues *pContextKeyValues );
virtual bool OnReadFileFromDisk( const char *pFileName, const char *pFileFormat, KeyValues *pContextKeyValues );
virtual bool OnWriteFileToDisk( const char *pFileName, const char *pFileFormat, KeyValues *pContextKeyValues );
protected:
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
virtual void PerformLayout();
virtual void OnDataChanged();
MESSAGE_FUNC_PARAMS( OnOpenContextMenu, "OpenContextMenu", params );
MESSAGE_FUNC_INT( OnChangeLayout, "OnChangeLayout", value );
MESSAGE_FUNC( OnTextChanged, "TextChanged" );
MESSAGE_FUNC_PARAMS( OnButtonToggled, "ButtonToggled", params );
MESSAGE_FUNC_PARAMS( OnFileSelected, "FileSelected", params );
MESSAGE_FUNC_PARAMS( OnImportConfirmed, "ImportConfirmed", params );
MESSAGE_FUNC_PARAMS( OnImportAnimation, "ImportAnimation", params );
MESSAGE_FUNC( OnExportFacialAnimation, "ExportFacialAnimation" );
MESSAGE_FUNC_PARAMS( OnImportAnimationSelected, "DmeSelected", params );
MESSAGE_FUNC_PARAMS( OnImportAnimationCancelled, "DmeSelectionCancelled", params );
// Selects an animation to import
void SelectImportAnimation( CDmeAnimationList *pAnimationList, bool bVisibleOnly );
// Imports a specific channels clip into the animation set
void ImportAnimation( CDmeChannelsClip *pChannelsClip, bool bVisibleOnly );
// Finds a channel in the animation set to overwrite with import data
CDmeChannel* FindImportChannel( CDmeChannel *pChannel, CDmeChannelsClip *pChannelsClip );
// Transforms an imported channel, if necessary
void TransformImportedChannel( CDmeChannel *pChannel );
// Transforms an imported position log
void TransformImportedPositionLog( const matrix3x4_t& matrix, CDmeVector3Log *pPositionLog );
// Transforms an imported orientation log
void TransformImportedOrientationLog( const matrix3x4_t& matrix, CDmeQuaternionLog *pOrientationLog );
// Expands channels clip time to encompass log
void FixupChannelsClipTime( CDmeChannel *pChannel, CDmeLog *pLog );
void FixupChannelsClipTime( CDmeChannelsClip *pChannelsClip, CDmeLog *pLog );
// Adds a log layer to the list of logs for export
void AddLogLayerForExport( CDmElement *pRoot, const char *pControlName, CDmeChannel *pChannel, DmeTime_t tExportStart, DmeTime_t tExportEnd );
// Exports animations
void ExportAnimations( CDmElement *pAnimations, DmeTime_t tExportStart, DmeTime_t tExportEnd );
// Inherited classes need to implement this for export to work.
virtual CDmeFilmClip *GetAnimationSetClip() { return NULL; }
virtual CDmeFilmClip *GetRootClip() { return NULL; }
protected:
EAnimSetLayout_t m_Layout;
vgui::DHANDLE< vgui::Splitter > m_Splitter;
vgui::DHANDLE< CBaseAnimSetControlGroupPanel > m_hControlGroup;
vgui::DHANDLE< CBaseAnimSetPresetFaderPanel > m_hPresetFader;
vgui::DHANDLE< CBaseAnimSetAttributeSliderPanel > m_hAttributeSlider;
vgui::DHANDLE< vgui::Menu > m_hContextMenu;
vgui::DHANDLE< vgui::FileOpenStateMachine > m_hFileOpenStateMachine;
vgui::ToggleButton *m_pState[ NUM_AS_RECORDING_STATES ];
vgui::ToggleButton *m_pSelectionModeType;
vgui::ImageList m_Images;
CDmeHandle< CDmeAnimationSet > m_AnimSet;
vgui::ComboBox *m_pComboBox;
RecordingState_t m_RecordingState;
};
#endif // BASEANIMATIONSETEDITOR_H