DragonNest/Client/EtCutSceneTool/cwxEventTimeLinePanel.cpp
2024-12-19 09:48:26 +08:00

1035 lines
No EOL
31 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "StdAfx.h"
#include <wx/wx.h>
#include "cwxEventTimeLinePanel.h"
#include "cwxTimeLineCtrl.h"
#include "ToolData.h"
#include "RTCutSceneMakerFrame.h"
#include "CommandSet.h"
#include "cwxPropertyPanel.h"
#include "RTCutSceneRenderer.h"
BEGIN_EVENT_TABLE( cwxEventTimeLinePanel, wxPanel )
EVT_MOUSE_EVENTS( cwxEventTimeLinePanel::OnMouseEvent )
EVT_MENU( POPUP_INSERT_CAM_EVENT, cwxEventTimeLinePanel::OnMenuInsertCamEvent )
EVT_MENU( POPUP_INSERT_PARTICLE_EVENT, cwxEventTimeLinePanel::OnMenuInsertParticleEvent )
EVT_MENU( POPUP_INSERT_DOF, cwxEventTimeLinePanel::OnMenuInsertDOFEvent )
//EVT_MENU( POPUP_INSERT_SOUND_EVENT, cwxEventTimeLinePanel::OnMenuInsertSoundEvent )
EVT_MENU( POPUP_INSERT_FADE_EVENT, cwxEventTimeLinePanel::OnMenuInsertFadeEvent )
EVT_MENU( POPUP_INSERT_PROP_EVENT, cwxEventTimeLinePanel::OnMenuInsertPropEvent )
EVT_MENU( POPUP_INSERT_SOUND_1_EVENT, cwxEventTimeLinePanel::OnMenuInsertSoundEvent )
EVT_MENU( POPUP_INSERT_SOUND_2_EVENT, cwxEventTimeLinePanel::OnMenuInsertSoundEvent )
EVT_MENU( POPUP_INSERT_SOUND_3_EVENT, cwxEventTimeLinePanel::OnMenuInsertSoundEvent )
EVT_MENU( POPUP_INSERT_SOUND_4_EVENT, cwxEventTimeLinePanel::OnMenuInsertSoundEvent )
EVT_MENU( POPUP_INSERT_SOUND_5_EVENT, cwxEventTimeLinePanel::OnMenuInsertSoundEvent )
EVT_MENU( POPUP_INSERT_SOUND_6_EVENT, cwxEventTimeLinePanel::OnMenuInsertSoundEvent )
EVT_MENU( POPUP_INSERT_SOUND_7_EVENT, cwxEventTimeLinePanel::OnMenuInsertSoundEvent )
EVT_MENU( POPUP_INSERT_SOUND_8_EVENT, cwxEventTimeLinePanel::OnMenuInsertSoundEvent )
EVT_MENU( POPUP_INSERT_SUBTITLE_EVENT, cwxEventTimeLinePanel::OnMenuInsertSubtitleEvent )
EVT_MENU( POPUP_REMOVE_EVENT, cwxEventTimeLinePanel::OnMenuRemoveEvent )
EVT_MENU( POPUP_SNAP_EVENT, cwxEventTimeLinePanel::OnMenuSnapEvent )
EVT_MENU( POPUP_SELECT_PARTICLE, cwxEventTimeLinePanel::OnMenuSelectParticleEvent )
EVT_MENU( POPUP_UNSELECT_PARTICLE, cwxEventTimeLinePanel::OnMenuUnSelectParticleEvent )
#ifdef PRE_ADD_FILTEREVENT
EVT_MENU( POPUP_INSERT_COLORFILTER_EVENT, cwxEventTimeLinePanel::OnMenuInsertColorFilterEvent )
#endif // PRE_ADD_FILTEREVENT
EVT_TIMELINE_ACTION_SELECT( EVENT_TIMELINE_ID, cwxEventTimeLinePanel::OnTLObjectSelect )
EVT_TIMELINE_ACTION_MOVE( EVENT_TIMELINE_ID, cwxEventTimeLinePanel::OnTLObjectMove )
EVT_TIMELINE_ACTION_RESIZE( EVENT_TIMELINE_ID, cwxEventTimeLinePanel::OnTLObjectResize )
EVT_TIMELINE_AXIS_EVENT( EVENT_TIMELINE_ID, cwxEventTimeLinePanel::OnTLAxisEvent )
END_EVENT_TABLE()
cwxEventTimeLinePanel::cwxEventTimeLinePanel( wxWindow* pParent, wxWindowID id /* = -1 */ ) : wxPanel( pParent, id ),
m_pTimeLine( NULL ),
m_iOriEditMode( CToolData::EM_EDIT ),
m_dwNowTime( 0 )
{
m_pTimeLine = new cwxTimeLineCtrl( this, EVENT_TIMELINE_ID );
m_pTopSizer = new wxBoxSizer( wxVERTICAL );
m_pTopSizer->Add( m_pTimeLine, 1, wxALL|wxALIGN_CENTER|wxEXPAND, 2 );
this->SetSizer( m_pTopSizer );
m_pTopSizer->Fit( this );
m_pTopSizer->SetSizeHints( this );
// <20>̺<EFBFBD>Ʈ Ÿ<>Ժ<EFBFBD><D4BA><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>д<EFBFBD>.
m_astrEventObjectNameByType.Add( wxT("Camera") );
m_astrEventObjectNameByType.Add( wxT("Particle") );
m_astrEventObjectNameByType.Add( wxT("DOF") );
m_astrEventObjectNameByType.Add( wxT("Fade") );
m_astrEventObjectNameByType.Add( wxT("Prop") );
m_astrEventObjectNameByType.Add( wxT("Sound_1") );
m_astrEventObjectNameByType.Add( wxT("Sound_2") );
m_astrEventObjectNameByType.Add( wxT("Sound_3") );
m_astrEventObjectNameByType.Add( wxT("Sound_4") );
m_astrEventObjectNameByType.Add( wxT("Sound_5") );
m_astrEventObjectNameByType.Add( wxT("Sound_6") );
m_astrEventObjectNameByType.Add( wxT("Sound_7") );
m_astrEventObjectNameByType.Add( wxT("Sound_8") );
m_astrEventObjectNameByType.Add( wxT("Subtitle") );
m_astrEventObjectNameByType.Add( wxT("Image") );
#ifdef PRE_ADD_FILTEREVENT
m_astrEventObjectNameByType.Add( wxT("ColorFilter") );
#endif // PRE_ADD_FILTEREVENT
assert( m_astrEventObjectNameByType.size() == EventInfo::TYPE_COUNT && "Ÿ<EFBFBD><EFBFBD> ī<><C4AB>Ʈ<EFBFBD><C6AE> <20>°<EFBFBD> <20><><EFBFBD>ڿ<EFBFBD> <20><EFBFBD><E8BFAD> ä<><C3A4><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>~" );
TOOL_DATA.SetEventTLPanel( this );
m_pTimeLine->SetViewScale( 6.0f );
}
cwxEventTimeLinePanel::~cwxEventTimeLinePanel(void)
{
}
void cwxEventTimeLinePanel::_PopupContextMenu( int iXPos, int iYPos )
{
wxMenu Menu;
int iSelected = m_pTimeLine->GetSelectedObjectID();
if( wxNOT_FOUND != iSelected )
{
int iUseType = m_pTimeLine->GetSelectedObjectUseType();
switch( iUseType )
{
case CToolData::MAX_CAMERA:
break;
case CToolData::PARTICLE:
{
CRTCutSceneRenderer* pRenderer = TOOL_DATA.GetRenderer();
if( IRenderBase::SO_PARTICLE == pRenderer->GetSelectedObjectType() &&
pRenderer->IsObjectSelected() )
Menu.Append( POPUP_UNSELECT_PARTICLE, wxT("&UnSelect") );
else
Menu.Append( POPUP_SELECT_PARTICLE, wxT("&Select") );
}
break;
//case CToolData::SOUND:
// break;
case CToolData::FADE:
break;
case CToolData::DOF:
break;
case CToolData::PROP:
break;
case CToolData::SOUND_1:
case CToolData::SOUND_2:
case CToolData::SOUND_3:
case CToolData::SOUND_4:
case CToolData::SOUND_5:
case CToolData::SOUND_6:
case CToolData::SOUND_7:
case CToolData::SOUND_8:
break;
case CToolData::SUBTITLE:
break;
//PRE_ADD_FILTEREVENT
case CToolData::COLORFILTER:
break;
//
}
Menu.Append( POPUP_REMOVE_EVENT, wxT("&Remove") );
}
else
{
Menu.Append( POPUP_INSERT_CAM_EVENT, wxT("Insert &Camera Event") );
Menu.Append( POPUP_INSERT_PROP_EVENT, wxT("Insert P&rop Event") );
Menu.Append( POPUP_INSERT_PARTICLE_EVENT, wxT("Insert &Particle Event") );
//Menu.Append( POPUP_INSERT_SOUND_EVENT, wxT("Insert &Sound Event") );
Menu.Append( POPUP_INSERT_DOF, wxT("Insert &DOF Event") );
Menu.Append( POPUP_INSERT_FADE_EVENT, wxT("Insert &Fade Event") );
Menu.Append( POPUP_INSERT_SOUND_1_EVENT, wxT("Insert &Sound_1 Event") );
Menu.Append( POPUP_INSERT_SOUND_2_EVENT, wxT("Insert &Sound_2 Event") );
Menu.Append( POPUP_INSERT_SOUND_3_EVENT, wxT("Insert &Sound_3 Event") );
Menu.Append( POPUP_INSERT_SOUND_4_EVENT, wxT("Insert &Sound_4 Event") );
Menu.Append( POPUP_INSERT_SOUND_5_EVENT, wxT("Insert &Sound_5 Event") );
Menu.Append( POPUP_INSERT_SOUND_6_EVENT, wxT("Insert &Sound_6 Event") );
Menu.Append( POPUP_INSERT_SOUND_7_EVENT, wxT("Insert &Sound_7 Event") );
Menu.Append( POPUP_INSERT_SOUND_8_EVENT, wxT("Insert &Sound_8 Event") );
Menu.Append( POPUP_INSERT_SUBTITLE_EVENT, wxT("Insert S&ubtitle Event") );
//#ifdef PRE_ADD_FILTEREVENT
Menu.Append( POPUP_INSERT_COLORFILTER_EVENT, wxT("Insert S&ColorFilter Event") );
//#endif // PRE_ADD_FILTEREVENT
}
Menu.AppendSeparator();
Menu.Append( POPUP_SNAP_EVENT, wxT("&Snap") );
PopupMenu( &Menu, iXPos+m_pTimeLine->GetPosition().x, iYPos+m_pTimeLine->GetPosition().y );
}
bool cwxEventTimeLinePanel::Enable( bool bEnable/* = true*/ )
{
m_pTimeLine->Enable( bEnable );
return true;
}
void cwxEventTimeLinePanel::OnTLObjectSelect( cwxTLObjectSelectEvent& TLSelectEvent )
{
TOOL_DATA.SetSelectedObjectID( TLSelectEvent.GetObjectID() );
TOOL_DATA.SetSelectedObjectUseType( TLSelectEvent.GetObjectUseType() );
// <20>Ӽ<EFBFBD> <20>гο<D0B3><CEBF><EFBFBD> <20>̺<EFBFBD>Ʈ <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20>˷<EFBFBD><CBB7><EFBFBD>
cwxPropertyPanel* pPropertyPanel = TOOL_DATA.GetPropertyPanel();
pPropertyPanel->OnTLActionSelect();
CRTCutSceneRenderer* pRenderer = TOOL_DATA.GetRenderer();
pRenderer->OnSelectEventUnit( TLSelectEvent.GetObjectUseType(), TLSelectEvent.GetObjectID() );
}
void cwxEventTimeLinePanel::OnTLObjectMove( cwxTLObjectMoveEvent& TLMoveEvent )
{
int iSelectedObjectID = TLMoveEvent.GetObjectID();
int iObjectUseType = TOOL_DATA.GetSelectedObjectUseType();
switch( iObjectUseType )
{
case CToolData::MAX_CAMERA:
case CToolData::PARTICLE:
case CToolData::DOF:
case CToolData::FADE:
case CToolData::PROP:
case CToolData::SOUND_1:
case CToolData::SOUND_2:
case CToolData::SOUND_3:
case CToolData::SOUND_4:
case CToolData::SOUND_5:
case CToolData::SOUND_6:
case CToolData::SOUND_7:
case CToolData::SOUND_8:
case CToolData::SUBTITLE:
//PRE_ADD_FILTEREVENT
case CToolData::COLORFILTER:
//
{
const EventInfo* pEventInfo = TOOL_DATA.GetEventInfoByID( iSelectedObjectID );
EventInfo* pNewEventInfo = pEventInfo->clone();
pNewEventInfo->fStartTime = TLMoveEvent.GetActionStartTime();
CEventPropChange EventPropChange( &TOOL_DATA, pNewEventInfo );
TOOL_DATA.RunCommand( &EventPropChange );
delete pNewEventInfo;
}
break;
}
}
void cwxEventTimeLinePanel::OnTLObjectResize( cwxTLObjectResizeEvent& TLResizeEvent )
{
int iSelectedObjectID = TLResizeEvent.GetObjectID();// TOOL_DATA.GetSelectedActionID();
int iObjectUseType = TOOL_DATA.GetSelectedObjectUseType();
switch( iObjectUseType )
{
case CToolData::MAX_CAMERA:
case CToolData::PARTICLE:
//case CToolData::SOUND:
case CToolData::DOF:
case CToolData::FADE:
case CToolData::PROP:
case CToolData::SOUND_1:
case CToolData::SOUND_2:
case CToolData::SOUND_3:
case CToolData::SOUND_4:
case CToolData::SOUND_5:
case CToolData::SOUND_6:
case CToolData::SOUND_7:
case CToolData::SOUND_8:
//PRE_ADD_FILTEREVENT
case CToolData::COLORFILTER:
//
{
const EventInfo* pEventInfo = TOOL_DATA.GetEventInfoByID( iSelectedObjectID );
EventInfo* pNewEventInfo = pEventInfo->clone();
pNewEventInfo->fStartTime = TLResizeEvent.GetActionStartInUnit();
pNewEventInfo->fTimeLength = TLResizeEvent.GetNewWidthInUnit();
CEventPropChange EventPropChange( &TOOL_DATA, pNewEventInfo );
TOOL_DATA.RunCommand( &EventPropChange );
delete pNewEventInfo;
}
break;
//case CToolData::UT_PARTICLE:
// break;
//case CToolData::UT_SOUND:
// break;
}
}
// <20>׽ý<D7BD> <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>߿<EFBFBD>.. <20>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD> <20>׼<EFBFBD> <20>г<EFBFBD><D0B3><EFBFBD> <20>ִ°ɷ<C2B0> <20>׳<EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
void cwxEventTimeLinePanel::OnTLAxisEvent( cwxTLAxisEvent& TLAxisEvent )
{
CRTCutSceneRenderer* pRenderer = TOOL_DATA.GetRenderer();
CRTCutSceneMakerFrame* pMainFrame = static_cast<CRTCutSceneMakerFrame*>(TOOL_DATA.GetMainFrame());
cwxRenderPanel* pRenderPanel = pMainFrame->GetRenderPanel();
if( TLAxisEvent.OnLBDown() )
{
m_iOriEditMode = TOOL_DATA.GetEditMode();
TOOL_DATA.SetEditMode( CToolData::EM_FREE_TIME );
pRenderer->SetMode( IRenderBase::FREE_TIME_MODE );
TOOL_DATA.SetLocalTime( GetNowTime() );
}
else
if( TLAxisEvent.OnLBUp() )
{
TOOL_DATA.SetEditMode( m_iOriEditMode );
if( CToolData::EM_EDIT == m_iOriEditMode )
pRenderer->SetMode( IRenderBase::EDITOR_MODE );
else
if( CToolData::EM_PLAY == m_iOriEditMode )
{
pRenderer->SetMode( IRenderBase::PLAY_MODE );
}
}
else
if( TLAxisEvent.IsAxisMove() && TLAxisEvent.IsLBDown() )
{
TOOL_DATA.SetLocalTime( GetNowTime() );
}
}
void cwxEventTimeLinePanel::OnMouseEvent( wxMouseEvent& MouseEvent )
{
if( MouseEvent.RightUp() )
_PopupContextMenu( MouseEvent.GetX(), MouseEvent.GetY() );
}
EventInfo* cwxEventTimeLinePanel::_OnInsertEvent( const char* pEventName, int iToolDataType )
{
int iEventType = -1;
EventInfo* pEventInfo = NULL;
switch( iToolDataType )
{
case CToolData::MAX_CAMERA:
{
pEventInfo = new CamEventInfo;
CamEventInfo* pCamEventInfo = static_cast<CamEventInfo*>(pEventInfo);
iEventType = EventInfo::CAMERA;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD> <20><><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD>
wxCSConv MBConv( wxFONTENCODING_CP949 );
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;
pCamEventInfo->mapActorsShowHide.insert( make_pair(string(pActorName), true) ); // <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> true <20><>
}
}
break;
case CToolData::PARTICLE:
pEventInfo = new ParticleEventInfo;
iEventType = EventInfo::PARTICLE;
break;
//case CToolData::SOUND:
// pEventInfo = new SoundEventInfo;
// iEventType = EventInfo::SOUND;
// break;
case CToolData::DOF:
pEventInfo = new DofEventInfo;
iEventType = EventInfo::DOF;
break;
case CToolData::FADE:
pEventInfo = new FadeEventInfo;
iEventType = EventInfo::FADE;
break;
case CToolData::PROP:
pEventInfo = new PropEventInfo;
iEventType = EventInfo::PROP;
break;
case CToolData::SOUND_1:
case CToolData::SOUND_2:
case CToolData::SOUND_3:
case CToolData::SOUND_4:
case CToolData::SOUND_5:
case CToolData::SOUND_6:
case CToolData::SOUND_7:
case CToolData::SOUND_8:
pEventInfo = new SoundEventInfo;
iEventType = EventInfo::SOUND_1 + (iToolDataType - CToolData::SOUND_1);
break;
case CToolData::SUBTITLE:
pEventInfo = new SubtitleEventInfo;
iEventType = EventInfo::SUBTITLE;
break;
//#ifdef PRE_ADD_FILTEREVENT
case CToolData::COLORFILTER:
pEventInfo = new ColorFilterEventInfo;
iEventType = EventInfo::COLORFILTER;
break;
//#endif PRE_ADD_FILTEREVENT
}
pEventInfo->strEventName.assign( pEventName );
pEventInfo->iID = TOOL_DATA.GenerateID();
pEventInfo->fUnit = 10.0f;
float fNextStartTime = 0.0f;
int iLastEventIndex = TOOL_DATA.GetThisTypesEventNum( iEventType ) - 1;
if( iLastEventIndex >= 0 )
{
const EventInfo* pLastEvent = TOOL_DATA.GetEventInfoByIndex( iEventType, iLastEventIndex );
fNextStartTime = pLastEvent->fStartTime + pLastEvent->fTimeLength;
}
pEventInfo->fStartTime = fNextStartTime;
// <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>д<EFBFBD>.
m_iXScrollPos = m_pTimeLine->GetScrollPos( wxHORIZONTAL );
m_iYScrollPos = m_pTimeLine->GetScrollPos( wxVERTICAL );
return pEventInfo;
}
void cwxEventTimeLinePanel::OnMenuInsertCamEvent( wxCommandEvent& MenuEvent )
{
EventInfo* pEventInfo = _OnInsertEvent( "Camera", CToolData::MAX_CAMERA );
CEventInsertCmd InsertEventCmd( &TOOL_DATA, pEventInfo );
TOOL_DATA.RunCommand( &InsertEventCmd );
SAFE_DELETE( pEventInfo );
//EventInfo* pEventInfo = NULL;
//// TODO: <20>ϴ<EFBFBD>.. <20>ӽ÷<D3BD> ī<>޶<EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD>..
//pEventInfo = new CamEventInfo;
//CamEventInfo* pCamEventInfo = static_cast<CamEventInfo*>(pEventInfo);
//pEventInfo->strEventName.assign( "Camera" );
//pEventInfo->iID = TOOL_DATA.GenerateID();
//pEventInfo->fUnit = 10.0f; // <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> 10ms <20><><EFBFBD><EFBFBD>
//float fNextStartTime = 0.0f;
//int iLastCamEventIndex = TOOL_DATA.GetThisTypesEventNum( EventInfo::CAMERA ) - 1;
//if( iLastCamEventIndex >= 0 )
//{
// const EventInfo* pLastCamEvent = TOOL_DATA.GetEventInfoByIndex( EventInfo::CAMERA, iLastCamEventIndex );
// fNextStartTime = pLastCamEvent->fStartTime + pLastCamEvent->fTimeLength;
//}
//pEventInfo->fStartTime = fNextStartTime;
//CEventInsertCmd InsertEventCmd( &TOOL_DATA, pEventInfo );
//TOOL_DATA.RunCommand( &InsertEventCmd );
//SAFE_DELETE( pEventInfo );
}
void cwxEventTimeLinePanel::OnMenuInsertParticleEvent( wxCommandEvent& MenuEvent )
{
EventInfo* pEventInfo = _OnInsertEvent( "Particle", CToolData::PARTICLE );
CRTCutSceneRenderer* pRenderer = TOOL_DATA.GetRenderer();
pRenderer->GetHeightPos( static_cast<ParticleEventInfo*>(pEventInfo)->vPos );
CEventInsertCmd InsertEventCmd( &TOOL_DATA, pEventInfo );
TOOL_DATA.RunCommand( &InsertEventCmd );
SAFE_DELETE( pEventInfo );
//EventInfo* pEventInfo = new ParticleEventInfo;
//
//pEventInfo->strEventName.assign( "Particle" );
//pEventInfo->iID = TOOL_DATA.GenerateID();
//pEventInfo->fUnit = 10.0f;
//float fNextStartTime = 0.0f;
//int iLastParticleEventIndex = TOOL_DATA.GetThisTypesEventNum( EventInfo::PARTICLE ) - 1;
//if( iLastParticleEventIndex >= 0 )
//{
// const EventInfo* pLastParticleEvent = TOOL_DATA.GetEventInfoByIndex( EventInfo::PARTICLE, iLastParticleEventIndex );
// fNextStartTime = pLastParticleEvent->fStartTime + pLastParticleEvent->fTimeLength;
//}
//pEventInfo->fStartTime = fNextStartTime;
//CRTCutSceneRenderer* pRenderer = TOOL_DATA.GetRenderer();
//pRenderer->GetHeightPos( static_cast<ParticleEventInfo*>(pEventInfo)->vPos );
//CEventInsertCmd InsertEventCmd( &TOOL_DATA, pEventInfo );
//TOOL_DATA.RunCommand( &InsertEventCmd );
//SAFE_DELETE( pEventInfo );
}
void cwxEventTimeLinePanel::OnMenuInsertDOFEvent( wxCommandEvent& MenuEvent )
{
EventInfo* pEventInfo = _OnInsertEvent( "DOF", CToolData::DOF );
CEventInsertCmd InsertEventCmd( &TOOL_DATA, pEventInfo );
TOOL_DATA.RunCommand( &InsertEventCmd );
SAFE_DELETE( pEventInfo );
}
void cwxEventTimeLinePanel::OnMenuInsertSoundEvent( wxCommandEvent& MenuEvent )
{
int iSoundIndex = MenuEvent.GetId() - POPUP_INSERT_SOUND_1_EVENT;
char strBuf[ 256 ];
ZeroMemory( strBuf, sizeof(strBuf) );
sprintf_s( strBuf, "Sound_%d", iSoundIndex+1 );
EventInfo* pEventInfo = _OnInsertEvent( strBuf, CToolData::SOUND_1+iSoundIndex );
pEventInfo->iType = EventInfo::SOUND_1 + iSoundIndex;
CEventInsertCmd InsertEventCmd( &TOOL_DATA, pEventInfo );
TOOL_DATA.RunCommand( &InsertEventCmd );
SAFE_DELETE( pEventInfo );
//EventInfo* pEventInfo = new SoundEventInfo;
//pEventInfo->strEventName.assign( "Sound" );
//pEventInfo->iID = TOOL_DATA.GenerateID();
//pEventInfo->fUnit = 10.0f;
//float fNextStartTime = 0.0f;
//int iLastSoundEventIndex = TOOL_DATA.GetThisTypesEventNum( EventInfo::SOUND ) - 1;
//if( iLastSoundEventIndex >= 0 )
//{
// const EventInfo* pLastSoundEvent = TOOL_DATA.GetEventInfoByIndex( EventInfo::SOUND, iLastSoundEventIndex );
// fNextStartTime = pLastSoundEvent->fStartTime + pLastSoundEvent->fTimeLength;
//}
//pEventInfo->fStartTime = fNextStartTime;
//CEventInsertCmd InsertEventCmd( &TOOL_DATA, pEventInfo );
//TOOL_DATA.RunCommand( &InsertEventCmd );
//SAFE_DELETE( pEventInfo );
}
void cwxEventTimeLinePanel::OnMenuInsertFadeEvent( wxCommandEvent& MenuEvent )
{
EventInfo* pEventInfo = _OnInsertEvent( "Fade", CToolData::FADE );
CEventInsertCmd InsertEventCmd( &TOOL_DATA, pEventInfo );
TOOL_DATA.RunCommand( &InsertEventCmd );
SAFE_DELETE( pEventInfo );
//EventInfo* pEventInfo = new FadeEventInfo;
//pEventInfo->strEventName.assign( "Fade" );
//pEventInfo->iID = TOOL_DATA.GenerateID();
//pEventInfo->fUnit = 10.0f;
//pEventInfo->fTimeLength = 100.0f;
//float fNextStartTime = 0.0f;
//int iLastFadeEventIndex = TOOL_DATA.GetThisTypesEventNum( EventInfo::FADE ) - 1;
//if( iLastFadeEventIndex >= 0 )
//{
// const EventInfo* pLastFadeEvent = TOOL_DATA.GetEventInfoByIndex( EventInfo::FADE, iLastFadeEventIndex );
// fNextStartTime = pLastFadeEvent->fStartTime + pLastFadeEvent->fTimeLength;
//}
//pEventInfo->fStartTime = fNextStartTime;
//CEventInsertCmd InsertEventCmd( &TOOL_DATA, pEventInfo );
//TOOL_DATA.RunCommand( &InsertEventCmd );
//SAFE_DELETE( pEventInfo );
}
void cwxEventTimeLinePanel::OnMenuInsertPropEvent( wxCommandEvent& MenuEvent )
{
EventInfo* pEventInfo = _OnInsertEvent( "Prop", CToolData::PROP );
CEventInsertCmd InsertEventCmd( &TOOL_DATA, pEventInfo );
TOOL_DATA.RunCommand( &InsertEventCmd );
SAFE_DELETE( pEventInfo );
//EventInfo* pEventInfo = new PropEventInfo;
//pEventInfo->strEventName.assign( "Prop" );
//pEventInfo->iID = TOOL_DATA.GenerateID();
//pEventInfo->fUnit = 10.0f;
//pEventInfo->fTimeLength = 100.0f;
//float fNextStartTime = 0.0f;
//int iLastPropEventIndex = TOOL_DATA.GetThisTypesEventNum( EventInfo::PROP ) - 1;
//if( iLastPropEventIndex >= 0 )
//{
// const EventInfo* pLastPropEvent = TOOL_DATA.GetEventInfoByIndex( EventInfo::PROP, iLastPropEventIndex );
// fNextStartTime = pLastPropEvent->fStartTime + pLastPropEvent->fTimeLength;
//}
//pEventInfo->fStartTime = fNextStartTime;
//CEventInsertCmd InsertEventCmd( &TOOL_DATA, pEventInfo );
//TOOL_DATA.RunCommand( &InsertEventCmd );
//SAFE_DELETE( pEventInfo );
}
void cwxEventTimeLinePanel::OnMenuInsertSubtitleEvent( wxCommandEvent& MenuEvent )
{
EventInfo* pEventInfo = _OnInsertEvent( "Subtitle", CToolData::SUBTITLE );
CEventInsertCmd InsertEventCmd( &TOOL_DATA, pEventInfo );
TOOL_DATA.RunCommand( &InsertEventCmd );
SAFE_DELETE( pEventInfo );
}
void cwxEventTimeLinePanel::OnMenuRemoveEvent( wxCommandEvent& MenuEvent )
{
int iSelectedID = m_pTimeLine->GetSelectedObjectID();
int iUseType = m_pTimeLine->GetSelectedObjectUseType();
switch( iUseType )
{
case CToolData::PARTICLE:
//case CToolData::SOUND:
case CToolData::DOF:
case CToolData::MAX_CAMERA:
case CToolData::FADE:
case CToolData::PROP:
case CToolData::SOUND_1:
case CToolData::SOUND_2:
case CToolData::SOUND_3:
case CToolData::SOUND_4:
case CToolData::SOUND_5:
case CToolData::SOUND_6:
case CToolData::SOUND_7:
case CToolData::SOUND_8:
case CToolData::SUBTITLE:
// PRE_ADD_FILTEREVENT
case CToolData::COLORFILTER:
//
{
CEventRemoveCmd RemoveEventCmd( &TOOL_DATA, iSelectedID );
TOOL_DATA.RunCommand( &RemoveEventCmd );
}
break;
}
}
void cwxEventTimeLinePanel::_SnapEvent( int iEventType )
{
int iSelectedID = m_pTimeLine->GetSelectedObjectID();
const EventInfo* pPrevEventInfo = NULL;
int iNumEvent = TOOL_DATA.GetThisTypesEventNum( iEventType );
for( int iEvent = 0; iEvent <iNumEvent; ++iEvent )
{
const EventInfo* pEventInfo = TOOL_DATA.GetEventInfoByIndex( iEventType, iEvent );
if( pEventInfo->iID == iSelectedID )
{
if( iEvent > 0 )
{
pPrevEventInfo = TOOL_DATA.GetEventInfoByIndex( iEventType, iEvent-1 );
break;
}
}
}
if( pPrevEventInfo )
{
const EventInfo* pNowEventInfo = TOOL_DATA.GetEventInfoByID( iSelectedID );
EventInfo* pNewEventInfo = pNowEventInfo->clone();
pNewEventInfo->fStartTime = pPrevEventInfo->fStartTime + pPrevEventInfo->fTimeLength;
CEventPropChange EventPropChange( &TOOL_DATA, pNewEventInfo );
TOOL_DATA.RunCommand( &EventPropChange );
}
}
void cwxEventTimeLinePanel::OnMenuSnapEvent( wxCommandEvent& MenuEvent )
{
int iSelectedUseType = m_pTimeLine->GetSelectedObjectUseType();
// <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>´<EFBFBD>.
//const EventInfo* pEventInfo = TOOL_DATA.GetEventInfoByID( iSelectedID );
//wxCSConv MBConv( wxFONTENCODING_CP949 );
//wxChar wcaBuf[ 256 ];
//ZeroMemory( wcaBuf, sizeof(wcaBuf) );
//MBConv.MB2WC( wcaBuf, string(pEventInfo->strActorName + "_ACTION").c_str(), 256 );
switch( iSelectedUseType )
{
case CToolData::MAX_CAMERA:
_SnapEvent( EventInfo::CAMERA );
break;
case CToolData::PARTICLE:
_SnapEvent( EventInfo::PARTICLE );
break;
//case CToolData::SOUND:
// _SnapEvent( EventInfo::SOUND );
// break;
case CToolData::DOF:
_SnapEvent( EventInfo::DOF );
break;
case CToolData::FADE:
_SnapEvent( EventInfo::FADE );
break;
case CToolData::PROP:
_SnapEvent( EventInfo::PROP );
break;
case CToolData::SOUND_1:
case CToolData::SOUND_2:
case CToolData::SOUND_3:
case CToolData::SOUND_4:
case CToolData::SOUND_5:
case CToolData::SOUND_6:
case CToolData::SOUND_7:
case CToolData::SOUND_8:
_SnapEvent( EventInfo::SOUND_1 + (iSelectedUseType-CToolData::SOUND_1) );
break;
case CToolData::SUBTITLE:
_SnapEvent( EventInfo::SUBTITLE );
break;
// PRE_ADD_FILTEREVENT
case CToolData::COLORFILTER:
_SnapEvent( EventInfo::COLORFILTER );
break;
//
}
}
void cwxEventTimeLinePanel::OnMenuSelectParticleEvent( wxCommandEvent& MenuEvent )
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ƼŬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ش<EFBFBD>.
CRTCutSceneRenderer* pRenderer = TOOL_DATA.GetRenderer();
//pRenderer->SelectParticle( m_pTimeLine->GetSelectedObjectID() );
pRenderer->OnSelectEventUnit( CToolData::PARTICLE, m_pTimeLine->GetSelectedObjectID() );
}
void cwxEventTimeLinePanel::OnMenuUnSelectParticleEvent( wxCommandEvent& MenuEvent )
{
CRTCutSceneRenderer* pRenderer = TOOL_DATA.GetRenderer();
pRenderer->UnSelectObject();
}
#ifdef PRE_ADD_FILTEREVENT
void cwxEventTimeLinePanel::OnMenuInsertColorFilterEvent( wxCommandEvent& MenuEvent )
{
EventInfo* pEventInfo = _OnInsertEvent( "ColorFilter", CToolData::COLORFILTER );
CEventInsertCmd InsertEventCmd( &TOOL_DATA, pEventInfo );
TOOL_DATA.RunCommand( &InsertEventCmd );
SAFE_DELETE( pEventInfo );
}
#endif // PRE_ADD_FILTEREVENT
// <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20>״<EFBFBD><D7B4><EFBFBD> <20>ݿ<EFBFBD>
void cwxEventTimeLinePanel::ReflectData( void )
{
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD>õǾ<C3B5><C7BE><EFBFBD> <20>׼<EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20>޾Ƶ<DEBE>
int iSelectedActionID = m_pTimeLine->GetSelectedObjectID();
m_pTimeLine->Clear();
m_pTimeLine->SetStyle( TL_SHOW_OBJECT_NAME );
wxCSConv MBConv( wxFONTENCODING_CP949 );
wxChar wcaBuf[ 256 ];
ZeroMemory( wcaBuf, sizeof(wcaBuf) );
for( int iEventType = 0; iEventType < EventInfo::TYPE_COUNT; ++iEventType )
{
int iNumEvent = TOOL_DATA.GetThisTypesEventNum( iEventType );
wxString& strEventObject = m_astrEventObjectNameByType[ iEventType ];
m_pTimeLine->AddItem( strEventObject, wxColour(wxT("RED")) );
for( int iEvent = 0; iEvent < iNumEvent; ++iEvent )
{
const EventInfo* pEventInfo = TOOL_DATA.GetEventInfoByIndex( iEventType, iEvent );
MBConv.MB2WC( wcaBuf, pEventInfo->strEventName.c_str(), 256 );
switch( pEventInfo->iType )
{
case EventInfo::CAMERA:
m_pTimeLine->AddObject( strEventObject, wcaBuf, pEventInfo->iID,
CToolData::MAX_CAMERA, true, pEventInfo->fStartTime,
pEventInfo->fTimeLength );
break;
case EventInfo::PARTICLE:
m_pTimeLine->AddObject( strEventObject, wcaBuf, pEventInfo->iID,
CToolData::PARTICLE, true, pEventInfo->fStartTime,
pEventInfo->fTimeLength );
break;
case EventInfo::DOF:
m_pTimeLine->AddObject( strEventObject, wcaBuf, pEventInfo->iID,
CToolData::DOF, true, pEventInfo->fStartTime,
pEventInfo->fTimeLength );
break;
case EventInfo::FADE:
m_pTimeLine->AddObject( strEventObject, wcaBuf, pEventInfo->iID,
CToolData::FADE, true, pEventInfo->fStartTime,
pEventInfo->fTimeLength );
break;
case EventInfo::PROP:
m_pTimeLine->AddObject( strEventObject, wcaBuf, pEventInfo->iID,
CToolData::PROP, true, pEventInfo->fStartTime,
pEventInfo->fTimeLength );
break;
case EventInfo::SOUND_1:
case EventInfo::SOUND_2:
case EventInfo::SOUND_3:
case EventInfo::SOUND_4:
case EventInfo::SOUND_5:
case EventInfo::SOUND_6:
case EventInfo::SOUND_7:
case EventInfo::SOUND_8:
m_pTimeLine->AddObject( strEventObject, wcaBuf, pEventInfo->iID,
CToolData::SOUND_1 + (pEventInfo->iType-EventInfo::SOUND_1), true, pEventInfo->fStartTime,
pEventInfo->fTimeLength );
break;
case EventInfo::SUBTITLE:
m_pTimeLine->AddObject( strEventObject, wcaBuf, pEventInfo->iID,
CToolData::SUBTITLE, true, pEventInfo->fStartTime, pEventInfo->fTimeLength );
break;
#ifdef PRE_ADD_FILTEREVENT
case EventInfo::COLORFILTER:
m_pTimeLine->AddObject( strEventObject, wcaBuf, pEventInfo->iID,
CToolData::COLORFILTER, true, pEventInfo->fStartTime, pEventInfo->fTimeLength );
break;
#endif // PRE_ADD_FILTEREVENT
}
}
}
if( wxNOT_FOUND != iSelectedActionID )
m_pTimeLine->SelectObject( iSelectedActionID );
int iHorizontal = m_pTimeLine->GetScrollPos( wxHORIZONTAL );
int iVertical = m_pTimeLine->GetScrollPos( wxVERTICAL );
m_pTimeLine->SetScrollPos( wxHORIZONTAL, iHorizontal, false );
m_pTimeLine->SetScrollPos( wxVERTICAL, iVertical, false );
m_pTimeLine->Refresh( true, &m_pTimeLine->GetClientRect() );
}
void cwxEventTimeLinePanel::ModifyObject( ICommand* pCommand )
{
assert( pCommand->GetTypeID() == CMD_EVENT_PROP_CHANGE );
wxCSConv MBConv( wxFONTENCODING_CP949 );
switch( pCommand->GetTypeID() )
{
case CMD_EVENT_PROP_CHANGE:
{
CEventPropChange* pEventPropChange = static_cast<CEventPropChange*>(pCommand);
const EventInfo* pEventInfo = NULL;
if( pEventPropChange->m_bUndo )
pEventInfo = pEventPropChange->m_pPrevEventInfo;
else
pEventInfo = pEventPropChange->m_pNewEventInfo;
wxChar wcaEventName[ 256 ];
ZeroMemory( wcaEventName, sizeof(wcaEventName) );
MBConv.MB2WC( wcaEventName, pEventInfo->strEventName.c_str(), 256 );
switch( pEventInfo->iType )
{
case EventInfo::CAMERA:
m_pTimeLine->ModifyObject( m_astrEventObjectNameByType[pEventInfo->iType].c_str(), wcaEventName, pEventInfo->iID,
CToolData::MAX_CAMERA, true, pEventInfo->fStartTime, pEventInfo->fTimeLength );
break;
case EventInfo::PARTICLE:
m_pTimeLine->ModifyObject( m_astrEventObjectNameByType[pEventInfo->iType].c_str(), wcaEventName, pEventInfo->iID,
CToolData::PARTICLE, true, pEventInfo->fStartTime, pEventInfo->fTimeLength );
break;
case EventInfo::FADE:
m_pTimeLine->ModifyObject( m_astrEventObjectNameByType[pEventInfo->iType].c_str(), wcaEventName, pEventInfo->iID,
CToolData::FADE, true, pEventInfo->fStartTime, pEventInfo->fTimeLength );
break;
case EventInfo::DOF:
m_pTimeLine->ModifyObject( m_astrEventObjectNameByType[pEventInfo->iType].c_str(), wcaEventName, pEventInfo->iID,
CToolData::DOF, true, pEventInfo->fStartTime, pEventInfo->fTimeLength );
break;
case EventInfo::PROP:
m_pTimeLine->ModifyObject( m_astrEventObjectNameByType[pEventInfo->iType].c_str(), wcaEventName, pEventInfo->iID,
CToolData::PROP, true, pEventInfo->fStartTime, pEventInfo->fTimeLength );
break;
case EventInfo::SOUND_1:
case EventInfo::SOUND_2:
case EventInfo::SOUND_3:
case EventInfo::SOUND_4:
case EventInfo::SOUND_5:
case EventInfo::SOUND_6:
case EventInfo::SOUND_7:
case EventInfo::SOUND_8:
m_pTimeLine->ModifyObject( m_astrEventObjectNameByType[pEventInfo->iType].c_str(), wcaEventName, pEventInfo->iID,
CToolData::SOUND_1 + (pEventInfo->iType-EventInfo::SOUND_1), true,
pEventInfo->fStartTime, pEventInfo->fTimeLength );
break;
case EventInfo::SUBTITLE:
m_pTimeLine->ModifyObject( m_astrEventObjectNameByType[pEventInfo->iType].c_str(), wcaEventName, pEventInfo->iID,
CToolData::SUBTITLE, true, pEventInfo->fStartTime, pEventInfo->fTimeLength );
break;
// PRE_ADD_FILTEREVENT
case EventInfo::COLORFILTER:
m_pTimeLine->ModifyObject( m_astrEventObjectNameByType[pEventInfo->iType].c_str(), wcaEventName, pEventInfo->iID,
CToolData::COLORFILTER, true, pEventInfo->fStartTime, pEventInfo->fTimeLength );
break;
//
}
}
break;
}
int iHorizontal = m_pTimeLine->GetScrollPos( wxHORIZONTAL );
int iVertical = m_pTimeLine->GetScrollPos( wxVERTICAL );
m_pTimeLine->SetScrollPos( wxHORIZONTAL, iHorizontal, false );
m_pTimeLine->SetScrollPos( wxVERTICAL, iVertical, false );
m_pTimeLine->Refresh( true, &m_pTimeLine->GetClientRect() );
}
// <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD>ϸ<EFBFBD> <20>˾Ƽ<CBBE> <20>г<EFBFBD> <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
void cwxEventTimeLinePanel::SetTime( float fTime )
{
// <20>̰<EFBFBD> milliseconds <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pTimeLine->UpdateTimeBar( fTime ); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10... <20>̷<EFBFBD><CCB7><EFBFBD> <20>ȵǴµ<C7B4>. -_-
int iHorizontal = m_pTimeLine->GetScrollPos( wxHORIZONTAL );
int iVertical = m_pTimeLine->GetScrollPos( wxVERTICAL );
m_pTimeLine->SetScrollPos( wxHORIZONTAL, iHorizontal, false );
m_pTimeLine->SetScrollPos( wxVERTICAL, iVertical, false );
m_pTimeLine->Refresh( true, &m_pTimeLine->GetClientRect() );
}
DWORD cwxEventTimeLinePanel::GetNowTime( void )
{
DWORD dwNowTime = DWORD(m_pTimeLine->GetNowTime() * 1000.0f);
return dwNowTime;
}
// <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> ã<>Ƽ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>Ŵ
void cwxEventTimeLinePanel::SelectObject( int iObjectID, DWORD dwStartTime )
{
m_dwNowTime = (dwStartTime / 1000) * 1000;
// <20><20>ش<EFBFBD> act id <20><> <20>ִ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> ã<>Ƽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
ReflectData();
m_pTimeLine->SelectObject( iObjectID );
}
void cwxEventTimeLinePanel::OnMouseEventFromFrame( wxMouseEvent& MouseEvent )
{
m_pTimeLine->OnMouseEvent( MouseEvent );
}