// MeshPaneView.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù. // #include "stdafx.h" #include #include "EtViewer.h" #include "WorkspacePaneView.h" #include "UserMessage.h" #include "RenderBase.h" #include "MainFrm.h" #include "PaneDefine.h" // CWorkspacePaneView IMPLEMENT_DYNCREATE(CWorkspacePaneView, CFormView) CWorkspacePaneView::CWorkspacePaneView() : CFormView(CWorkspacePaneView::IDD) { m_bActiavte = false; m_pContextMenu = new CMenu; m_pContextMenu->LoadMenu( IDR_CONTEXT ); } CWorkspacePaneView::~CWorkspacePaneView() { SAFE_DELETE( m_pContextMenu ); } void CWorkspacePaneView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); DDX_Control(pDX, IDC_TREE1, m_TreeCtrl); } BEGIN_MESSAGE_MAP(CWorkspacePaneView, CFormView) ON_WM_SIZE() ON_MESSAGE( UM_WORKSPACEPANE_REFRESH, OnRefresh ) ON_MESSAGE( UM_WORKSPACEPANE_ADD, OnAdd ) ON_MESSAGE( UM_WORKSPACEPANE_REMOVE, OnRemove ) ON_MESSAGE( UM_TREEEX_UPDATECHECK, OnCheckItem ) ON_MESSAGE( UM_WORKSPACEPANE_SETSHOWFLAG, OnSetCheckItem ) ON_WM_CONTEXTMENU() ON_COMMAND(ID_SCENE_ADD, &CWorkspacePaneView::OnSceneAdd) ON_COMMAND(ID_SCENE_REMOVE, &CWorkspacePaneView::OnSceneRemove) ON_COMMAND(ID_SKIN_ADD, &CWorkspacePaneView::OnSkinAdd) ON_COMMAND(ID_SKIN_REMOVE, &CWorkspacePaneView::OnSkinRemove) ON_COMMAND(ID_SKIN_SAVE, &CWorkspacePaneView::OnSkinSave) ON_COMMAND(ID_SKIN_SAVEAS, &CWorkspacePaneView::OnSkinSaveAs) ON_COMMAND(ID_ANIMATION_ADD, &CWorkspacePaneView::OnAnimationAdd) ON_COMMAND(ID_ANIMATION_REMOVE, &CWorkspacePaneView::OnAnimationRemove) ON_COMMAND( ID_ANIMATION_MERGE, &CWorkspacePaneView::OnAnimationMerge) ON_COMMAND(ID_COMMON_REMOVE, &CWorkspacePaneView::OnCommonRemove) ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &CWorkspacePaneView::OnTvnSelchangedTree1) ON_COMMAND(ID_LIGHT_ADD_DIR, &CWorkspacePaneView::OnLightAddDir) ON_COMMAND(ID_LIGHT_ADD_POINT, &CWorkspacePaneView::OnLightAddPoint) ON_COMMAND(ID_LIGHT_ADD_SPOT, &CWorkspacePaneView::OnLightAddSpot) ON_COMMAND(ID_LIGHT_REMOVE, &CWorkspacePaneView::OnLightRemove) END_MESSAGE_MAP() // CWorkspacePaneView Áø´ÜÀÔ´Ï´Ù. #ifdef _DEBUG void CWorkspacePaneView::AssertValid() const { CFormView::AssertValid(); } #ifndef _WIN32_WCE void CWorkspacePaneView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif #endif //_DEBUG // CWorkspacePaneView ¸Þ½ÃÁö 󸮱âÀÔ´Ï´Ù. void CWorkspacePaneView::OnInitialUpdate() { CFormView::OnInitialUpdate(); // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. if( m_bActiavte == true ) return; m_bActiavte = true; m_TreeCtrl.EnableMultiSelect(); CBitmap bitmap; bitmap.LoadBitmap( IDB_WORKSPACEICON ); m_ImageList.Create( 16, 16, ILC_COLOR24|ILC_MASK, 14, 1 ); m_ImageList.Add( &bitmap, RGB(0,255,0) ); m_TreeCtrl.SetImageList( &m_ImageList, TVSIL_NORMAL ); m_TreeCtrl.Activate(); // m_TreeCtrl.EnableDrag( TRUE ); // m_TreeCtrl.SetDragRect( TRUE ); } void CWorkspacePaneView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. if( m_TreeCtrl ) { CRect rcRect; GetClientRect( &rcRect ); m_TreeCtrl.MoveWindow( &rcRect ); } } void CWorkspacePaneView::CalcSelectItemList() { m_SelectItemList.RemoveAll(); m_TreeCtrl.GetSelectedList( m_SelectItemList ); } LRESULT CWorkspacePaneView::OnRefresh( WPARAM wParam, LPARAM lParam ) { m_TreeCtrl.DeleteAllItems(); m_TreeCtrl.SetImageList( &m_ImageList, TVSIL_NORMAL ); return S_OK; } LRESULT CWorkspacePaneView::OnAdd( WPARAM wParam, LPARAM lParam ) { CObjectBase *pBase = (CObjectBase *)wParam; int nIconID = 0; bool bShowHide = false; switch( pBase->GetType() ) { case CObjectBase::SCENE: nIconID = 0; bShowHide = true; break; case CObjectBase::SKIN: nIconID = 2; bShowHide = true; break; case CObjectBase::SUBMESH: nIconID = 4; bShowHide = true; break; case CObjectBase::ANIMATION: nIconID = 8; break; case CObjectBase::LIGHTDIR: case CObjectBase::LIGHTPOINT: case CObjectBase::LIGHTSPOT: nIconID = 10; bShowHide = true; break; case CObjectBase::LIGHTFOLDER: nIconID = 12; break; } m_TreeCtrl.SetImageList( &m_ImageList, TVSIL_NORMAL ); HTREEITEM hParent = pBase->GetParent()->GetTreeItemID(); HTREEITEM hti = m_TreeCtrl.InsertItem( pBase->GetName(), nIconID, nIconID+1, hParent ? hParent : 0 ); pBase->SetTreeCtrl( &m_TreeCtrl ); pBase->SetTreeItemID( hti ); m_TreeCtrl.Expand( hParent, TVE_EXPAND ); if( bShowHide == true ) m_TreeCtrl.SetItemState( hti, INDEXTOSTATEIMAGEMASK(2), TVIS_STATEIMAGEMASK ); else m_TreeCtrl.SetItemState( hti, INDEXTOSTATEIMAGEMASK(0), TVIS_STATEIMAGEMASK ); return S_OK; } LRESULT CWorkspacePaneView::OnRemove( WPARAM wParam, LPARAM lParam ) { CObjectBase *pBase = (CObjectBase *)wParam; m_TreeCtrl.DeleteItem( pBase->GetTreeItemID() ); return S_OK; } LRESULT CWorkspacePaneView::OnSetCheckItem( WPARAM wParam, LPARAM lParam ) { HTREEITEM hti = (HTREEITEM)wParam; m_TreeCtrl.SetItemState( hti, INDEXTOSTATEIMAGEMASK(1 + (int)lParam), TVIS_STATEIMAGEMASK ); return S_OK; } bool CWorkspacePaneView::CheckSameTypeObject( int nType ) { bool bFlag = true; POSITION p = m_SelectItemList.GetHeadPosition(); HTREEITEM hti; while(p) { hti = m_SelectItemList.GetNext( p ); if( CGlobalValue::GetInstance().GetObjectTypeFromDescription( m_TreeCtrl.GetItemText( hti ) ) != (CObjectBase::OBJECT_TYPE)nType ) { bFlag = false; break; } } return bFlag; } void CWorkspacePaneView::OnContextMenu(CWnd* /*pWnd*/, CPoint point) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CMenu *pMenu = m_pContextMenu->GetSubMenu(0); std::vector VecEnableMenuID; pMenu->EnableMenuItem( ID_COMMON_REMOVE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); pMenu->EnableMenuItem( ID_SCENE_ADD, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); pMenu->EnableMenuItem( ID_SCENE_REMOVE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); pMenu->EnableMenuItem( ID_SKIN_ADD, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); pMenu->EnableMenuItem( ID_SKIN_REMOVE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); pMenu->EnableMenuItem( ID_SKIN_SAVE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); pMenu->EnableMenuItem( ID_SKIN_SAVEAS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); pMenu->EnableMenuItem( ID_ANIMATION_ADD, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); pMenu->EnableMenuItem( ID_ANIMATION_REMOVE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); pMenu->EnableMenuItem( ID_ANIMATION_MERGE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); pMenu->EnableMenuItem( ID_LIGHT_ADD_DIR, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); pMenu->EnableMenuItem( ID_LIGHT_ADD_POINT, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); pMenu->EnableMenuItem( ID_LIGHT_ADD_SPOT, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); pMenu->EnableMenuItem( ID_LIGHT_REMOVE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); CalcSelectItemList(); int nSelectCount = (int)m_SelectItemList.GetCount(); if( nSelectCount == 0 ) { VecEnableMenuID.push_back( ID_SCENE_ADD ); } else if( nSelectCount > 1 ) { VecEnableMenuID.push_back( ID_COMMON_REMOVE ); // °°Àº Á¾·ù³¢¸®¸¸ °ñ¶óÁ³À»¶§ üũ if( CheckSameTypeObject( (int)CObjectBase::ANIMATION ) == true ) { VecEnableMenuID.push_back( ID_ANIMATION_MERGE ); VecEnableMenuID.push_back( ID_ANIMATION_REMOVE ); } if( CheckSameTypeObject( (int)CObjectBase::SKIN ) == true ) { VecEnableMenuID.push_back( ID_SKIN_REMOVE ); POSITION p = m_SelectItemList.GetHeadPosition(); HTREEITEM hti; while(p) { hti = m_SelectItemList.GetNext( p ); CObjectBase *pBase = CGlobalValue::GetInstance().GetObjectFromTreeID( hti ); if( pBase->IsChildModify() == true ) { VecEnableMenuID.push_back( ID_SKIN_SAVE ); break; } } } if( CheckSameTypeObject( (int)CObjectBase::SCENE ) == true ) { VecEnableMenuID.push_back( ID_SCENE_REMOVE ); } } else { CString szName = m_TreeCtrl.GetItemText( m_SelectItemList.GetHead() ); HTREEITEM hti = m_SelectItemList.GetHead(); CObjectBase *pBase = CGlobalValue::GetInstance().GetObjectFromTreeID( hti ); if( pBase == NULL ) return; switch( pBase->GetType() ) { case CObjectBase::SCENE: VecEnableMenuID.push_back( ID_SCENE_ADD ); if( CGlobalValue::GetInstance().GetRootObject() && CGlobalValue::GetInstance().GetRootObject()->GetChild(0) && CGlobalValue::GetInstance().GetRootObject()->GetChild(0) != pBase ) { VecEnableMenuID.push_back( ID_SCENE_REMOVE ); VecEnableMenuID.push_back( ID_COMMON_REMOVE ); } VecEnableMenuID.push_back( ID_ANIMATION_ADD ); VecEnableMenuID.push_back( ID_SKIN_ADD ); break; case CObjectBase::SKIN: VecEnableMenuID.push_back( ID_SKIN_REMOVE ); VecEnableMenuID.push_back( ID_COMMON_REMOVE ); VecEnableMenuID.push_back( ID_ANIMATION_ADD ); if( pBase->IsChildModify() == true ) { VecEnableMenuID.push_back( ID_SKIN_SAVE ); } VecEnableMenuID.push_back( ID_SKIN_SAVEAS ); break; case CObjectBase::SUBMESH: break; case CObjectBase::ANIMATION: VecEnableMenuID.push_back( ID_COMMON_REMOVE ); VecEnableMenuID.push_back( ID_ANIMATION_REMOVE ); break; case CObjectBase::LIGHTFOLDER: VecEnableMenuID.push_back( ID_LIGHT_ADD_DIR ); VecEnableMenuID.push_back( ID_LIGHT_ADD_POINT ); VecEnableMenuID.push_back( ID_LIGHT_ADD_SPOT ); break; case CObjectBase::LIGHTDIR: case CObjectBase::LIGHTPOINT: case CObjectBase::LIGHTSPOT: VecEnableMenuID.push_back( ID_LIGHT_REMOVE ); VecEnableMenuID.push_back( ID_COMMON_REMOVE ); break; } } for( DWORD i=0; iEnableMenuItem( VecEnableMenuID[i], MF_BYCOMMAND | MF_ENABLED ); } pMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this ); } void CWorkspacePaneView::OnSceneAdd() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CObjectBase *pBase = new CObjectScene; CGlobalValue::GetInstance().AddObject( CString(), pBase ); } void CWorkspacePaneView::OnSceneRemove() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. POSITION p = m_SelectItemList.GetHeadPosition(); HTREEITEM hti; while(p) { hti = m_SelectItemList.GetNext( p ); CGlobalValue::GetInstance().RemoveObjectFromTreeID( hti ); } } void CWorkspacePaneView::OnSkinAdd() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CString szFileList; TCHAR szFilter[] = _T( "Eternity Skin File (*.skn)|*.skn|Eternity Animation File (*.ani)|*.ani|Eternity Support File (*.skn;*.ani)|*.skn;*.ani|All Files (*.*)|*.*||" ); CFileDialog dlg( TRUE, _T("skn"), _T("*.skn"), OFN_HIDEREADONLY|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_ALLOWMULTISELECT| OFN_ENABLESIZING , szFilter, CGlobalValue::GetInstance().GetView() ); dlg.GetOFN().lpstrFile = szFileList.GetBuffer(100000); dlg.GetOFN().nMaxFile = 100000; dlg.m_ofn.lpstrTitle = "Open Eternity Engine File"; if( IDOK != dlg.DoModal() ) { szFileList.ReleaseBuffer(); return; } std::vector szVecSkinList; std::vector szVecAniList; CGlobalValue::GetInstance().ParseFileList( szFileList, "skn", szVecSkinList ); CGlobalValue::GetInstance().ParseFileList( szFileList, "ani", szVecAniList ); szFileList.ReleaseBuffer(); if( szVecSkinList.size() == 0 ) return; else if( szVecSkinList.size() == 1 ) { float fPer = 100 / (float)szVecAniList.size() + 1.f; CGlobalValue::GetInstance().UpdateProgress( 0 ); char szTemp[512]; _GetFullFileName( szTemp, _countof(szTemp), szVecSkinList[0] ); CObjectBase *pBase = new CObjectSkin; pBase->SetName( CString(szTemp) ); ((CObjectSkin*)pBase)->LoadSkin( szVecSkinList[0], true ); if( strstr( szVecSkinList[0], "Weapon" ) ) { if( StrStrI( szVecSkinList[0], "Gauntlet" ) == 0 && StrStrI( szVecSkinList[0], "Academicglove" ) == 0 && StrStrI( szVecSkinList[0], "Charm" ) == 0 ) ((CObjectSkin*)pBase)->SetSkinType( CObjectSkin::SKIN_WEAPON ); } else if( strstr( szVecSkinList[0], "Cash_Item" ) ) { if( StrStrI( szVecSkinList[0], "EarRing" ) ) ((CObjectSkin*)pBase)->SetSkinType( CObjectSkin::SKIN_EARRING ); else if( StrStrI( szVecSkinList[0], "Wing" ) ) ((CObjectSkin*)pBase)->SetSkinType( CObjectSkin::SKIN_WING ); else if( StrStrI( szVecSkinList[0], "Tail" ) ) ((CObjectSkin*)pBase)->SetSkinType( CObjectSkin::SKIN_TAIL ); } CGlobalValue::GetInstance().AddObject( m_SelectItemList.GetHead(), pBase ); CGlobalValue::GetInstance().UpdateProgress( (int)(fPer*1.f) ); // ¿¡´µ ·Îµù for( DWORD i=0; iLoadAnimation( szVecAniList[i] ) == false ) { SAFE_DELETE( pBaseAni ); continue; } CGlobalValue::GetInstance().AddObject( pBase->GetTreeItemID(), pBaseAni ); CGlobalValue::GetInstance().UpdateProgress( (int)(fPer*(i+2)) ); } CGlobalValue::GetInstance().UpdateProgress( 0 ); } else if( szVecSkinList.size() > 1 ) { if( szVecAniList.size() > 0 ) return; float fPer = 100 / (float)szVecSkinList.size() + 1.f; CGlobalValue::GetInstance().UpdateProgress( 0 ); for( DWORD i=0; iSetName( CString(szTemp) ); ((CObjectSkin*)pBase)->LoadSkin( szVecSkinList[i], true ); if( strstr( szVecSkinList[i], "Weapon" ) ) { if( StrStrI( szVecSkinList[i], "Gauntlet" ) == 0 && StrStrI( szVecSkinList[i], "Academicglove" ) == 0 && StrStrI( szVecSkinList[i], "Charm" ) == 0 ) ((CObjectSkin*)pBase)->SetSkinType( CObjectSkin::SKIN_WEAPON ); } else if( strstr( szVecSkinList[i], "Cash_Item" ) ) { if( StrStrI( szVecSkinList[i], "EarRing" ) ) ((CObjectSkin*)pBase)->SetSkinType( CObjectSkin::SKIN_EARRING ); else if( StrStrI( szVecSkinList[i], "Wing" ) ) ((CObjectSkin*)pBase)->SetSkinType( CObjectSkin::SKIN_WING ); else if( StrStrI( szVecSkinList[i], "Tail" ) ) ((CObjectSkin*)pBase)->SetSkinType( CObjectSkin::SKIN_TAIL ); } CGlobalValue::GetInstance().AddObject( m_SelectItemList.GetHead(), pBase ); CGlobalValue::GetInstance().UpdateProgress( (int)(fPer*(i+1)) ); } CGlobalValue::GetInstance().UpdateProgress( 0 ); } } void CWorkspacePaneView::OnSkinRemove() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. POSITION p = m_SelectItemList.GetHeadPosition(); HTREEITEM hti; while(p) { hti = m_SelectItemList.GetNext( p ); CGlobalValue::GetInstance().RemoveObjectFromTreeID( hti ); } } void CWorkspacePaneView::OnSkinSave() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. POSITION p = m_SelectItemList.GetHeadPosition(); HTREEITEM hti; while(p) { hti = m_SelectItemList.GetNext( p ); CObjectSkin *pBase = (CObjectSkin *)CGlobalValue::GetInstance().GetObjectFromTreeID( hti ); if( !pBase ) continue; if( pBase->IsChildModify() == false ) continue; pBase->SaveSkin( CString("") ); } } void CWorkspacePaneView::OnSkinSaveAs() { CString szFileList; TCHAR szFilter[] = _T( "Eternity Skin File (*.skn)|*.skn|Eternity Animation File (*.ani)|*.ani|Eternity Support File (*.skn;*.ani)|*.skn;*.ani|All Files (*.*)|*.*||" ); CFileDialog dlg( FALSE, _T("skn"), _T("*.skn"), OFN_HIDEREADONLY|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST| OFN_ENABLESIZING , szFilter, CGlobalValue::GetInstance().GetView() ); dlg.m_ofn.lpstrTitle = "Save As Skin File"; if( IDOK != dlg.DoModal() ) { return; } HTREEITEM hti = m_SelectItemList.GetHead(); CObjectSkin *pBase = (CObjectSkin *)CGlobalValue::GetInstance().GetObjectFromTreeID( hti ); if( !pBase ) return; pBase->SaveSkin( dlg.GetPathName() ); // ±âÁ¸°Å »©¹ö¸®±¸ ´Ù½Ã ÀоîÁØ´Ù. HTREEITEM hParent = pBase->GetParent()->GetTreeItemID(); CGlobalValue::GetInstance().RemoveObjectFromTreeID( hti ); char szTemp[512]; _GetFullFileName( szTemp, _countof(szTemp), dlg.GetPathName() ); pBase = new CObjectSkin; pBase->SetName( CString(szTemp) ); ((CObjectSkin*)pBase)->LoadSkin( dlg.GetPathName(), true ); CGlobalValue::GetInstance().AddObject( hParent, pBase ); } void CWorkspacePaneView::OnAnimationAdd() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CString szFileList; TCHAR szFilter[] = _T( "Eternity Animation File (*.ani)|*.ani|Eternity Skin File (*.skn)|*.skn|Eternity Support File (*.skn;*.ani)|*.skn;*.ani|All Files (*.*)|*.*||" ); CFileDialog dlg( TRUE, _T("ani"), _T("*.ani"), OFN_HIDEREADONLY|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_ALLOWMULTISELECT| OFN_ENABLESIZING , szFilter, CGlobalValue::GetInstance().GetView() ); dlg.GetOFN().lpstrFile = szFileList.GetBuffer(100000); dlg.GetOFN().nMaxFile = 100000; dlg.m_ofn.lpstrTitle = "Open Eternity Engine File"; if( IDOK != dlg.DoModal() ) { szFileList.ReleaseBuffer(); return; } std::vector szVecAniList; CGlobalValue::GetInstance().ParseFileList( szFileList, "ani", szVecAniList ); szFileList.ReleaseBuffer(); if( szVecAniList.size() == 0 ) return; float fPer = 100 / (float)szVecAniList.size(); CGlobalValue::GetInstance().UpdateProgress( 0 ); for( DWORD i=0; iLoadAnimation( szVecAniList[i] ) == false ) { SAFE_DELETE( pBase ); } else CGlobalValue::GetInstance().AddObject( m_SelectItemList.GetHead(), pBase ); CGlobalValue::GetInstance().UpdateProgress( (int)(fPer * (i+1)) ); } CGlobalValue::GetInstance().UpdateProgress( 0 ); } void CWorkspacePaneView::OnAnimationRemove() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. POSITION p = m_SelectItemList.GetHeadPosition(); HTREEITEM hti; while(p) { hti = m_SelectItemList.GetNext( p ); CGlobalValue::GetInstance().RemoveObjectFromTreeID( hti ); } } void CWorkspacePaneView::OnAnimationMerge() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. POSITION p = m_SelectItemList.GetHeadPosition(); HTREEITEM hti; std::vector szVecFileList; std::vector hVecItemList; std::vector szVecParentList; std::vector hVecParentItemList; while(p) { hti = m_SelectItemList.GetNext( p ); CObjectAnimation *pBase = (CObjectAnimation*)CGlobalValue::GetInstance().GetObjectFromTreeID( hti ); if( pBase && pBase->GetParent() ) { bool bFlag = true; for( DWORD i=0; iGetParent()->GetName() ) == NULL ) { bFlag = false; break; } } if( bFlag == true ) { szVecParentList.push_back( pBase->GetParent()->GetName() ); hVecParentItemList.push_back( pBase->GetParent()->GetTreeItemID() ); } } szVecFileList.push_back( pBase->GetFileName() ); hVecItemList.push_back( hti ); } if( szVecFileList.size() <= 1 ) return; TCHAR szFilter[] = _T( "Eternity Animation File (*.ani)|*.ani|All Files (*.*)|*.*||" ); CFileDialog dlg( FALSE, _T("ani"), _T("*.ani"), OFN_HIDEREADONLY|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST| OFN_ENABLESIZING , szFilter, CGlobalValue::GetInstance().GetView() ); dlg.m_ofn.lpstrTitle = "Save Merge Animation"; if( IDOK != dlg.DoModal() ) { return; } CWnd *pWnd = GetPaneWnd( ANI_PANE ); pWnd->SendMessage( UM_ANICONTROL_REFRESH ); // ¸ÓÁöÇØ¼­ ÀúÀå CGlobalValue::GetInstance().UpdateProgress( 0 ); float fPer = 100 / (float)szVecFileList.size(); CEtResource::FlushWaitDelete(); EtAniHandle MergeHandle, DummyHandle; MergeHandle = EternityEngine::LoadAni( szVecFileList[0] ); for( DWORD i=1; iLoadAnimation( dlg.GetPathName() ) == false ) { SAFE_DELETE( pBase ); } else CGlobalValue::GetInstance().AddObject( hVecParentItemList[i], pBase ); CGlobalValue::GetInstance().UpdateProgress( (int)(fPer * (i+1)) ); } CGlobalValue::GetInstance().UpdateProgress( 0 ); CEtResource::FlushWaitDelete(); } void CWorkspacePaneView::OnCommonRemove() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. POSITION p = m_SelectItemList.GetHeadPosition(); HTREEITEM hti; while(p) { hti = m_SelectItemList.GetNext( p ); CGlobalValue::GetInstance().RemoveObjectFromTreeID( hti ); } } void CWorkspacePaneView::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTREEVIEW pNMTreeView = reinterpret_cast(pNMHDR); // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. RefreshSelectInfo(); *pResult = 0; } LRESULT CWorkspacePaneView::OnCheckItem( WPARAM wParam, LPARAM lParam ) { HTREEITEM hti = (HTREEITEM)wParam; CObjectBase *pBase = CGlobalValue::GetInstance().GetObjectFromTreeID( hti ); pBase->Show( lParam == 1 ); return S_OK; } void CWorkspacePaneView::RefreshSelectInfo() { POSITION p = m_SelectItemList.GetHeadPosition(); HTREEITEM hti; while(p) { hti = m_SelectItemList.GetNext( p ); CObjectBase *pBase = CGlobalValue::GetInstance().GetObjectFromTreeID( hti ); if( pBase ) pBase->SetFocus( false ); } CGlobalValue::GetInstance().SetControlObject( NULL ); CalcSelectItemList(); p = m_SelectItemList.GetHeadPosition(); while(p) { hti = m_SelectItemList.GetNext( p ); CObjectBase *pBase = CGlobalValue::GetInstance().GetObjectFromTreeID( hti ); if( pBase ) pBase->SetFocus( true ); } int nCount = (int)m_SelectItemList.GetCount(); if( nCount == 0 ) { } else if( nCount > 1 ) { // ¿©·¯°Ô °ñ¶óÁú °æ¿ì Properties °¡´ÉÇÑ °æ¿ì Ã¼Å©ÇØ¼­ Enable, Disable ÇØÁà¾ß Çϴµ¥.. À½.. Áö±ÝÀº ¾ÈµÚ¾ß~ // Submesh - ½Ã¸àƽ °°Àº °Íµé¸¸ ¸ð¾Æ¼­ ÆíÁý °¡´ÉÇϰÔ.. Ä®¶ó°ªÁ¤µµ // Light - °°Àº Á¾·ùÀÇ ¶óÀÌÆ®µé¸¸ - Ä®¶ó°ªÁ¤µµ CWnd *pWnd = GetPaneWnd( PROP_SHADER_PANE ); pWnd->SendMessage( UM_SHADERPROP_REFRESH ); pWnd = GetPaneWnd( ANI_PANE ); pWnd->SendMessage( UM_ANICONTROL_REFRESH ); ((CMainFrame*)AfxGetMainWnd())->SetFocus( PROP_SHADER_PANE ); } else { HTREEITEM hti = m_SelectItemList.GetHead(); CString szName = m_TreeCtrl.GetItemText( m_SelectItemList.GetHead() ); CObjectBase *pBase = CGlobalValue::GetInstance().GetObjectFromTreeID( hti ); CGlobalValue::GetInstance().SetControlObject( pBase ); CWnd *pWnd; switch( pBase->GetType() ) { case CObjectBase::SKIN: case CObjectBase::SUBMESH: case CObjectBase::LIGHTFOLDER: case CObjectBase::LIGHTDIR: case CObjectBase::LIGHTPOINT: case CObjectBase::LIGHTSPOT: case CObjectBase::SCENE: pWnd = GetPaneWnd( PROP_SHADER_PANE ); pWnd->SendMessage( UM_SHADERPROP_REFRESH, (WPARAM)pBase ); pWnd = GetPaneWnd( ANI_PANE ); pWnd->SendMessage( UM_ANICONTROL_REFRESH ); ((CMainFrame*)AfxGetMainWnd())->SetFocus( PROP_SHADER_PANE ); break; case CObjectBase::ANIMATION: pWnd = GetPaneWnd( PROP_SHADER_PANE ); pWnd->SendMessage( UM_SHADERPROP_REFRESH ); pWnd = GetPaneWnd( ANI_PANE ); pWnd->SendMessage( UM_ANICONTROL_REFRESH, (WPARAM)pBase ); ((CMainFrame*)AfxGetMainWnd())->SetFocus( ANI_PANE ); break; default: pWnd = GetPaneWnd( PROP_SHADER_PANE ); pWnd->SendMessage( UM_SHADERPROP_REFRESH ); pWnd = GetPaneWnd( ANI_PANE ); pWnd->SendMessage( UM_ANICONTROL_REFRESH ); ((CMainFrame*)AfxGetMainWnd())->SetFocus( PROP_SHADER_PANE ); break; } } } LRESULT CWorkspacePaneView::OnGetTreeCtrl( WPARAM wParam, LPARAM lParam ) { CTreeCtrl *pCtrl = (CTreeCtrl *)wParam; pCtrl = &m_TreeCtrl; return S_OK; } void CWorkspacePaneView::OnLightAddDir() { HTREEITEM hti = m_SelectItemList.GetHead(); CObjectBase *pBase = new CObjectLightDir; CGlobalValue::GetInstance().AddObject( hti, pBase ); } void CWorkspacePaneView::OnLightAddPoint() { HTREEITEM hti = m_SelectItemList.GetHead(); CObjectBase *pBase = new CObjectLightPoint; CGlobalValue::GetInstance().AddObject( hti, pBase ); } void CWorkspacePaneView::OnLightAddSpot() { HTREEITEM hti = m_SelectItemList.GetHead(); CObjectBase *pBase = new CObjectLightSpot; CGlobalValue::GetInstance().AddObject( hti, pBase ); } void CWorkspacePaneView::OnLightRemove() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. POSITION p = m_SelectItemList.GetHeadPosition(); HTREEITEM hti; while(p) { hti = m_SelectItemList.GetNext( p ); CGlobalValue::GetInstance().RemoveObjectFromTreeID( hti ); } }