DragonNest/Client/EtCutSceneTool/CameraEventProperty.cpp

340 lines
11 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#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<CamEventInfo*>(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 );
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD>ϴٰ<CFB4> <20>ؼ<EFBFBD>. <20><><EFBFBD><EFBFBD>
//else
//{
// // import <20><> ī<>޶<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>
// // <20><><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>Ű<EFBFBD><C5B0>,, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> import <20>ش޶<D8B4><DEB6><EFBFBD> <20><><EFBFBD>̾<EFBFBD><CCBE>α׸<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
// 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<wxVariantData_EtVector3*>(value.GetData());
const EtVector3 vPos = pData->GetValue();
pCamEventInfo->vCamStartOffset = vPos;
pCamEventInfo->fUnit = 10.0f;
// <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD> show/hide <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>ϸ鼭 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ <20>׸<EFBFBD><D7B8><20>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD>ش<EFBFBD>.
// <20><20><><EFBFBD><EFBFBD> <20><><EFBFBD>͵<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
wxChar caWBuf[ 256 ];
map<string, bool>::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 );
}
// <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD> <20>߰<EFBFBD><DFB0>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
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<string, bool>::iterator iter = pCamEventInfo->mapActorsShowHide.find( pActorName );
if( pCamEventInfo->mapActorsShowHide.end() == iter )
pCamEventInfo->mapActorsShowHide.insert( make_pair(string(pActorName), bShow) );
else
iter->second= bShow;
}
//// <20><><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD><EFBFBD><EFBFBD> show/hide <20><><EFBFBD>θ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>
//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<string, bool>::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<EventInfo*>(TOOL_DATA.GetEventInfoByID( iEventInfoID ));
CamEventInfo* pCamEventInfo = static_cast<CamEventInfo*>(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 );
// <20><><EFBFBD>͸<EFBFBD><CDB8><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.. <20>̰<EFBFBD> <20>ȸԳ<C8B8>
//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();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
int iNumActors = TOOL_DATA.GetNumActors();
for( int iActor = 0; iActor < iNumActors; ++iActor )
{
wxString strActorName;
TOOL_DATA.GetActorNameByIndex( iActor, strActorName );
// <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> true <20><><EFBFBD><EFBFBD>
m_pPropGrid->Append( wxBoolProperty( strActorName, wxPG_LABEL, true ) );
m_pPropGrid->SetPropertyAttribute( strActorName, wxPG_BOOL_USE_CHECKBOX, true );
m_vlRenderingActors.push_back( strActorName );
}
// <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD> show/hide <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ͷκ<CDB7><CEBA><EFBFBD> <20>ݿ<EFBFBD>
map<string, bool>::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 );
}
//// <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> show <20><>
//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<string, bool>::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) ); // <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> show <20><>.
// }
//}
m_iMyEventInfoID = pEventInfo->iID;
}
}
void CCameraEventProperty::ClearTempData( void )
{
m_iMyEventInfoID = -1;
}
void CCameraEventProperty::CommandPerformed( ICommand* pCommand )
{
// <20>ڽ<EFBFBD><DABD><EFBFBD> id <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
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;
// <20><><EFBFBD>Ͱ<EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
case CMD_REGISTER_RES:
_UpdateProp( m_iMyEventInfoID );
break;
}
}
}