summaryrefslogtreecommitdiff
path: root/utils/hlmv/controlpanel.h
blob: 73c2c882e1f03eebeebb15713b8b1aaa2bb4ee1b (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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//
//=============================================================================//
//
//                 Half-Life Model Viewer (c) 1999 by Mete Ciragan
//
// file:           ControlPanel.h
// last modified:  May 29 programs and associated files contained in this
//                 distribution were developed by Mete Ciragan. The programs
//                 are not in the public domain, but they are freely
//                 distributable without licensing fees. These programs are
//                 provided without guarantee or warrantee expressed or
//                 implied.
//
// version:        1.2
//
// email:          [email protected]
// web:            http://www.swissquake.ch/chumbalum-soft/
//
#ifndef INCLUDED_CONTROLPANEL
#define INCLUDED_CONTROLPANEL



#ifndef INCLUDED_MXWINDOW
#include <mxtk/mxWindow.h>
#endif


#define IDC_TAB						1901
#define IDC_RENDERMODE				2001
#define IDC_GROUND					2003
#define IDC_MOVEMENT				2004
#define IDC_BACKGROUND				2005
#define IDC_HITBOXES				2006
#define IDC_BONES					2007
#define IDC_ATTACHMENTS				2008
#define IDC_PHYSICSMODEL			2009
#define IDC_PHYSICSHIGHLIGHT		2010
#define IDC_LODCHOICE				2011
#define IDC_AUTOLOD					2012
#define IDC_LODSWITCH				2013
#define IDC_SOFTWARESKIN			2014
#define IDC_OVERBRIGHT2				2015
#define IDC_RENDER_FOV				2016
#define IDC_SEQUENCEBOXES			2017
#define IDC_RUNIK					2018
#define IDC_HEADTURN				2019
#define IDC_NORMALS					2020
#define IDC_TANGENTFRAME			2021
#define IDC_NORMALMAP				2022
#define IDC_SPECULAR				2023
#define IDC_SHADOW					2024
#define IDC_ILLUMPOSITION			2025
#define IDC_OVERLAY_WIREFRAME		2026
#define IDC_PLAYSOUNDS				2027
#define IDC_MESSAGES				2028
#define IDC_SHADERS					2029
//#define IDC_PARALLAXMAP			2030
#define IDC_SHOWORIGINAXIS			2029
#define IDC_ORIGINAXISLENGTH		2030

#define MAX_SEQUENCES				5
#define IDC_SEQUENCE0				3000
#define IDC_SEQUENCE1				3001
#define IDC_SEQUENCE2				3002
#define IDC_SEQUENCE3				3003
#define IDC_SEQUENCE4				3004

#define IDC_SEQUENCESCALE0			3005
#define IDC_SEQUENCESCALE1			3006
#define IDC_SEQUENCESCALE2			3007
#define IDC_SEQUENCESCALE3			3008
#define IDC_SEQUENCESCALE4			3009

#define IDC_FRAMESELECTION0			3010
#define IDC_FRAMESELECTION1			3011
#define IDC_FRAMESELECTION2			3012
#define IDC_FRAMESELECTION3			3013
#define IDC_FRAMESELECTION4			3014

#define NUM_POSEPARAMETERS			8
#define IDC_POSEPARAMETER_SCALE		3100
#define IDC_POSEPARAMETER			3120
#define IDC_POSEPARAMETER_VALUE		3140

#define IDC_SPEEDSCALE				3201
#define IDC_FORCEFRAME				3202
#define IDC_BLENDSEQUENCECHANGES	3203
#define IDC_BLENDNOW				3204
#define IDC_BLENDTIME				3205
#define IDC_ACTIVITY_MODIFIERS		3206
#define IDC_ANIMATEWEAPONS			3207

#define IDC_BODYPART				4001
#define IDC_SUBMODEL				4002
#define IDC_CONTROLLER				4003
#define IDC_CONTROLLERVALUE			4004
#define IDC_SKINS					4005
#define IDC_MATERIALS				4006

#define IDC_BONE_BONELIST			5000
#define IDC_BONE_GENERATEQC			5001
#define IDC_BONE_HIGHLIGHT_BONE		5002
#define IDC_BONE_HITBOXLIST			5003
#define IDC_BONE_SURFACEPROP		5004
#define IDC_BONE_HIGHLIGHT_HITBOX	5005
#define IDC_BONE_ADD_HITBOX			5006
#define IDC_BONE_DELETE_HITBOX		5007
#define IDC_BONE_APPLY_TO_CHILDREN	5008
#define IDC_BONE_SHOW_DEFAULT_POSE	5009
#define IDC_BONE_HITBOX_ORIGINX		5010
#define IDC_BONE_HITBOX_ORIGINY		5011
#define IDC_BONE_HITBOX_ORIGINZ		5012
#define IDC_BONE_HITBOX_SIZEX		5013
#define IDC_BONE_HITBOX_SIZEY		5014
#define IDC_BONE_HITBOX_SIZEZ		5015
#define IDC_BONE_HITBOX_GROUP		5016
#define IDC_BONE_UPDATE_HITBOX		5017
#define IDC_BONE_USE_AUTOGENERATED_HITBOXES	5018
#define IDC_BONE_HITBOXSET			5019
#define IDC_BONE_HITBOXADDSET		5020
#define IDC_BONE_HITBOXDELETESET	5021
#define IDC_BONE_HITBOXSETNAME		5022
#define IDC_BONE_HITBOXSETNAME_EDIT	5023

// This range is reserved for the attachment window.
#define IDC_ATTACHMENT_WINDOW_FIRST	5024
#define IDC_ATTACHMENT_WINDOW_LAST	5100
#define IDC_BONE_HITBOX_NAME		5101
#define IDC_BONE_SAVE_HITBOXES		5102
#define IDC_BONE_LOAD_HITBOXES		5103

#define IDC_FLEX					7001
#define IDC_FLEXDEFAULTS			7002
#define IDC_FLEXRANDOM				7003
#define IDC_FLEXZERO				7004
#define IDC_FLEXONE					7005
#define IDC_FLEXSCALE				7101

#define NUM_FLEX_SLIDERS			48

#define IDC_PHYS_FIRST				7501
#define IDC_PHYS_BONE				7501
#define IDC_PHYS_CON_LINK_LIMITS	7502
#define IDC_PHYS_MATERIAL			7503
#define IDC_PHYS_CON_MIN			7504
#define IDC_PHYS_CON_MAX			7505
#define IDC_PHYS_CON_TEST			7506
#define IDC_PHYS_P_MASSBIAS			7507
#define IDC_PHYS_CON_FRICTION		7508
//#define IDC_PHYS_P_ELASTICITY		7509
#define IDC_PHYS_P_INERTIA			7510
#define IDC_PHYS_P_DAMPING			7511
#define IDC_PHYS_P_ROT_DAMPING		7512
#define IDC_PHYS_MASS				7513
#define IDC_PHYS_QCFILE				7514
#define IDC_PHYS_CON_AXIS_X			7515
#define IDC_PHYS_CON_AXIS_Y			7516
#define IDC_PHYS_CON_AXIS_Z			7517
#define IDC_PHYS_CON_TYPE_FREE		7518
#define IDC_PHYS_CON_TYPE_FIXED		7519
#define IDC_PHYS_CON_TYPE_LIMIT		7520
#define IDC_PHYS_LAST				7599

#define MAX_ANIMS					4
#define IDC_ANIMX					8020 // through 8023 ( MAX_ANIMS )
#define IDC_ANIMY					8030 // through 8033 ( MAX_ANIMS )

#define IDC_IKRULE_CHAIN			9000
#define IDC_IKRULE_CHOICE			9001
#define IDC_IKRULE_TOUCH			9002
#define IDC_IKRULE_ATTACHMENT		9003
#define IDC_IKRULE_RANGE_TOGGLE		9004
#define IDC_IKRULE_RANGE_START		9005
#define IDC_IKRULE_RANGE_PEAK		9006
#define IDC_IKRULE_RANGE_TAIL		9007
#define IDC_IKRULE_RANGE_END		9008
#define IDC_IKRULE_RANGE_START_NOW	9009
#define IDC_IKRULE_RANGE_PEAK_NOW	9010
#define IDC_IKRULE_RANGE_TAIL_NOW	9011
#define IDC_IKRULE_RANGE_END_NOW	9012
#define IDC_IKRULE_CONTACT_TOGGLE	9013
#define IDC_IKRULE_CONTACT_FRAME_NOW 9014
#define IDC_IKRULE_CONTACT_FRAME	9015
#define IDC_IKRULE_USING			9016
#define IDC_IKRULE_QC_STRING		9017

#define IDC_EVENT_SOUND_FRAME_NOW	6000
#define IDC_EVENT_SOUND_FRAME		6001
#define IDC_EVENT_SOUND_NAME		6002
#define IDC_EVENT_QC_STRING			6003


class mxTab;
class mxChoice;
class mxCheckBox;
class mxSlider;
class mxLineEdit;
class mxLineEdit2;
class mxLabel;
class mxListBox;
class mxButton;
class mxRadioButton;
class MatSysWindow;
class TextureWindow;
class CBoneControlWindow;
class CAttachmentsWindow;
class CStudioHdr;


// Return codes from loadModel.
enum LoadModelResult_t
{
	LoadModel_Success = 0,
	LoadModel_LoadFail,
	LoadModel_NoModel,
	LoadModel_PostLoadFail,
};


class ControlPanel : public mxWindow
{
	mxWindow *wRender;
	mxTab *tab;
	mxChoice *cRenderMode;
	mxChoice *cHighlightBone;

	mxCheckBox *cbGround;
	mxCheckBox *cbHitBoxes;
	mxCheckBox *cbSequenceBoxes;
	mxCheckBox *cbShadow;
	mxCheckBox *cbMovement;
	mxCheckBox *cbBackground;
	mxCheckBox *cbSoftwareSkin;
	mxCheckBox *cbOverbright2;
	mxCheckBox *cbAttachments;
	mxCheckBox *cbBones;
	mxCheckBox *cbNormals;
	mxCheckBox *cbNormalMap;
//	mxCheckBox *cbParallaxMap;
	mxCheckBox *cbTangentFrame;
	mxCheckBox *cbOverlayWireframe;
	mxCheckBox *cbSpecular;
	mxCheckBox *cbRunIK;
	mxCheckBox *cbEnableHead;
	mxCheckBox *cbIllumPosition;
	mxCheckBox *cbPlaySounds;
	mxCheckBox *cbShowOriginAxis;
	mxSlider *leOriginAxisLength;

	mxChoice *cLODChoice;
	mxCheckBox *cbAutoLOD;
	mxLineEdit *leLODSwitch;
	mxLabel *lLODMetric;
	mxChoice *cSequence[MAX_SEQUENCES];
	mxSlider *slSequence[MAX_SEQUENCES];
	int		 *iSelectionToSequence; // selection to sequence
	int		 *iSequenceToSelection; // sequence to selection
	mxLabel *laGroundSpeed;
	mxSlider *slSpeedScale;
	mxLabel *laFPS;
	mxLabel *laBlendAmount;

	mxChoice *cPoseParameter[NUM_POSEPARAMETERS];
	mxSlider *slPoseParameter[NUM_POSEPARAMETERS];
	mxLineEdit *lePoseParameter[NUM_POSEPARAMETERS];
	mxLineEdit *leFOV;

	mxSlider *slBlendTime;
	mxLabel *laBlendTime;
	mxChoice *cActivityModifiers;
	mxSlider *slForceFrame;
	mxLabel	*lForcedFrame;
	mxRadioButton *rbFrameSelection[MAX_SEQUENCES];
	mxChoice *cBodypart, *cController, *cSubmodel;
	mxSlider *slController;
	mxChoice *cSkin;
	mxChoice *cMaterials;
	mxLabel *lModelInfo1, *lModelInfo2, *lModelInfo3, *lModelInfo4, *lModelInfo5;
	//mxChoice *cTextures;
	//mxCheckBox *cbChrome;
	//mxLabel *lTexSize;
	//mxLineEdit *leWidth, *leHeight;

	mxLineEdit *leMeshScale, *leBoneScale;

	MatSysWindow *d_MatSysWindow;
	TextureWindow *d_textureWindow;

	mxChoice *cFlex[NUM_FLEX_SLIDERS];
	mxSlider *slFlexScale[NUM_FLEX_SLIDERS];

	mxChoice *cPhysicsBone;
	mxRadioButton *rbConstraintAxis[3];
	mxSlider *slPhysicsFriction;
	mxLabel	 *lPhysicsFriction;

	mxSlider *slPhysicsConMin;
	mxLabel	 *lPhysicsConMin;
	mxCheckBox *cbLinked;		// links min/max sliders

	mxSlider *slPhysicsConMax;
	mxLabel	 *lPhysicsConMax;
	mxSlider *slPhysicsConTest;
	mxLineEdit *leMass;

	mxSlider *slPhysicsParamMassBias;
	mxLabel	 *lPhysicsParamMassBias;
	mxSlider *slPhysicsParamFriction;
	mxLabel	 *lPhysicsParamFriction;
	mxSlider *slPhysicsParamElasticity;
	mxLabel	 *lPhysicsParamElasticity;
	mxSlider *slPhysicsParamInertia;
	mxLabel	 *lPhysicsParamInertia;
	mxSlider *slPhysicsParamDamping;
	mxLabel	 *lPhysicsParamDamping;
	mxSlider *slPhysicsParamRotDamping;
	mxLabel	 *lPhysicsParamRotDamping;
	mxLabel  *lPhysicsMaterial;

	mxChoice *cIKChain;
	mxChoice *cIKType;
	mxLabel *lIKTouch;
	mxChoice *cIKTouch;
	mxLabel *lIKAttachment;
	mxLineEdit *leIKAttachment;
	mxCheckBox *cbIKRangeToggle;
	mxLineEdit2 *leIKRangeStart;
	mxLineEdit2 *leIKRangePeak;
	mxLineEdit2 *leIKRangeTail;
	mxLineEdit2 *leIKRangeEnd;
	mxCheckBox *cbIKContactToggle;
	mxLineEdit2 *leIKContactFrame;
	mxChoice *cIKUsing;
	mxLineEdit2 *leIKQCString;

	mxLineEdit2 *leEventSoundFrame;
	mxListBox *lbEventSoundName;
	mxLineEdit2 *leEventQCString;

	CBoneControlWindow* m_pBoneWindow;
	CAttachmentsWindow* m_pAttachmentsWindow;
	mxListBox *cMessageList;
	mxListBox *cShaderUsed;

public:
	// CREATORS
	ControlPanel (mxWindow *parent);
	virtual ~ControlPanel ();

	virtual void OnDelete();

	// MANIPULATORS
	int handleEvent (mxEvent *event);

	int handlePhysicsEvent( mxEvent *event );
	void UpdateConstraintSliders( int clamp );
	void setupPhysics( void );
	void setupPhysicsBone( int boneIndex );
	void setupPhysicsAxis( int boneIndex, int axis );
	int getPhysicsAxis( void );
	void setPhysicsAxis( int axisIndex );
	void writePhysicsData( void );
	void handlePhysicsKey( mxEvent *event );
//	void readPhysicsMaterials( mxChoice *pList );

	void dumpModelInfo ();
	LoadModelResult_t loadModel(const char *filename);
	LoadModelResult_t loadModel(const char *filename, int slot );
	void OnLoadModel( void );

	void resetControlPanel( void );
	void setRenderMode (int mode);
	void setShowGround (bool b);
	void setShowMovement (bool b);
	void setShowBackground (bool b);
	void setShowNormals (bool b);
	void setShowTangentFrame (bool b);
	void setOverlayWireframe (bool b);
	void setShowShadow (bool b);
	void setShowHitBoxes (bool b);
	void setShowBones (bool b);
	void setShowAttachments (bool b);
	void setHighlightBone( int index );
	void setLOD( int index, bool setLODchoice, bool force );
	void setAutoLOD( bool b );
	void setSoftwareSkin( bool b );
	void setOverbright( bool b );
	void setLODMetric( float metric );
	void setPolycount( int polycount );
	void setModelInfo( int nVertCount, int nIndexCount, int nTriCount );
	void setTransparent( bool isTransparent );
	void updatePoseParameters( void );
	void setFOV( float fov );
	void setPlaySounds( bool b );
	void setShowOriginAxis( bool b );
	void setOriginAxisLength( float originAxisLength );

	void initSequenceChoices();
	void setSequence( int index );
	void showActivityModifiers( int sequence );
	void updateGroundSpeed( void );
	void setOverlaySequence(int num, int index, float weight);
	void updateTransitionAmount();
	void startBlending( void );
	void setSpeedScale ( float scale );
	void updateSpeedScale( void );
	void setBlend(int index, float value );

	int	getFrameSelection( void );
	void setFrame( float frame );
	void updateFrameSelection( void );
	void updateFrameSlider( void );

	void initBodypartChoices();
	void setBodypart (int index);
	void setSubmodel (int index);

	void initBoneControllers ();
	void setBoneController (int index);
	void setBoneControllerValue (int index, float value);

	void initSkinChoices();
	void initMaterialChoices();

	void setModelInfo ();

	void initPhysicsBones();
	
	void initLODs();

	void centerView ();
	void UpdateMaterialList ();
	void viewmodelView();

	void fullscreen ();

	void setMatSysWindow (MatSysWindow *window) { d_MatSysWindow = window; }

	void ConvertFlexData();
	void initFlexes ();
	void connectFlexes( CStudioHdr* hdr );

	int GetCurrentHitboxSet( void );

	void BuildIKRuleQCString();
	void UpdateIKRuleWindow();

	void BuildEventQCString();

	void CreateSortedSequenceList( CStudioHdr* hdr, int *pSequence );
	void SetFrameSlider( float flFrame );

	void UnloadAllMergedModels();

public:
	// Sets up the main tabs
	void SetupRenderWindow( mxTab* pTab );
	void SetupSequenceWindow( mxTab* pTab );
	void SetupBoneControlWindow( mxTab* pTab );
	void SetupBodyWindow( mxTab* pTab );
	void SetupFlexWindow( mxTab* pTab );
	void SetupPhysicsWindow( mxTab* pTab );
	void SetupAttachmentsWindow( mxTab *pTab );
	void SetupIKRuleWindow( mxTab *pTab );
	void SetupEventWindow( mxTab *pTab );
	bool m_bVMTInfoLoaded;
};


extern ControlPanel *g_ControlPanel;



#endif // INCLUDED_CONTROLPANEL