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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
//========= 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
|