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
|