//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void mxStatusWindow::DrawActiveTool() { RECT rcTool; rcTool.left = 0; rcTool.top = GetCaptionHeight() + 2; rcTool.bottom = h2(); rcTool.right = w2() - 16; rcTool.bottom = rcTool.top + 10; rcTool.left = rcTool.right - 500; char sz[ 256 ]; IFacePoserToolWindow *activeTool = IFacePoserToolWindow::GetActiveTool(); static float lastrealtime = 0.0f; float dt = (float)realtime - lastrealtime; dt = clamp( dt, 0.0f, 1.0f ); float fps = 0.0f; if ( dt > 0.0001f ) { fps = 1.0f / dt; } sprintf( sz, "%s (%i) at %.3f (%.2f fps) (soundcount %i)", activeTool ? activeTool->GetToolName() : "None", g_MDLViewer->GetCurrentFrame(), (float)realtime, fps, models->CountActiveSources() ); lastrealtime = realtime; int len = CChoreoWidgetDrawHelper::CalcTextWidth( "Courier New", 10, FW_NORMAL, sz ); CChoreoWidgetDrawHelper helper( this, rcTool, RGB( 32, 0, 0 ) ); rcTool.left = rcTool.right - len - 15; helper.DrawColoredText( "Courier New", 10, FW_NORMAL, RGB( 255, 255, 200 ), rcTool, sz ); }
MDLViewer::MDLViewer () : mxWindow (0, 0, 0, 0, 0, g_appTitle, mxWindow::Normal) { int i; g_MDLViewer = this; FacePoser_MakeToolWindow( this, false ); workspace = new CMDLViewerWorkspace( this, 0, 0, 500, 500, "" ); windowtab = new CMDLViewerWindowTab( this, 0, 500, 500, 20, IDC_WINDOW_TAB ); modeltab = new CMDLViewerModelTab( this, 500, 500, 100, 20, IDC_MODEL_TAB ); gridsettings = new CMDLViewerGridSettings( this, 0, 500, 500, 20 ); modeltab->SetRightJustify( true ); g_pStatusWindow = new mxStatusWindow( workspace, 0, 0, 1024, 150, "" ); g_pStatusWindow->setVisible( true ); InitViewerSettings( "faceposer" ); g_viewerSettings.speechapiindex = SPEECH_API_LIPSINC; g_viewerSettings.flHeadTurn = 0.0f; g_viewerSettings.m_iEditAttachment = -1; LoadPosition(); // ShowWindow( (HWND)getHandle(), SW_SHOWMAXIMIZED ); g_pStatusWindow->setBounds( 0, h2() - 150, w2(), 150 ); Con_Printf( "MDLViewer started\n" ); Con_Printf( "CSoundEmitterSystemBase::Init()\n" ); soundemitter->BaseInit(); Con_Printf( "Creating menu bar\n" ); // create menu stuff mb = new mxMenuBar (this); menuFile = new mxMenu (); menuOptions = new mxMenu (); menuWindow = new mxMenu (); menuHelp = new mxMenu (); menuEdit = new mxMenu (); menuExpressions = new mxMenu(); menuChoreography = new mxMenu(); mb->addMenu ("File", menuFile); mb->addMenu( "Edit", menuEdit ); mb->addMenu ("Options", menuOptions); mb->addMenu ( "Expression", menuExpressions ); mb->addMenu ( "Choreography", menuChoreography ); mb->addMenu ("Window", menuWindow); mb->addMenu ("Help", menuHelp); mxMenu *menuRecentModels = new mxMenu (); menuRecentModels->add ("(empty)", IDC_FILE_RECENTMODELS1); menuRecentModels->add ("(empty)", IDC_FILE_RECENTMODELS2); menuRecentModels->add ("(empty)", IDC_FILE_RECENTMODELS3); menuRecentModels->add ("(empty)", IDC_FILE_RECENTMODELS4); menuFile->add ("Load Model...", IDC_FILE_LOADMODEL); menuFile->add( "Refresh\tF5", IDC_FILE_REFRESH ); menuFile->addSeparator(); menuFile->add ("Load Background Texture...", IDC_FILE_LOADBACKGROUNDTEX); menuFile->add ("Load Ground Texture...", IDC_FILE_LOADGROUNDTEX); menuFile->addSeparator (); menuFile->add ("Unload Ground Texture", IDC_FILE_UNLOADGROUNDTEX); menuFile->addSeparator (); menuFile->addMenu ("Recent Models", menuRecentModels); menuFile->addSeparator (); menuFile->add ("Exit", IDC_FILE_EXIT); menuFile->setEnabled(IDC_FILE_LOADBACKGROUNDTEX, false); menuFile->setEnabled(IDC_FILE_LOADGROUNDTEX, false); menuFile->setEnabled(IDC_FILE_UNLOADGROUNDTEX, false); menuEdit->add( "&Undo\tCtrl+Z", IDC_EDIT_UNDO ); //menuFile->setEnabled( IDC_EDIT_UNDO, false ); menuEdit->add( "&Redo\tCtrl+Y", IDC_EDIT_REDO ); //menuFile->setEnabled( IDC_EDIT_REDO, false ); menuEdit->addSeparator(); menuEdit->add( "&Copy\tCtrl+C", IDC_EDIT_COPY ); menuEdit->add( "&Paste\tCtrl+V", IDC_EDIT_PASTE ); menuOptions->add ("Background Color...", IDC_OPTIONS_COLORBACKGROUND); menuOptions->add ("Ground Color...", IDC_OPTIONS_COLORGROUND); menuOptions->add ("Light Color...", IDC_OPTIONS_COLORLIGHT); menuOptions->addSeparator (); menuOptions->add ("Center View", IDC_OPTIONS_CENTERVIEW); menuOptions->add ("Center on Face", IDC_OPTIONS_CENTERONFACE ); #ifdef WIN32 menuOptions->addSeparator (); menuOptions->add ("Make Screenshot...", IDC_OPTIONS_MAKESCREENSHOT); //menuOptions->add ("Dump Model Info", IDC_OPTIONS_DUMP); #endif menuExpressions->add( "New...", IDC_EXPRESSIONS_NEW ); menuExpressions->addSeparator (); menuExpressions->add( "Load...", IDC_EXPRESSIONS_LOAD ); menuExpressions->add( "Save", IDC_EXPRESSIONS_SAVE ); menuExpressions->addSeparator (); menuExpressions->add( "Export to VFE", IDC_EXPRESSIONS_EXPORT ); menuExpressions->addSeparator (); menuExpressions->add( "Close class", IDC_EXPRESSIONS_CLOSE ); menuExpressions->add( "Close all classes", IDC_EXPRESSIONS_CLOSEALL ); menuExpressions->addSeparator(); menuExpressions->add( "Recreate all bitmaps", IDC_EXPRESSIONS_REDOBITMAPS ); menuChoreography->add( "New...", IDC_CHOREOSCENE_NEW ); menuChoreography->addSeparator(); menuChoreography->add( "Load...", IDC_CHOREOSCENE_LOAD ); menuChoreography->add( "Save", IDC_CHOREOSCENE_SAVE ); menuChoreography->add( "Save As...", IDC_CHOREOSCENE_SAVEAS ); menuChoreography->addSeparator(); menuChoreography->add( "Close", IDC_CHOREOSCENE_CLOSE ); menuChoreography->addSeparator(); menuChoreography->add( "Add Actor...", IDC_CHOREOSCENE_ADDACTOR ); #ifdef WIN32 menuHelp->add ("Goto Homepage...", IDC_HELP_GOTOHOMEPAGE); menuHelp->addSeparator (); #endif menuHelp->add ("About...", IDC_HELP_ABOUT); // create the Material System window Con_Printf( "Creating 3D View\n" ); g_pMatSysWindow = new MatSysWindow (workspace, 0, 0, 0, 0, "", mxWindow::Normal); Con_Printf( "Creating control panel\n" ); g_pControlPanel = new ControlPanel (workspace); Con_Printf( "Creating phoneme editor\n" ); g_pPhonemeEditor = new PhonemeEditor( workspace ); Con_Printf( "Creating expression tool\n" ); g_pExpressionTool = new ExpressionTool( workspace ); Con_Printf( "Creating gesture tool\n" ); g_pGestureTool = new GestureTool( workspace ); Con_Printf( "Creating ramp tool\n" ); g_pRampTool = new RampTool( workspace ); Con_Printf( "Creating scene ramp tool\n" ); g_pSceneRampTool = new SceneRampTool( workspace ); Con_Printf( "Creating expression tray\n" ); g_pExpressionTrayTool = new mxExpressionTray( workspace, IDC_EXPRESSIONTRAY ); Con_Printf( "Creating flex slider window\n" ); g_pFlexPanel = new FlexPanel( workspace ); Con_Printf( "Creating choreography view\n" ); g_pChoreoView = new CChoreoView( workspace, 200, 200, 400, 300, 0 ); // Choreo scene file drives main window title name g_pChoreoView->SetUseForMainWindowTitle( true ); Con_Printf( "IFacePoserToolWindow::Init\n" ); IFacePoserToolWindow::Init(); Con_Printf( "windowtab->Init\n" ); windowtab->Init(); Con_Printf( "loadRecentFiles\n" ); loadRecentFiles (); initRecentFiles (); Con_Printf( "LoadWindowPositions\n" ); LoadWindowPositions(); Con_Printf( "RestoreThumbnailSize\n" ); g_pExpressionTrayTool->RestoreThumbnailSize(); Con_Printf( "Add Tool Windows\n" ); int c = IFacePoserToolWindow::GetToolCount(); for ( i = 0; i < c ; i++ ) { IFacePoserToolWindow *tool = IFacePoserToolWindow::GetTool( i ); menuWindow->add( tool->GetToolName(), IDC_WINDOW_FIRSTTOOL + i ); } menuWindow->addSeparator(); menuWindow->add( "Cascade", IDC_WINDOW_CASCADE ); menuWindow->addSeparator(); menuWindow->add( "Tile", IDC_WINDOW_TILE ); menuWindow->add( "Tile Horizontally", IDC_WINDOW_TILE_HORIZ ); menuWindow->add( "Tile Vertically", IDC_WINDOW_TILE_VERT ); menuWindow->addSeparator(); menuWindow->add( "Hide All", IDC_WINDOW_HIDEALL ); menuWindow->add( "Show All", IDC_WINDOW_SHOWALL ); Con_Printf( "UpdateWindowMenu\n" ); UpdateWindowMenu(); m_nCurrentFrame = 0; Con_Printf( "gridsettings->Init()\n" ); gridsettings->Init(); Con_Printf( "Model viewer created\n" ); }