#include "stdafx.h" #include "VectorProperty.h" #include "CameraEventProperty.h" #include "CommandSet.h" #include "ToolData.h" #include "RTCutSceneMakerFrame.h" #define DTRACE_NONE wxT("None") #define DTRACE_ACTOR wxT("Actor") //#define DTRACE_ACTOR_ONLY_TARGET wxT("Actor(Only CamTarget)") CCameraEventProperty::CCameraEventProperty( wxWindow* pParent, int id ) : IPropertyDelegate( pParent, id ), m_iMyEventInfoID( -1 ) { wxPGId CategoryID = m_pPropGrid->AppendCategory( wxT("Max Camera Property") ); m_pPropGrid->SetPropertyHelpString( CategoryID, wxT("Set Max Camera Property") ); m_aPGID[ CAMERA_NAME ] = m_pPropGrid->Append( wxStringProperty( wxT("Name"), wxPG_LABEL, wxT("") ) ); m_aPGID[ ID ] = m_pPropGrid->Append( wxUIntProperty( wxT("ID"), wxPG_LABEL, 0 ) ); m_aPGID[ IMPORT_FILE_PATH ] = m_pPropGrid->Append( wxFileProperty( wxT("Import File Name"), wxT("") ) ); m_pPropGrid->SetPropertyAttribute( m_aPGID[ IMPORT_FILE_PATH ], wxPG_FILE_WILDCARD, wxT("Camera Data File(*.cam)|*.cam") ); m_pPropGrid->SetPropertyAttribute( m_aPGID[ IMPORT_FILE_PATH ], wxPG_FILE_DIALOG_TITLE, wxT("Select Camera Data File") ); m_pPropGrid->SetPropertyAttribute( m_aPGID[ IMPORT_FILE_PATH ], wxPG_FILE_SHOW_FULL_PATH, 0 ); m_aPGID[ START_TIME ] = m_pPropGrid->Append( wxFloatProperty( wxT("Start Time" ), wxPG_LABEL, 0 ) ); m_aPGID[ SPEED ] = m_pPropGrid->Append( wxFloatProperty( wxT("Play Speed" ), wxPG_LABEL, 0.0f ) ); m_aPGID[ TIME_LENGTH ] = m_pPropGrid->Append( wxFloatProperty( wxT( "Length" ), wxPG_LABEL, 0 ) ); m_aPGID[ START_OFFSET ] = m_pPropGrid->Append( VectorProperty( wxT("Start Offset"), wxPG_LABEL, EtVector3( 0.0f, 0.0f, 0.0f ) ) ); m_pPropGrid->EnableProperty( m_aPGID[ ID ], false ); m_pPropGrid->EnableProperty( m_aPGID[ TIME_LENGTH ], false ); m_aPGID[ ACTOR_CATEGORY ] = m_pPropGrid->AppendCategory( wxT("Actor Show/Hide Property") ); } CCameraEventProperty::~CCameraEventProperty(void) { } void CCameraEventProperty::Initialize( void ) { } void CCameraEventProperty::OnShow( void ) { int iSelectedObjectID = TOOL_DATA.GetSelectedObjectID(); if( wxNOT_FOUND != iSelectedObjectID ) { _UpdateProp( iSelectedObjectID ); } } void CCameraEventProperty::_GetPropertyValue( EventInfo* pEventInfo ) { CamEventInfo* pCamEventInfo = static_cast(pEventInfo); wxCSConv MBConv( wxFONTENCODING_CP949 ); char caBuf[ 256 ]; wxString strTemp = m_pPropGrid->GetPropertyValueAsString( m_aPGID[ CAMERA_NAME ] ); ZeroMemory( caBuf, sizeof(caBuf) ); MBConv.WC2MB( caBuf, strTemp.c_str(), 256 ); pCamEventInfo->strEventName.assign( caBuf ); pCamEventInfo->iID = m_pPropGrid->GetPropertyValueAsInt( m_aPGID[ ID ] ); strTemp = m_pPropGrid->GetPropertyValueAsString( m_aPGID[ IMPORT_FILE_PATH ] ); ZeroMemory( caBuf, sizeof(caBuf) ); MBConv.WC2MB( caBuf, strTemp.c_str(), 256 ); if( strlen(caBuf) > 0 ) { CFileStream FileStream( caBuf ); if( FileStream.IsValid() ) { pCamEventInfo->pCameraData->Clear(); pCamEventInfo->pCameraData->LoadResource( &FileStream ); pCamEventInfo->strImportFilePath.assign( caBuf ); char caFileName[ MAX_PATH ]; char caFileExt[ 32 ]; _splitpath( pCamEventInfo->strImportFilePath.c_str(), NULL, NULL, caFileName, caFileExt ); pCamEventInfo->strImportFileName.assign( caFileName ); pCamEventInfo->strImportFileName.append( "." ); pCamEventInfo->strImportFileName.append( caFileExt ); } // ÆÄÀÏÀÌ ¾ø¾îµµ µ¥ÀÌÅÍ Å¬¸®¾îÇÏÁö ¸»ÀÚ. ºÒÆíÇÏ´Ù°í ÇØ¼­. ¤¾¤¾ //else //{ // // import ÇÑ Ä«¸Þ¶ó ÆÄÀÏÀÌ ÀÖ´ø À§Ä¡¿¡ ÆÄÀÏÀÌ ¾øÀ¸¹Ç·Î // // µ¥ÀÌÅʹ Ŭ¸®¾î ½Ã۰í,, ÆÄÀÏÀ» ´Ù½Ã import ÇØ´Þ¶ó°í ´ÙÀ̾ó·Î±×¸¦ ¶ç¿öÁØ´Ù. // wxString strMessage; // wxCSConv MBConv( wxFONTENCODING_CP949 ); // wxChar caWBuf[ 256 ]; // ZeroMemory( caWBuf, sizeof(caWBuf) ); // MBConv.MB2WC( caWBuf, pCamEventInfo->strImportFileName.c_str(), 256 ); // // strMessage.Printf( wxT("[%s] path can not found.\nRe-Import camera file."), caWBuf ); // wxMessageBox( strMessage, wxT("Warnning"), wxCENTRE | wxICON_ERROR ); // pCamEventInfo->strImportFilePath.clear(); // pCamEventInfo->strImportFileName.clear(); // pCamEventInfo->pCameraData->Clear(); //} } else { pCamEventInfo->strImportFilePath.clear(); pCamEventInfo->strImportFileName.clear(); pCamEventInfo->pCameraData->Clear(); } float fStartTime = m_pPropGrid->GetPropertyValueAsDouble( m_aPGID[ START_TIME ] ); pCamEventInfo->fStartTime = fStartTime; pCamEventInfo->fSpeed = (float)m_pPropGrid->GetPropertyValueAsDouble( m_aPGID[ SPEED ] ); if( pCamEventInfo->fSpeed <= 0.0f ) pCamEventInfo->fSpeed = 0.1f; float fTimeLength = m_pPropGrid->GetPropertyValueAsDouble( m_aPGID[ TIME_LENGTH ] ); pCamEventInfo->fTimeLength = fTimeLength; wxVariant value = m_pPropGrid->GetPropertyValue( m_aPGID[ START_OFFSET ] ); wxVariantData_EtVector3* pData = static_cast(value.GetData()); const EtVector3 vPos = pData->GetValue(); pCamEventInfo->vCamStartOffset = vPos; pCamEventInfo->fUnit = 10.0f; // ¾×Å͵éÀÇ show/hide ¿©ºÎ // º¯°æ»çÇ× Ã¼Å©Çϸ鼭 ÇÁ·ÎÆÛƼ ±×¸®µå¿¡ ¹Ý¿µÇØÁØ´Ù. // ¿ì¼± ºüÁø ¾×ÅÍµé ¸ÕÀú Á¦°ÅÇÑ´Ù. wxChar caWBuf[ 256 ]; map::iterator iter = pCamEventInfo->mapActorsShowHide.begin(); for( iter; iter != pCamEventInfo->mapActorsShowHide.end(); ++iter ) { ZeroMemory( caWBuf, sizeof(caWBuf) ); MBConv.MB2WC( caWBuf, iter->first.c_str(), 256 ); wxPGId PGId = m_pPropGrid->GetPropertyByName( caWBuf ); if( false == PGId.IsOk() ) iter = pCamEventInfo->mapActorsShowHide.erase( iter ); } // »õ·Î Ãß°¡µÈ ¾×Å͵éÀº Ãß°¡ÇÏ°í ±âÁ¸ÀÇ ¾×Å͵éÀº µ¥ÀÌÅ͸¦ ¼ÂÆÃÇØÁØ´Ù. int iNumActors = TOOL_DATA.GetNumActors(); char acBuf[ 256 ]; for( int iActor = 0; iActor < iNumActors; ++iActor ) { wxString strActorName; TOOL_DATA.GetActorNameByIndex( iActor, strActorName ); ZeroMemory( acBuf, sizeof(acBuf) ); MBConv.WC2MB( acBuf, strActorName.c_str(), 256 ); const char* pActorName = acBuf; bool bShow = m_pPropGrid->GetPropertyValueAsBool( strActorName ); map::iterator iter = pCamEventInfo->mapActorsShowHide.find( pActorName ); if( pCamEventInfo->mapActorsShowHide.end() == iter ) pCamEventInfo->mapActorsShowHide.insert( make_pair(string(pActorName), bShow) ); else iter->second= bShow; } //// µî·ÏµÈ ¾×Å͵éÀÇ À̸§À¸·Î show/hide ¿©ºÎ¸¦ ¾ò¾î¿Â´Ù //int iNumActors = TOOL_DATA.GetNumActors(); //char acBuf[ 256 ]; //for( int iActor = 0; iActor < iNumActors; ++iActor ) //{ // wxString strActorName; // TOOL_DATA.GetActorNameByIndex( iActor, strActorName ); // ZeroMemory( acBuf, sizeof(acBuf) ); // MBConv.WC2MB( acBuf, strActorName.c_str(), 256 ); // const char* pActorName = acBuf; // map::iterator iter = pCamEventInfo->mapActorsShowHide.find( pActorName ); // _ASSERT( pCamEventInfo->mapActorsShowHide.end() != iter ); // iter->second = m_pPropGrid->GetPropertyValueAsBool( strActorName ); //} } void CCameraEventProperty::OnPropertyChanged( wxPropertyGridEvent& PGEvent ) { const EventInfo* pCamEventInfo = TOOL_DATA.GetEventInfoByID( m_iMyEventInfoID ); EventInfo* pNewCamEventInfo = pCamEventInfo->clone(); _GetPropertyValue( pNewCamEventInfo ); CEventPropChange EventChange( &TOOL_DATA, pNewCamEventInfo ); TOOL_DATA.RunCommand( &EventChange ); delete pNewCamEventInfo; } void CCameraEventProperty::_UpdateProp( int iEventInfoID ) { if( wxNOT_FOUND != iEventInfoID ) { EventInfo* pEventInfo = const_cast(TOOL_DATA.GetEventInfoByID( iEventInfoID )); CamEventInfo* pCamEventInfo = static_cast(pEventInfo); wxCSConv MBConv( wxFONTENCODING_CP949 ); wxChar caWBuf[ 256 ]; ZeroMemory( caWBuf, sizeof(caWBuf) ); MBConv.MB2WC( caWBuf, pCamEventInfo->strEventName.c_str(), 256 ); m_pPropGrid->SetPropertyValueString( m_aPGID[ CAMERA_NAME ], caWBuf ); m_pPropGrid->SetPropertyValueLong( m_aPGID[ ID ], pEventInfo->iID ); ZeroMemory( caWBuf, sizeof(caWBuf) ); MBConv.MB2WC( caWBuf, pCamEventInfo->strImportFilePath.c_str(), 256 ); m_pPropGrid->SetPropertyValueString( m_aPGID[ IMPORT_FILE_PATH ], caWBuf ); m_pPropGrid->SetPropertyValueDouble( m_aPGID[ START_TIME ], pEventInfo->fStartTime ); m_pPropGrid->SetPropertyValue( m_aPGID[ SPEED ], pEventInfo->fSpeed ); if( false == pCamEventInfo->strImportFilePath.empty() ) pEventInfo->fTimeLength = pCamEventInfo->pCameraData->m_Header.nFrame / pCamEventInfo->fSpeed; else pEventInfo->fTimeLength = 0.0f; m_pPropGrid->SetPropertyValueDouble( m_aPGID[ TIME_LENGTH ], pCamEventInfo->fTimeLength ); m_pPropGrid->EnableProperty( m_aPGID[ TIME_LENGTH ], false ); wxVariantData_EtVector3* pDestData = new wxVariantData_EtVector3(pCamEventInfo->vCamStartOffset); wxVariant StartOffsetValue( pDestData, wxT("EtVector3") ); m_pPropGrid->SetPropertyValue( m_aPGID[ START_OFFSET ], StartOffsetValue ); // ¾×Å͸®½ºÆ® ¸ðµÎ Á¦°Å.. À̰Š¾È¸Ô³× //m_pPropGrid->Delete( m_aPGID[ ACTOR_CATEGORY ] ); int iNumRenderActors = (int)m_vlRenderingActors.size(); for( int iActor = 0; iActor < iNumRenderActors; ++iActor ) { wxString& strActorName = m_vlRenderingActors.at( iActor ); m_pPropGrid->Delete( strActorName ); } m_vlRenderingActors.clear(); // ÇöÀç »ç¿ëÇÏ´Â ¾×Å͵éÀ» ¸ðµÎ Ãß°¡ int iNumActors = TOOL_DATA.GetNumActors(); for( int iActor = 0; iActor < iNumActors; ++iActor ) { wxString strActorName; TOOL_DATA.GetActorNameByIndex( iActor, strActorName ); // µðÆúÆ®´Â true °ªÀÓ m_pPropGrid->Append( wxBoolProperty( strActorName, wxPG_LABEL, true ) ); m_pPropGrid->SetPropertyAttribute( strActorName, wxPG_BOOL_USE_CHECKBOX, true ); m_vlRenderingActors.push_back( strActorName ); } // ¾×Å͵éÀÇ show/hide ¿©ºÎ µ¥ÀÌÅͷκÎÅÍ ¹Ý¿µ map::iterator iter = pCamEventInfo->mapActorsShowHide.begin(); for( iter; iter != pCamEventInfo->mapActorsShowHide.end(); ++iter ) { ZeroMemory( caWBuf, sizeof(caWBuf) ); MBConv.MB2WC( caWBuf, iter->first.c_str(), 256 ); m_pPropGrid->SetPropertyValueBool( caWBuf, iter->second ); } //// »õ·Î Ãß°¡µÈ ¾×Å͵éÀ» Ãß°¡ÇÑ´Ù. µðÆúÆ® °ªÀº show ÀÓ //int iNumActors = TOOL_DATA.GetNumActors(); //char acBuf[ 256 ]; //for( int iActor = 0; iActor < iNumActors; ++iActor ) //{ // wxString strActorName; // TOOL_DATA.GetActorNameByIndex( iActor, strActorName ); // ZeroMemory( acBuf, sizeof(acBuf) ); // MBConv.WC2MB( acBuf, strActorName.c_str(), 256 ); // const char* pActorName = acBuf; // map::iterator iter = pCamEventInfo->mapActorsShowHide.find( pActorName ); // if( pCamEventInfo->mapActorsShowHide.end() == iter ) // { // m_pPropGrid->Append( wxBoolProperty( strActorName, wxPG_LABEL, true ) ); // m_pPropGrid->SetPropertyAttribute( strActorName, wxPG_BOOL_USE_CHECKBOX, true ); // pCamEventInfo->mapActorsShowHide.insert( make_pair(string(pActorName), true) ); // µðÆúÆ®´Â show ÀÓ. // } //} m_iMyEventInfoID = pEventInfo->iID; } } void CCameraEventProperty::ClearTempData( void ) { m_iMyEventInfoID = -1; } void CCameraEventProperty::CommandPerformed( ICommand* pCommand ) { // ÀÚ½ÅÀÇ id °¡ »ç¶óÁö¸é ¼û±ä´Ù. const EventInfo* pMyEventInfo = TOOL_DATA.GetEventInfoByID( m_iMyEventInfoID ); if( NULL == pMyEventInfo ) { m_pPropGrid->Show( false ); } else { switch( pCommand->GetTypeID() ) { case CMD_UPDATE_VIEW: _UpdateProp( m_iMyEventInfoID ); break; case CMD_EVENT_PROP_CHANGE: _UpdateProp( m_iMyEventInfoID ); break; // ¾×ÅͰ¡ Ãß°¡µÈ °æ¿ì ¾×ÅÍ ¸®½ºÆ®¸¦ ¾÷µ¥ÀÌÆ® case CMD_REGISTER_RES: _UpdateProp( m_iMyEventInfoID ); break; } } }