//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #include #include #include "resource.h" #include "GlobalEventProperties.h" #include "mdlviewer.h" #include "hlfaceposer.h" #include "choreoevent.h" #include "choreoscene.h" #include "expressions.h" #include "choreoactor.h" #include "ifaceposersound.h" #include "expclass.h" #include "scriplib.h" static CGlobalEventParams g_Params; static void ExtractAutoStateFromParams( CGlobalEventParams *params ) { ParseFromMemory( params->m_szAction, strlen( params->m_szAction ) ); params->m_bAutomate = false; if ( TokenAvailable() ) { GetToken( false ); params->m_bAutomate = !stricmp( token, "automate" ) ? true : false; } if ( params->m_bAutomate ) { params->m_szType[ 0 ] = 0; if ( TokenAvailable() ) { GetToken( false ); strcpy( params->m_szType, token ); } params->m_flWaitTime = 0.0f; if ( TokenAvailable() ) { GetToken( false ); params->m_flWaitTime = (float)atof( token ); } } } static void CreateAutoStateFromControls( CGlobalEventParams *params ) { if ( params->m_bAutomate ) { sprintf( params->m_szAction, "automate %s %f", params->m_szType, params->m_flWaitTime ); } else { sprintf( params->m_szAction, "noaction" ); } } //----------------------------------------------------------------------------- // Purpose: // Input : hwndDlg - // uMsg - // wParam - // lParam - // Output : static BOOL CALLBACK //----------------------------------------------------------------------------- static BOOL CALLBACK GlobalEventPropertiesDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch(uMsg) { case WM_INITDIALOG: { g_Params.PositionSelf( hwndDlg ); SetDlgItemText( hwndDlg, IDC_EVENTNAME, g_Params.m_szName ); SetDlgItemText( hwndDlg, IDC_STARTTIME, va( "%f", g_Params.m_flStartTime ) ); switch ( g_Params.m_nType ) { default: Assert(0); break; case CChoreoEvent::SECTION: { ShowWindow( GetDlgItem( hwndDlg, IDC_LOOPCOUNT ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_STATIC_LOOPCOUNT ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_LOOPTIME ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_STATIC_LOOPTIME ), SW_HIDE ); ExtractAutoStateFromParams( &g_Params ); } break; case CChoreoEvent::LOOP: { SendMessage( GetDlgItem( hwndDlg, IDC_LOOPCOUNT ), WM_SETTEXT , 0, (LPARAM)va( "%i", g_Params.m_nLoopCount ) ); SendMessage( GetDlgItem( hwndDlg, IDC_LOOPTIME ), WM_SETTEXT , 0, (LPARAM)va( "%f", g_Params.m_flLoopTime ) ); ShowWindow( GetDlgItem( hwndDlg, IDC_CB_AUTOACTION ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_DURATION ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_CHECK_AUTOCHECK ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_STATIC_AFTER ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_STATIC_SECONDS ), SW_HIDE ); } break; case CChoreoEvent::STOPPOINT: { ShowWindow( GetDlgItem( hwndDlg, IDC_LOOPCOUNT ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_STATIC_LOOPCOUNT ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_LOOPTIME ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_STATIC_LOOPTIME ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_CB_AUTOACTION ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_DURATION ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_CHECK_AUTOCHECK ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_STATIC_AFTER ), SW_HIDE ); ShowWindow( GetDlgItem( hwndDlg, IDC_STATIC_SECONDS ), SW_HIDE ); } break; } SendMessage( GetDlgItem( hwndDlg, IDC_CHECK_AUTOCHECK ), BM_SETCHECK, ( WPARAM ) g_Params.m_bAutomate ? BST_CHECKED : BST_UNCHECKED, ( LPARAM )0 ); SetDlgItemText( hwndDlg, IDC_DURATION, va( "%f", g_Params.m_flWaitTime ) ); SendMessage( GetDlgItem( hwndDlg, IDC_CB_AUTOACTION ), WM_SETTEXT , 0, (LPARAM)g_Params.m_szType ); // add text to combo box SendMessage( GetDlgItem( hwndDlg, IDC_CB_AUTOACTION ), CB_ADDSTRING, 0, (LPARAM)"Cancel" ); SendMessage( GetDlgItem( hwndDlg, IDC_CB_AUTOACTION ), CB_ADDSTRING, 0, (LPARAM)"Resume" ); SetWindowText( hwndDlg, g_Params.m_szDialogTitle ); SetFocus( GetDlgItem( hwndDlg, IDC_EVENTNAME ) ); } return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: { char szTime[ 32 ]; SendMessage( GetDlgItem( hwndDlg, IDC_CB_AUTOACTION ), WM_GETTEXT, (WPARAM)sizeof( g_Params.m_szType ), (LPARAM)g_Params.m_szType ); GetDlgItemText( hwndDlg, IDC_DURATION, szTime, sizeof( szTime ) ); g_Params.m_flWaitTime = atof( szTime ); g_Params.m_bAutomate = SendMessage( GetDlgItem( hwndDlg, IDC_CHECK_AUTOCHECK ), BM_GETCHECK, 0, 0 ) == BST_CHECKED ? true : false; CreateAutoStateFromControls( &g_Params ); GetDlgItemText( hwndDlg, IDC_EVENTNAME, g_Params.m_szName, sizeof( g_Params.m_szName ) ); GetDlgItemText( hwndDlg, IDC_STARTTIME, szTime, sizeof( szTime ) ); g_Params.m_flStartTime = atof( szTime ); char szLoop[ 32 ]; GetDlgItemText( hwndDlg, IDC_LOOPCOUNT, szLoop, sizeof( szLoop ) ); g_Params.m_nLoopCount = atoi( szLoop ); GetDlgItemText( hwndDlg, IDC_LOOPTIME, szLoop, sizeof( szLoop ) ); g_Params.m_flLoopTime = (float)atof( szLoop ); EndDialog( hwndDlg, 1 ); } break; case IDCANCEL: EndDialog( hwndDlg, 0 ); break; } return TRUE; } return FALSE; } //----------------------------------------------------------------------------- // Purpose: // Input : *view - // *actor - // Output : int //----------------------------------------------------------------------------- int GlobalEventProperties( CGlobalEventParams *params ) { g_Params = *params; int retval = DialogBox( (HINSTANCE)GetModuleHandle( 0 ), MAKEINTRESOURCE( IDD_GLOBALEVENTPROPERTIES ), (HWND)g_MDLViewer->getHandle(), (DLGPROC)GlobalEventPropertiesDialogProc ); *params = g_Params; return retval; }