summaryrefslogtreecommitdiff
path: root/public/dme_controls/BaseAnimationSetEditor.h
blob: 9133c001efb2e4d51d3a311f626e3fd1e4a3ef5d (plain) (blame)
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