|
|
//========= 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
|