📄 mdlviewer.cpp
字号:
filename = mxGetOpenFileName(
this,
FacePoser_MakeWindowsSlashes( va( "%s/expressions/", GetGameDirectory() ) ),
"*.txt" );
if ( filename && filename[ 0 ] )
{
expressions->LoadClass( filename );
}
}
break;
case IDC_EXPRESSIONS_SAVE:
{
CExpClass *active = expressions->GetActiveClass();
if ( active )
{
active->Save();
active->Export();
}
}
break;
case IDC_EXPRESSIONS_EXPORT:
{
CExpClass *active = expressions->GetActiveClass();
if ( active )
{
active->Export();
}
}
break;
case IDC_EXPRESSIONS_CLOSE:
g_pControlPanel->Close();
break;
case IDC_EXPRESSIONS_CLOSEALL:
g_pControlPanel->Closeall();
break;
case IDC_CHOREOSCENE_NEW:
g_pChoreoView->New();
break;
case IDC_CHOREOSCENE_LOAD:
g_pChoreoView->Load();
break;
case IDC_CHOREOSCENE_SAVE:
g_pChoreoView->Save();
break;
case IDC_CHOREOSCENE_SAVEAS:
g_pChoreoView->SaveAs();
break;
case IDC_CHOREOSCENE_CLOSE:
g_pChoreoView->Close();
break;
case IDC_CHOREOSCENE_ADDACTOR:
g_pChoreoView->NewActor();
break;
case IDC_WINDOW_TILE:
{
OnTile();
}
break;
case IDC_WINDOW_TILE_HORIZ:
{
OnTileHorizontally();
}
break;
case IDC_WINDOW_TILE_VERT:
{
OnTileVertically();
}
break;
case IDC_WINDOW_CASCADE:
{
OnCascade();
}
break;
case IDC_WINDOW_HIDEALL:
{
OnHideAll();
}
break;
case IDC_WINDOW_SHOWALL:
{
OnShowAll();
}
break;
default:
{
iret = 0;
int tool_number = event->action - IDC_WINDOW_FIRSTTOOL;
int max_tools = IDC_WINDOW_LASTTOOL - IDC_WINDOW_FIRSTTOOL;
if ( tool_number >= 0 &&
tool_number <= max_tools &&
tool_number < IFacePoserToolWindow::GetToolCount() )
{
iret = 1;
IFacePoserToolWindow *tool = IFacePoserToolWindow::GetTool( tool_number );
if ( tool )
{
mxWindow *toolw = tool->GetMxWindow();
bool wasvisible = toolw->isVisible();
toolw->setVisible( !wasvisible );
g_MDLViewer->UpdateWindowMenu();
}
}
}
break;
} //switch (event->action)
} // mxEvent::Action
break;
case KeyDown:
{
g_pMatSysWindow->handleEvent(event);
iret = 1;
}
break;
case mxEvent::Activate:
{
if (event->action)
{
mx::setIdleWindow( g_pMatSysWindow );
}
else
{
mx::setIdleWindow( 0 );
}
iret = 1;
}
break;
} // event->event
return iret;
}
void MDLViewer::SaveWindowPositions( void )
{
// Save the model viewer position
SavePosition();
int c = IFacePoserToolWindow::GetToolCount();
for ( int i = 0; i < c; i++ )
{
IFacePoserToolWindow *w = IFacePoserToolWindow::GetTool( i );
w->SavePosition();
}
}
void MDLViewer::LoadWindowPositions( void )
{
// NOTE: Don't do this here, we do the mdlviewer position earlier in startup
// LoadPosition();
int w = this->w();
int h = this->h();
g_viewerSettings.width = w;
g_viewerSettings.height = h;
int c = IFacePoserToolWindow::GetToolCount();
for ( int i = 0; i < c; i++ )
{
IFacePoserToolWindow *w = IFacePoserToolWindow::GetTool( i );
w->LoadPosition();
}
}
void
MDLViewer::redraw ()
{
}
void MDLViewer::Paste( void )
{
g_pControlPanel->Paste();
}
void MDLViewer::Copy( void )
{
g_pControlPanel->Copy();
}
void MDLViewer::Undo( void )
{
g_pControlPanel->Undo();
}
void MDLViewer::Redo( void )
{
g_pControlPanel->Redo();
}
int MDLViewer::GetCurrentFrame( void )
{
return m_nCurrentFrame;
}
void MDLViewer::Think( float dt )
{
++m_nCurrentFrame;
// Iterate across tools
IFacePoserToolWindow::ToolThink( dt );
sound->Update( dt );
}
static int CountVisibleTools( void )
{
int i;
int c = IFacePoserToolWindow::GetToolCount();
int viscount = 0;
for ( i = 0; i < c; i++ )
{
IFacePoserToolWindow *tool = IFacePoserToolWindow::GetTool( i );
mxWindow *w = tool->GetMxWindow();
if ( !w->isVisible() )
continue;
viscount++;
}
return viscount;
}
void MDLViewer::OnCascade()
{
int i;
int c = IFacePoserToolWindow::GetToolCount();
int viscount = CountVisibleTools();
int x = 0, y = 0;
int offset = 20;
int wide = workspace->w2() - viscount * offset;
int tall = ( workspace->h2() - viscount * offset ) / 2;
for ( i = 0; i < c; i++ )
{
IFacePoserToolWindow *tool = IFacePoserToolWindow::GetTool( i );
mxWindow *w = tool->GetMxWindow();
if ( !w->isVisible() )
continue;
w->setBounds( x, y, wide, tall );
x += offset;
y += offset;
}
}
void MDLViewer::OnTile()
{
int c = CountVisibleTools();
int rows = (int)sqrt( c );
rows = clamp( rows, 1, rows );
int cols = 1;
while ( rows * cols < c )
{
cols++;
}
DoTile( rows, cols );
}
void MDLViewer::OnTileHorizontally()
{
int c = CountVisibleTools();
DoTile( c, 1 );
}
void MDLViewer::OnTileVertically()
{
int c = CountVisibleTools();
DoTile( 1, c );
}
void MDLViewer::OnHideAll()
{
int c = IFacePoserToolWindow::GetToolCount();
for ( int i = 0; i < c; i++ )
{
IFacePoserToolWindow *tool = IFacePoserToolWindow::GetTool( i );
mxWindow *w = tool->GetMxWindow();
w->setVisible( false );
}
UpdateWindowMenu();
}
void MDLViewer::OnShowAll()
{
int c = IFacePoserToolWindow::GetToolCount();
for ( int i = 0; i < c; i++ )
{
IFacePoserToolWindow *tool = IFacePoserToolWindow::GetTool( i );
mxWindow *w = tool->GetMxWindow();
w->setVisible( true );
}
UpdateWindowMenu();
}
void MDLViewer::DoTile( int x, int y )
{
int c = IFacePoserToolWindow::GetToolCount();
int vis = CountVisibleTools();
if ( x < 1 )
x = 1;
if ( y < 1 )
y = 1;
int wide = workspace->w2() / y;
int tall = workspace->h2() / x;
int obj = 0;
for ( int row = 0 ; row < x ; row++ )
{
for ( int col = 0; col < y; col++ )
{
bool found = false;
while ( 1 )
{
if ( obj >= c )
break;
IFacePoserToolWindow *tool = IFacePoserToolWindow::GetTool( obj++ );
mxWindow *w = tool->GetMxWindow();
if ( w->isVisible() )
{
w->setBounds( col * wide, row * tall, wide, tall );
found = true;
break;
}
}
if ( !found )
break;
}
}
}
//-----------------------------------------------------------------------------
// Purpose: Not used by faceposer
// Output : int
//-----------------------------------------------------------------------------
int MDLViewer::GetCurrentHitboxSet(void)
{
return 0;
}
//-----------------------------------------------------------------------------
// Purpose:
// Output : Returns true on success, false on failure.
//-----------------------------------------------------------------------------
bool MDLViewer::PaintBackground( void )
{
CChoreoWidgetDrawHelper drawHelper( this );
RECT rc;
drawHelper.GetClientRect( rc );
drawHelper.DrawFilledRect( COLOR_CHOREO_BACKGROUND, rc );
return false;
}
SpewRetval_t HLFacePoserSpewFunc( SpewType_t spewType, char const *pMsg )
{
switch (spewType)
{
case SPEW_ERROR:
MessageBox(NULL, pMsg, "FATAL ERROR", MB_OK);
return SPEW_ABORT;
case SPEW_LOG:
return SPEW_CONTINUE;
case SPEW_WARNING:
Con_ColorPrintf( ERROR_R, ERROR_G, ERROR_B, pMsg );
return SPEW_CONTINUE;
default:
Con_Printf(pMsg);
#ifdef _DEBUG
return spewType == SPEW_ASSERT ? SPEW_DEBUGGER : SPEW_CONTINUE;
#else
return SPEW_CONTINUE;
#endif
}
}
char cmdline[1024] = "";
main (int argc, char *argv[])
{
int i;
CommandLine()->CreateCmdLine( argc, argv );
SpewOutputFunc( HLFacePoserSpewFunc );
MathLib_Init( 2.2f, 2.2f, 0.0f, 2.0f );
CoInitialize(NULL);
// make sure, we start in the right directory
char szName[256];
strcpy (szName, mx::getApplicationPath() );
mx::init (argc, argv);
sound->Init();
FileSystem_Init( true );
filesystem = (IFileSystem *)(FileSystem_GetFactory()( FILESYSTEM_INTERFACE_VERSION, NULL ));
if ( !filesystem )
{
AssertMsg( 0, "Failed to create/get IFileSystem" );
return 1;
}
char workingdir[ 256 ];
workingdir[0] = 0;
Q_getwd( workingdir );
// If they didn't specify -game on the command line, use VPROJECT.
CmdLib_InitFileSystem( workingdir, true );
IFacePoserToolWindow::EnableToolRedraw( false );
new MDLViewer ();
g_MDLViewer->setMenuBar (g_MDLViewer->getMenuBar ());
g_pStudioModel->Init();
bool modelloaded = false;
for ( i = 1; i < CommandLine()->ParmCount(); i++ )
{
if ( Q_stristr (CommandLine()->GetParm( i ), ".mdl") )
{
modelloaded = true;
g_MDLViewer->LoadModelFile( CommandLine()->GetParm( i ) );
break;
}
}
models->LoadModelList();
if ( models->Count() == 0 )
{
g_pFlexPanel->initFlexes( );
}
// Load expressions from last time
int files = workspacefiles->GetNumStoredFiles( IWorkspaceFiles::EXPRESSION );
for ( i = 0; i < files; i++ )
{
expressions->LoadClass( workspacefiles->GetStoredFile( IWorkspaceFiles::EXPRESSION, i ) );
}
IFacePoserToolWindow::EnableToolRedraw( true );
int retval = mx::run();
soundemitter->BaseShutdown();
if (g_pStudioModel)
{
g_pStudioModel->Shutdown();
g_pStudioModel = NULL;
}
if (g_pMaterialSystem)
{
g_pMaterialSystem->Shutdown();
g_pMaterialSystem = NULL;
}
FileSystem_Term();
CoUninitialize();
return retval;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -