// EnviPaneView.cpp : implementation file // #include "stdafx.h" #include "EtWorldPainter.h" #include "EnviPaneView.h" #include "UserMessage.h" #include "EnviControl.h" #include "CreateEnviDlg.h" #include "FileServer.h" #include "EnviBasePaneView.h" #include "EnviLightPaneView.h" #include "TEtWorld.h" #include "TEtWorldSector.h" #include "EnviLightBase.h" // CEnviPaneView IMPLEMENT_DYNCREATE(CEnviPaneView, CFormView) CEnviPaneView::CEnviPaneView() : CFormView(CEnviPaneView::IDD) { m_bActivate = false; m_pBaseView = NULL; m_pLightView = NULL; } CEnviPaneView::~CEnviPaneView() { } void CEnviPaneView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CEnviPaneView, CFormView) ON_WM_SIZE() ON_WM_ERASEBKGND() ON_MESSAGE( UM_REFRESH_PANE_VIEW, OnRefresh ) ON_WM_CREATE() ON_COMMAND(ID_ENVI_NEW, &CEnviPaneView::OnEnviNew) ON_COMMAND(ID_ENVI_SAVEAS, &CEnviPaneView::OnEnviSaveas) ON_COMMAND(ID_ENVI_RELOAD, &CEnviPaneView::OnEnviReload) ON_COMMAND(ID_ENVI_DELETE, &CEnviPaneView::OnEnviDelete) ON_COMMAND(ID_ENVI_LOADLIST, &CEnviPaneView::OnEnviLoadlist) ON_MESSAGE( UM_PROPERTY_PANE_SET_MODIFY, OnSetModify ) ON_COMMAND(ID_ENVI_BAKELIGHTMAP, &CEnviPaneView::OnEnviBakelightmap) ON_UPDATE_COMMAND_UI(ID_ENVI_BAKELIGHTMAP, &CEnviPaneView::OnUpdateEnviBakelightmap) ON_UPDATE_COMMAND_UI(ID_ENVI_SAVEAS, &CEnviPaneView::OnUpdateEnviSaveas) ON_UPDATE_COMMAND_UI(ID_ENVI_RELOAD, &CEnviPaneView::OnUpdateEnviReload) ON_UPDATE_COMMAND_UI(ID_ENVI_DELETE, &CEnviPaneView::OnUpdateEnviDelete) ON_MESSAGE( UM_SOUNDPANE_DROPMOVEITEM, OnSoundPaneDropMoveItem ) ON_MESSAGE( UM_SOUNDPANE_DROPITEM, OnSoundPaneDropItem ) END_MESSAGE_MAP() // CEnviPaneView diagnostics #ifdef _DEBUG void CEnviPaneView::AssertValid() const { CFormView::AssertValid(); } #ifndef _WIN32_WCE void CEnviPaneView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif #endif //_DEBUG // CEnviPaneView message handlers void CEnviPaneView::OnInitialUpdate() { __super::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the base class if( m_bActivate == true ) return; m_bActivate = true; CXTPControl *pControl = m_wndToolBar.GetControls()->FindControl( xtpControlComboBox, ID_ENVI_LOADLIST, TRUE, FALSE ); CXTPControlComboBox* pCombo = (CXTPControlComboBox*)pControl; pCombo->SetWidth( 160 ); pCombo->SetCurSel(0); } int CEnviPaneView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (__super::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here m_wndToolBar.CreateToolBar(WS_VISIBLE|WS_CHILD|CBRS_TOOLTIPS, this); m_wndToolBar.LoadToolBar(IDR_ENVI_TOOLBAR); m_wndToolBar.GetControls()->SetControlType( 4, xtpControlComboBox ); m_wndToolBar.GetControls()->SetControlType( 5, xtpControlButton ); m_TabCtrl.Create(WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS, CRect(0, 0, 0, 0), this, 1001); m_TabCtrl.GetPaintManager()->m_bDisableLunaColors = TRUE; m_TabCtrl.SetAppearance(xtpTabAppearanceStateButtons); m_TabCtrl.GetPaintManager()->m_bHotTracking = TRUE; m_TabCtrl.GetPaintManager()->m_bRotateImageOnVerticalDraw = TRUE; m_TabCtrl.SetPosition( xtpTabPositionLeft ); CCreateContext cc; ZeroMemory(&cc, sizeof(cc)); cc.m_pCurrentDoc = GetDocument(); m_pBaseView = (CEnviBasePaneView*)RUNTIME_CLASS(CEnviBasePaneView)->CreateObject(); ((CWnd *)m_pBaseView)->Create( NULL, NULL, WS_CHILD, CRect( 0, 0, 0, 0 ), &m_TabCtrl, 2005, &cc ); m_pLightView = (CEnviLightPaneView*)RUNTIME_CLASS(CEnviLightPaneView)->CreateObject(); ((CWnd *)m_pLightView)->Create( NULL, NULL, WS_CHILD, CRect( 0, 0, 0, 0 ), &m_TabCtrl, 2006, &cc ); m_TabCtrl.InsertItem( 0, _T("Base"), m_pBaseView->m_hWnd ); m_TabCtrl.InsertItem( 1, _T("Light"), m_pLightView->m_hWnd ); return 0; } void CEnviPaneView::OnSize(UINT nType, int cx, int cy) { __super::OnSize(nType, cx, cy); // TODO: Add your message handler code here int nTop = 0; if( m_wndToolBar.GetSafeHwnd() ) { CSize sz = m_wndToolBar.CalcDockingLayout(cx, LM_HORZDOCK|LM_HORZ | LM_COMMIT); m_wndToolBar.MoveWindow(0, 0, cx, sz.cy); m_wndToolBar.Invalidate(FALSE); nTop += sz.cy; } if( ::IsWindow(m_TabCtrl.m_hWnd) ) { m_TabCtrl.SetWindowPos( NULL, 0, nTop, cx, cy - nTop, SWP_FRAMECHANGED ); } } BOOL CEnviPaneView::OnEraseBkgnd(CDC* pDC) { return TRUE; } BOOL CEnviPaneView::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { // TODO: Add your specialized code here and/or call the base class if( (UINT)wParam == 1001 ) { NMHDR* pNMHDR = (NMHDR*)lParam; switch(pNMHDR->code) { case TCN_SELCHANGING: break; case TCN_SELCHANGE: if( m_TabCtrl.GetCurSel() == 0 ) { m_pBaseView->SendMessage( UM_REFRESH_PANE_VIEW ); CEnviLightBase::s_pFocus = NULL; } else { m_pLightView->SendMessage( UM_REFRESH_PANE_VIEW ); } CGlobalValue::GetInstance().RefreshRender(); break; } } return CFormView::OnNotify(wParam, lParam, pResult); } LRESULT CEnviPaneView::OnRefresh( WPARAM wParam, LPARAM lParam ) { CXTPControl *pControl = m_wndToolBar.GetControls()->FindControl( xtpControlComboBox, ID_ENVI_LOADLIST, TRUE, FALSE ); CXTPControlComboBox* pCombo = (CXTPControlComboBox*)pControl; pCombo->ResetContent(); CEnviElement *pActive = CEnviControl::GetInstance().GetActiveElement(); for( DWORD i=0; iSave(); pCombo->InsertString( pCombo->GetCount(), pElement->GetInfo().GetName() ); if( pActive ) { if( strcmp( pActive->GetInfo().GetName(), pElement->GetInfo().GetName() ) == NULL ) { pCombo->SetCurSel(i); } } } if( m_TabCtrl.GetCurSel() == 0 ) m_pBaseView->SendMessage( UM_REFRESH_PANE_VIEW, wParam, lParam ); else m_pLightView->SendMessage( UM_REFRESH_PANE_VIEW, wParam, lParam ); SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector != -1 ) { CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); CXTPControl *pControl = m_wndToolBar.GetControls()->FindControl( xtpControlButton, ID_ENVI_BAKELIGHTMAP, TRUE, FALSE ); CXTPControlCheckBox* pCheck = (CXTPControlCheckBox*)pControl; pCheck->SetChecked( FALSE ); pSector->EnableLightmap( false ); } return S_OK; } void CEnviPaneView::OnEnviNew() { // TODO: Add your command handler code here CCreateEnviDlg Dlg(this); if( Dlg.DoModal() != IDOK ) return; CEnviControl::GetInstance().CreateElement( Dlg.m_szName, Dlg.m_szCopyTo ); CEnviControl::GetInstance().ActivateElement( Dlg.m_szName ); CXTPControl *pControl = m_wndToolBar.GetControls()->FindControl( xtpControlComboBox, ID_ENVI_LOADLIST, TRUE, FALSE ); CXTPControlComboBox* pCombo = (CXTPControlComboBox*)pControl; pCombo->SetCurSel( pCombo->GetCount() - 1 ); SendMessage( UM_REFRESH_PANE_VIEW ); } void CEnviPaneView::OnEnviSaveas() { // TODO: Add your command handler code here CXTPControl *pControl = m_wndToolBar.GetControls()->FindControl( xtpControlComboBox, ID_ENVI_LOADLIST, TRUE, FALSE ); CXTPControlComboBox* pCombo = (CXTPControlComboBox*)pControl; CString szStr; pCombo->GetLBText( pCombo->GetCurSel(), szStr ); CEnviControl::GetInstance().SaveElement( szStr ); } void CEnviPaneView::OnEnviDelete() { // TODO: Add your command handler code here CXTPControl *pControl = m_wndToolBar.GetControls()->FindControl( xtpControlComboBox, ID_ENVI_LOADLIST, TRUE, FALSE ); CXTPControlComboBox* pCombo = (CXTPControlComboBox*)pControl; CString szStr; pCombo->GetLBText( pCombo->GetCurSel(), szStr ); pCombo->DeleteItem( pCombo->GetCurSel() ); CEnviControl::GetInstance().ActivateElement( "Edit Set" ); pCombo->SetCurSel(0); // ³»ºÎ¿¡¼­ »ç¿ëÇÏ´ø ¸®¼Ò½º ÆÄÀϵé Ã¼Å©ÇØ¼­ Áö¿öÁà¾ß ÇÏÁö¸¸ // Áö±ÝÀº »©³õ´Â´Ù. ³ªÁß¿¡ Ã¼Å©ÇØ¼­ ³ÖÂ÷ CString szFullName; szFullName.Format( "%s\\%s", GetCurrentDir(), szStr ); DeleteFile( szFullName ); CEnviControl::GetInstance().RemoveElement( szStr ); } void CEnviPaneView::OnEnviReload() { CXTPControl *pControl = m_wndToolBar.GetControls()->FindControl( xtpControlComboBox, ID_ENVI_LOADLIST, TRUE, FALSE ); CXTPControlComboBox* pCombo = (CXTPControlComboBox*)pControl; CString szStr; pCombo->GetLBText( pCombo->GetCurSel(), szStr ); CEnviControl::GetInstance().LoadElement( szStr ); CEnviControl::GetInstance().ActivateElement( szStr ); SendMessage( UM_REFRESH_PANE_VIEW ); } void CEnviPaneView::OnEnviLoadlist() { // TODO: Add your command handler code here CXTPControl *pControl = m_wndToolBar.GetControls()->FindControl( xtpControlComboBox, ID_ENVI_LOADLIST, TRUE, FALSE ); CXTPControlComboBox* pCombo = (CXTPControlComboBox*)pControl; CString szStr; pCombo->GetLBText( pCombo->GetCurSel(), szStr ); CEnviControl::GetInstance().ActivateElement( szStr ); SendMessage( UM_REFRESH_PANE_VIEW ); } void CEnviPaneView::CopyAccompanimentFile( const char *szSkinName ) { char szPathTemp[512] = {0,} ; _GetPath( szPathTemp, _countof(szPathTemp), szSkinName ); szPathTemp[strlen(szPathTemp)-1] = 0; // ½Ã½ºÅÛ Æú´õ¿¡ÀÖ´Â°É ¼±ÅÃÇÒ¶§´Â °Á ¸®ÅÏ if( _stricmp( szPathTemp, GetCurrentDir() ) == NULL ) return; BOOL bExist = FALSE; std::vector szVecList; FindFileListInDirectory( GetCurrentDir(), "*.*", szVecList, false, true ); char szTemp[2][512] = { 0, }; _GetFullFileName( szTemp[0], _countof(szTemp[0]), szSkinName ); for( DWORD i=0; i szVecAccompanimentList; if( CalcAccompanimentFile( szSkinName, szVecAccompanimentList ) == false ) { MessageBox( "»ý¼ºÇÒ ¼ö ¾ø´Â ÆÄÀÏÀÔ´Ï´Ù.", "Error", MB_OK ); return; } char szFileName[512] = { 0, }; CString szErrorFileName; CString szErrorStr; CString szFullName; char cResult = 1; for( DWORD m=0; m &szVecList ) { // ÀÚ±âÀڽŵµ ¸®½ºÆ®¿¡ ADd FILE *fp = NULL; szVecList.push_back( szSkinName ); char szBuf[512] = { 0, }; char szExt[64] = { 0, }; CString szPath; _GetPath( szBuf, _countof(szBuf), szSkinName ); _GetExt( szExt, _countof(szExt), szSkinName ); if( strcmp( szExt, "dds" ) == NULL ) return true; szPath = szBuf; // ½ºÅ²À̸§°ú °°Àº À̸§ÀÇ ani º¹»çÇØÁØ´Ù. CString szAniName; memset( szBuf, 0, sizeof(szBuf) ); _GetFileName( szBuf, _countof(szBuf), szSkinName ); szAniName.Format( "%s%s.ani", szPath, szBuf ); fopen_s( &fp, szAniName, "rb" ); if( fp ) { szVecList.push_back( szAniName ); fclose(fp); fp = NULL; } // ½ºÅ²¿¡¼­ »ç¿ëÇÏ´Â msh,texture ÆÄÀÏ º¹»çÇØÁØ´Ù. EtObjectHandle Handle = EternityEngine::CreateStaticObject( szSkinName ); if( !Handle ) { return false; } szVecList.push_back( szPath + Handle->GetMesh()->GetFileName() ); std::string szTempFullName; for( int l=0; lGetSubMeshCount(); l++ ) { for( int m=0; mGetEffectCount(l); m++ ) { SCustomParam *pParam = Handle->GetCustomParam( l, m ); if( pParam->Type != EPT_TEX ) continue; EtResourceHandle hResource = CEtResource::GetResource( pParam->nTextureIndex ); szTempFullName = szPath + hResource->GetFileName(); if( std::find( szVecList.begin(), szVecList.end(), szTempFullName.c_str() ) != szVecList.end() ) continue; szVecList.push_back( szTempFullName.c_str() ); } } SAFE_RELEASE_SPTR( Handle ); return true; } CString CEnviPaneView::GetCurrentDir() { CString szFolder; szFolder.Format( "%s\\Resource\\Envi", CFileServer::GetInstance().GetLocalWorkingFolder() ); return szFolder; } LRESULT CEnviPaneView::OnSetModify( WPARAM wParam, LPARAM lParam ) { return m_pLightView->SendMessage( UM_PROPERTY_PANE_SET_MODIFY, wParam, lParam ); } void CEnviPaneView::OnEnviBakelightmap() { // TODO: Add your command handler code here SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) return; CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); CXTPControl *pControl = m_wndToolBar.GetControls()->FindControl( xtpControlButton, ID_ENVI_BAKELIGHTMAP, TRUE, FALSE ); CXTPControlCheckBox* pCheck = (CXTPControlCheckBox*)pControl; BOOL bCheck = pCheck->GetChecked(); pCheck->SetChecked( !bCheck ); pSector->EnableLightmap( ( bCheck == TRUE ) ? false : true ); CGlobalValue::GetInstance().RefreshRender(); } void CEnviPaneView::OnUpdateEnviBakelightmap(CCmdUI *pCmdUI) { // TODO: Add your command update UI handler code here BOOL bEnable = TRUE; if( !CGlobalValue::GetInstance().IsCheckOutMe() ) bEnable = FALSE; if( CEnviControl::GetInstance().GetActiveElement() == NULL ) bEnable = FALSE; else { if( CEnviControl::GetInstance().GetActiveElement()->GetInfo().GetName() == "Edit Set" ) bEnable = FALSE; if( CEnviControl::GetInstance().GetActiveElement()->GetInfo().GetLightCount() == 0 ) bEnable = FALSE; } pCmdUI->Enable( bEnable ); } void CEnviPaneView::OnUpdateEnviReload(CCmdUI *pCmdUI) { BOOL bEnable = TRUE; if( CEnviControl::GetInstance().GetActiveElement()->GetInfo().GetName() == "Edit Set" ) bEnable = FALSE; pCmdUI->Enable( bEnable ); } void CEnviPaneView::OnUpdateEnviSaveas(CCmdUI *pCmdUI) { BOOL bEnable = TRUE; if( CEnviControl::GetInstance().GetActiveElement()->GetInfo().GetName() == "Edit Set" ) bEnable = FALSE; pCmdUI->Enable( bEnable ); } void CEnviPaneView::OnUpdateEnviDelete(CCmdUI *pCmdUI) { BOOL bEnable = TRUE; if( CEnviControl::GetInstance().GetActiveElement()->GetInfo().GetName() == "Edit Set" ) bEnable = FALSE; pCmdUI->Enable( bEnable ); } LRESULT CEnviPaneView::OnSoundPaneDropMoveItem( WPARAM wParam, LPARAM lParam ) { return m_pBaseView->SendMessage( UM_SOUNDPANE_DROPMOVEITEM, wParam, lParam ); } LRESULT CEnviPaneView::OnSoundPaneDropItem( WPARAM wParam, LPARAM lParam ) { return m_pBaseView->SendMessage( UM_SOUNDPANE_DROPITEM, wParam, lParam ); }