// LayerGrassView.cpp : implementation file // #include "stdafx.h" #include "EtWorldPainter.h" #include "LayerGrassView.h" #include "GlobalValue.h" #include "TEtWorld.h" #include "TEtWorldSector.h" #include "PaneDefine.h" #include "resource.h" #include "MainFrm.h" #include "EtWorldPainterDoc.h" #include "EtWorldPainterView.h" #include "UserMessage.h" // CLayerGrassView PropertyGridBaseDefine g_GrassInfoPropertyDefine[] = { { "Common", "Shake Min", CUnionValueProperty::Float, "Èçµé¸² ÃÖ¼Ò°ª|1.f|100.f|1.f", TRUE }, { "Common", "Shake Max", CUnionValueProperty::Float, "Èçµé¸² ÃÖ´ë°ª|1.f|100.f|1.f", TRUE }, { "Grass #1", "Width", CUnionValueProperty::Float, "1¹øÇ® °¡·Î»çÀÌÁî|1.f|1000.f|1.f", TRUE }, { "Grass #1", "Height - Min", CUnionValueProperty::Float, "1¹øÇ® ¼¼·Î ÃÖ¼Ò »çÀÌÁî|1.f|1000.f|1.f", TRUE }, { "Grass #1", "Height - Max", CUnionValueProperty::Float, "1¹øÇ® ¼¼·Î ÃÖ¼Ò »çÀÌÁî|1.f|1000.f|1.f", TRUE }, { "Grass #2", "Width", CUnionValueProperty::Float, "2¹øÇ® °¡·Î»çÀÌÁî|1.f|1000.f|1.f", TRUE }, { "Grass #2", "Height - Min", CUnionValueProperty::Float, "2¹øÇ® ¼¼·Î ÃÖ¼Ò »çÀÌÁî|1.f|1000.f|1.f", TRUE }, { "Grass #2", "Height - Max", CUnionValueProperty::Float, "2¹øÇ® ¼¼·Î ÃÖ¼Ò »çÀÌÁî|1.f|1000.f|1.f", TRUE }, { "Grass #3", "Width", CUnionValueProperty::Float, "3¹øÇ® °¡·Î»çÀÌÁî|1.f|1000.f|1.f", TRUE }, { "Grass #3", "Height - Min", CUnionValueProperty::Float, "3¹øÇ® ¼¼·Î ÃÖ¼Ò »çÀÌÁî|1.f|1000.f|1.f", TRUE }, { "Grass #3", "Height - Max", CUnionValueProperty::Float, "3¹øÇ® ¼¼·Î ÃÖ¼Ò »çÀÌÁî|1.f|1000.f|1.f", TRUE }, { "Grass #4", "Width", CUnionValueProperty::Float, "4¹øÇ® °¡·Î»çÀÌÁî|1.f|1000.f|1.f", TRUE }, { "Grass #4", "Height - Min", CUnionValueProperty::Float, "4¹øÇ® ¼¼·Î ÃÖ¼Ò »çÀÌÁî|1.f|1000.f|1.f", TRUE }, { "Grass #4", "Height - Max", CUnionValueProperty::Float, "4¹øÇ® ¼¼·Î ÃÖ¼Ò »çÀÌÁî|1.f|1000.f|1.f", TRUE }, { NULL }, }; IMPLEMENT_DYNCREATE(CLayerGrassView, CFormView) CLayerGrassView::CLayerGrassView() : CFormView(CLayerGrassView::IDD) { m_bActivate = false; m_pdcBitmap = NULL; m_pmemDC = NULL; m_nTextureCount = 1; m_nSelectTextureIndex = -1; m_nSelectBlockIndex = -1; m_nDrawFlag = 0; m_ScrollPos = m_ScrollSize = CSize( 0, 0 ); m_nSlotWidth = 165; m_nSlotHeight = 130; } CLayerGrassView::~CLayerGrassView() { DeleteMemDC(); } void CLayerGrassView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CLayerGrassView, CFormView) ON_WM_CREATE() ON_WM_SIZE() ON_WM_ERASEBKGND() ON_WM_PAINT() ON_MESSAGE( UM_REFRESH_PANE_VIEW, OnRefresh ) ON_MESSAGE( UM_TILEPANE_DROPITEM, OnDropItem ) ON_MESSAGE( UM_TILEPANE_DROPMOVEITEM, OnDropMoveItem ) ON_WM_MOUSEWHEEL() ON_COMMAND(ID_GRASS_1, &CLayerGrassView::OnGrass1) ON_COMMAND(ID_GRASS_2, &CLayerGrassView::OnGrass2) ON_COMMAND(ID_GRASS_3, &CLayerGrassView::OnGrass3) ON_COMMAND(ID_GRASS_4, &CLayerGrassView::OnGrass4) ON_UPDATE_COMMAND_UI(ID_GRASS_1, &CLayerGrassView::OnUpdateGrass1) ON_UPDATE_COMMAND_UI(ID_GRASS_2, &CLayerGrassView::OnUpdateGrass2) ON_UPDATE_COMMAND_UI(ID_GRASS_3, &CLayerGrassView::OnUpdateGrass3) ON_UPDATE_COMMAND_UI(ID_GRASS_4, &CLayerGrassView::OnUpdateGrass4) ON_MESSAGE(XTPWM_PROPERTYGRID_NOTIFY, OnGridNotify) ON_COMMAND(ID_RELOAD, &CLayerGrassView::OnReload) END_MESSAGE_MAP() // CLayerGrassView diagnostics #ifdef _DEBUG void CLayerGrassView::AssertValid() const { CFormView::AssertValid(); } #ifndef _WIN32_WCE void CLayerGrassView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif #endif //_DEBUG // CLayerGrassView message handlers int CLayerGrassView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFormView::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_GRASSLIST); m_wndToolBar.GetControls()->SetControlType( 0, xtpControlButton ); m_wndToolBar.GetControls()->SetControlType( 1, xtpControlButton ); m_wndToolBar.GetControls()->SetControlType( 2, xtpControlButton ); m_wndToolBar.GetControls()->SetControlType( 3, xtpControlButton ); m_wndToolBar.GetControls()->SetControlType( 4, xtpControlButton ); return 0; } void CLayerGrassView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); DeleteMemDC(); CreateMemDC(); ResetScroll(); // 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( m_PropertyGrid ) { m_PropertyGrid.SetWindowPos( NULL, 0, nTop, cx, ( cy - nTop ) / 2, SWP_FRAMECHANGED ); } } BOOL CLayerGrassView::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default // return CFormView::OnEraseBkgnd(pDC); return TRUE; } void CLayerGrassView::CreateMemDC() { if( m_pdcBitmap || m_pmemDC ) return; m_pmemDC = new CDC; m_pdcBitmap = new CBitmap; CRect rcRect, rcToolbar; GetClientRect( &rcRect ); m_wndToolBar.GetClientRect( &rcToolbar ); rcRect.top += rcToolbar.Height(); CDC *pDC = GetDC(); m_pmemDC->CreateCompatibleDC( pDC ); m_pdcBitmap->CreateCompatibleBitmap( pDC, rcRect.Width(), rcRect.Height() ); ReleaseDC( pDC ); } void CLayerGrassView::DeleteMemDC() { if( m_pdcBitmap ) { m_pdcBitmap->DeleteObject(); SAFE_DELETE( m_pdcBitmap ); } if( m_pmemDC ) { m_pmemDC->DeleteDC(); SAFE_DELETE( m_pmemDC ); } } LRESULT CLayerGrassView::OnRefresh( WPARAM wParam, LPARAM lParam ) { SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) return S_OK; CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( pSector == NULL ) return S_OK; if( (int)wParam == 1 ) { m_nSelectBlockIndex = -1; m_nDrawFlag = 0; } int nPrevBlockIndex = m_nSelectBlockIndex; int nPrevDrawFlag = m_nDrawFlag; m_nTextureCount = 1; m_nSelectBlockIndex = -1; if( CGlobalValue::GetInstance().m_bEditBlock == true ) { int nSize = (int)CGlobalValue::GetInstance().m_nVecEditBlockList.size(); if( nSize == 0 ) m_nDrawFlag = 1; else if( nSize == 1 ) { m_nSelectBlockIndex = CGlobalValue::GetInstance().m_nVecEditBlockList[0]; m_nDrawFlag = 4; } else { bool bCheckSame = true; if( bCheckSame == true ) { m_nSelectBlockIndex = CGlobalValue::GetInstance().m_nVecEditBlockList[0]; m_nDrawFlag = 5; } else { m_nDrawFlag = 2; } } } else { int nIndex = pSector->GetCurrentBlock(); if( nIndex == -1 ) m_nDrawFlag = 3; else { m_nSelectBlockIndex = nIndex; m_nDrawFlag = 4; } } if( m_nSelectBlockIndex == nPrevBlockIndex && nPrevDrawFlag == m_nDrawFlag ) return S_OK; ResetPropertyGrid(); RefreshPropertyGrid( g_GrassInfoPropertyDefine ); ResetScroll(); Invalidate(); return S_OK; } void CLayerGrassView::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. // ±×¸®±â ¸Þ½ÃÁö¿¡ ´ëÇØ¼­´Â CFormView::OnPaint()À»(¸¦) È£ÃâÇÏÁö ¸¶½Ê½Ã¿À. CreateMemDC(); CBitmap *pOldBitmap; CRect rcRect, rcToolbar, rcProp; GetClientRect( &rcRect ); m_wndToolBar.GetClientRect( &rcToolbar ); m_PropertyGrid.GetClientRect( &rcProp ); pOldBitmap = m_pmemDC->SelectObject( m_pdcBitmap ); m_pmemDC->FillSolidRect( &rcRect, RGB( 0, 0, 0 ) ); switch( m_nDrawFlag ) { case 0: break; case 1: DrawCannotView( m_pmemDC, "ºí·°À» ¼±ÅÃÇÏ¿© ÁÖ¼¼¿ä." ); break; case 2: DrawCannotView( m_pmemDC, "°°Áö ¾Ê´Â ºí·°µé ¼±ÅÃ" ); break; case 3: DrawCannotView( m_pmemDC, "Ç¥½ÃÇÒ ¼ö ¾ø½À´Ï´Ù." ); break; case 4: DrawSlot( m_pmemDC, m_nSelectBlockIndex ); break; case 5: DrawSlot( m_pmemDC, m_nSelectBlockIndex, false ); break; } // ½ºÅ©·Ñ ±×¸°´Ù. rcRect.top += rcToolbar.Height(); rcRect.top += rcProp.Height(); CRect rcScroll; rcScroll.top = 0; rcScroll.bottom = rcRect.bottom; rcScroll.left = rcRect.right - 7; rcScroll.right = rcRect.right; m_pmemDC->Draw3dRect( &rcScroll, RGB( 129, 129, 129 ), RGB( 255, 255, 255 ) ); if( m_ScrollSize.cy != 0 ) { CRect rcPos; rcPos.left = rcScroll.left + 1; rcPos.right = rcScroll.right - 1; rcPos.top = rcScroll.top + (int)( ( ( rcScroll.Height() - 20 ) / (float)m_ScrollSize.cy ) * (float)m_ScrollPos.cy ); rcPos.bottom = rcPos.top + 20; m_pmemDC->FillSolidRect( &rcPos, RGB( 250, 213, 14 ) ); } dc.BitBlt( rcRect.left, rcRect.top, rcRect.Width(), rcRect.Height() , m_pmemDC, 0, 0, SRCCOPY ); m_pmemDC->SelectObject( pOldBitmap ); } CRect CLayerGrassView::GetSlotRect( int nSlotIndex ) { CRect rcSlot; CRect rcRect; GetClientRect( &rcRect ); int nWidthCount = ( rcRect.Width() - 5 ) / ( m_nSlotWidth + 5 ); if( nWidthCount < 1 ) nWidthCount = 1; rcSlot.left = 5 + ( ( m_nSlotWidth + 5 ) * ( nSlotIndex % nWidthCount ) ); rcSlot.top = 5 + ( ( m_nSlotHeight + 5 ) * ( nSlotIndex / nWidthCount ) ); rcSlot.right = rcSlot.left + m_nSlotWidth; rcSlot.bottom = rcSlot.top + m_nSlotHeight; return rcSlot; } void CLayerGrassView::DrawSlot( CDC *pDC, int nBlockIndex, bool bDrawImage ) { SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) return; CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( pSector == NULL ) return; int nImageCount = m_nTextureCount; CWnd *pWnd = GetPaneWnd( TILEMNG_PANE ); const char *szFileName; CRect rcSlot, rcTemp; TileStruct *pStruct = NULL; CString szTemp; pDC->SetBkMode( TRANSPARENT ); pDC->SelectStockObject( DEFAULT_GUI_FONT ); pDC->SetTextColor( RGB( 255, 255, 255 ) ); pDC->SetStretchBltMode( COLORONCOLOR ); for( int i=0; iFillSolidRect( &rcSlot, RGB( 255, 50, 20 ) ); } pDC->Draw3dRect( &rcSlot, RGB( 128, 128, 128 ), RGB( 255, 255, 255 ) ); rcTemp = rcSlot; rcTemp.bottom = rcTemp.top + 15; pDC->Draw3dRect( &rcTemp, RGB( 128, 128, 128 ), RGB( 255, 255, 255 ) ); szFileName = pSector->GetGrassTextureName( nBlockIndex ); pStruct = (TileStruct*)pWnd->SendMessage( UM_TILEPANE_GET_PREVIEW_IMAGE, (WPARAM)szFileName ); if( pStruct ) { szTemp.Format( "%d x %d", pStruct->SurfaceDesc.Width, pStruct->SurfaceDesc.Height ); pDC->IntersectClipRect( &rcTemp ); pDC->TextOut( rcTemp.left + 1, rcTemp.top + 2, szTemp ); pDC->SelectClipRgn( NULL ); } rcTemp = rcSlot; rcTemp.top = rcTemp.bottom - 15; pDC->Draw3dRect( &rcTemp, RGB( 128, 128, 128 ), RGB( 255, 255, 255 ) ); pDC->IntersectClipRect( &rcTemp ); pDC->TextOut( rcTemp.left + 1, rcTemp.top + 2, CString(szFileName) ); pDC->SelectClipRgn( NULL ); // ±×¸²À» ±×·ÁÁØ´ç~ if( bDrawImage == true ) { if( !pWnd ) continue; pStruct = (TileStruct*)pWnd->SendMessage( UM_TILEPANE_GET_PREVIEW_IMAGE, (WPARAM)szFileName ); if( !pStruct ) continue; rcTemp = rcSlot; rcTemp.top += 15; rcTemp.bottom -= 15; rcTemp.left += 1; rcTemp.right -= 1; pDC->StretchBlt( rcTemp.left, rcTemp.top, rcTemp.Width(), rcTemp.Height(), pStruct->pmemDC, 0, 0, pStruct->SurfaceDesc.Width, pStruct->SurfaceDesc.Height, SRCPAINT ); } else { rcTemp = rcSlot; rcTemp.top += 15; rcTemp.bottom -= 15; rcTemp.left += 1; rcTemp.right -= 1; pDC->IntersectClipRect( &rcTemp ); pDC->TextOut( rcTemp.left + 1, rcTemp.top + 2, "Multi Select" ); pDC->SelectClipRgn( NULL ); } } } LRESULT CLayerGrassView::OnDropItem( WPARAM wParam, LPARAM lParam ) { CPoint p; p.x = (long)lParam >> 16; p.y = (long)( lParam << 16 ) >> 16; p.y += m_ScrollPos.cy; char *szFileName = (char *)wParam; CRect rcRect; m_wndToolBar.GetClientRect( &rcRect ); p.y -= rcRect.Height(); m_PropertyGrid.GetClientRect( &rcRect ); p.y -= rcRect.Height(); m_nSelectTextureIndex = -1; for( int i=0; i= rcRect.left && p.x <= rcRect.right && p.y >= rcRect.top && p.y <= rcRect.bottom ) { ChangeTexture( szFileName ); break; } } SendMessage( UM_REFRESH_PANE_VIEW ); return S_OK; } LRESULT CLayerGrassView::OnDropMoveItem( WPARAM wParam, LPARAM lParam ) { CPoint p; p.x = (long)wParam >> 16; p.y = (long)( wParam << 16 ) >> 16; p.y += m_ScrollPos.cy; CRect rcRect; m_wndToolBar.GetClientRect( &rcRect ); p.y -= rcRect.Height(); m_PropertyGrid.GetClientRect( &rcRect ); p.y -= rcRect.Height(); m_nSelectTextureIndex = -1; for( int i=0; i= rcRect.left && p.x <= rcRect.right && p.y >= rcRect.top && p.y <= rcRect.bottom ) { m_nSelectTextureIndex = i; break; } } Invalidate(); return S_OK; } void CLayerGrassView::ChangeTexture( char *szFileName ) { SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) return; CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( pSector == NULL ) return; // if( CGlobalValue::GetInstance().m_bEditBlock != true ) return; // if( CGlobalValue::GetInstance().m_nVecEditBlockList.size() == 0 ) return; /* // Add Undo/Redo Infomation CString szDesc; std::vector szVecPrevNameList; for( DWORD i=0; iGetTextureName( CGlobalValue::GetInstance().m_nVecEditBlockList[i], m_nLayerIndex + ( nTextureIndex * 4 ) ) ); } CActionElementChangeTexture *pAction = new CActionElementChangeTexture( pSector ); szDesc.Format( "Change Block Texture : %d", CGlobalValue::GetInstance().m_nVecEditBlockList.size() ); pAction->SetDesc( szDesc ); pAction->ChangeTexture( m_nLayerIndex, nTextureIndex, CGlobalValue::GetInstance().m_nVecEditBlockList, szVecPrevNameList, szFileName ); pAction->AddAction(); */ // Change pSector->SetGrassTexture( -1, szFileName ); CGlobalValue::GetInstance().RefreshRender(); SendMessage( UM_REFRESH_PANE_VIEW, 1 ); CGlobalValue::GetInstance().SetModify(); } void CLayerGrassView::ResetScroll() { if( m_nTextureCount == 0 ) { m_ScrollPos = CSize( 0, 0 ); m_ScrollSize = CSize( 0, 0 ); return; } CRect rcRect; GetClientRect( &rcRect ); int nWidthCount = ( rcRect.Width() - 5 ) / ( m_nSlotWidth + 5 ); int nHeightCount = ( rcRect.Height() - 5 ) / ( m_nSlotHeight + 5 ); if( nWidthCount < 1 ) nWidthCount = 1; if( nHeightCount < 1 ) nHeightCount = 1; int nCount = m_nTextureCount / 4; int nNeedHeightCount = nCount / nWidthCount; if( nCount % nWidthCount != 0 ) nNeedHeightCount++; m_ScrollSize.cx = 0; m_ScrollSize.cy = 0; if( nNeedHeightCount > nHeightCount ) { m_ScrollSize.cx = 0; m_ScrollSize.cy = nNeedHeightCount * m_nSlotHeight; if( m_ScrollPos.cy > m_ScrollSize.cy ) m_ScrollPos.cy = m_ScrollSize.cy; } } BOOL CLayerGrassView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. if( zDelta > 0 ) m_ScrollPos.cy -= ( m_nSlotHeight + 5 ); else m_ScrollPos.cy += ( m_nSlotHeight + 5 ); if( m_ScrollPos.cy < 0 ) m_ScrollPos.cy = 0; else if( m_ScrollPos.cy >= m_ScrollSize.cy ) m_ScrollPos.cy = m_ScrollSize.cy; Invalidate(); return CFormView::OnMouseWheel(nFlags, zDelta, pt); } void CLayerGrassView::DrawCannotView( CDC *pDC, char *szStr ) { CRect rcRect; GetClientRect( &rcRect ); pDC->SetBkMode( TRANSPARENT ); pDC->SelectStockObject( DEFAULT_GUI_FONT ); pDC->SetTextColor( RGB( 255, 255, 255 ) ); pDC->TextOut( rcRect.left, rcRect.Height() / 2, szStr ); } void CLayerGrassView::OnGrass1() { CXTPControl *pCtrl = m_wndToolBar.GetControls()->FindControl( xtpControlError, ID_GRASS_1, TRUE, FALSE ); CXTPControlButton *pButton = (CXTPControlButton *)pCtrl; CGlobalValue::GetInstance().m_bEnableGrassIndex[0] = !CGlobalValue::GetInstance().m_bEnableGrassIndex[0]; pButton->SetChecked( CGlobalValue::GetInstance().m_bEnableGrassIndex[0] ); } void CLayerGrassView::OnGrass2() { CXTPControl *pCtrl = m_wndToolBar.GetControls()->FindControl( xtpControlError, ID_GRASS_2, TRUE, FALSE ); CXTPControlButton *pButton = (CXTPControlButton *)pCtrl; CGlobalValue::GetInstance().m_bEnableGrassIndex[1] = !CGlobalValue::GetInstance().m_bEnableGrassIndex[1]; pButton->SetChecked( CGlobalValue::GetInstance().m_bEnableGrassIndex[1] ); } void CLayerGrassView::OnGrass3() { CXTPControl *pCtrl = m_wndToolBar.GetControls()->FindControl( xtpControlError, ID_GRASS_3, TRUE, FALSE ); CXTPControlButton *pButton = (CXTPControlButton *)pCtrl; CGlobalValue::GetInstance().m_bEnableGrassIndex[2] = !CGlobalValue::GetInstance().m_bEnableGrassIndex[2]; pButton->SetChecked( CGlobalValue::GetInstance().m_bEnableGrassIndex[2] ); } void CLayerGrassView::OnGrass4() { CXTPControl *pCtrl = m_wndToolBar.GetControls()->FindControl( xtpControlError, ID_GRASS_4, TRUE, FALSE ); CXTPControlButton *pButton = (CXTPControlButton *)pCtrl; CGlobalValue::GetInstance().m_bEnableGrassIndex[3] = !CGlobalValue::GetInstance().m_bEnableGrassIndex[3]; pButton->SetChecked( CGlobalValue::GetInstance().m_bEnableGrassIndex[3] ); } void CLayerGrassView::OnUpdateGrass1(CCmdUI *pCmdUI) { SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) { pCmdUI->Enable( FALSE ); return; } CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( pSector == NULL ) { pCmdUI->Enable( FALSE ); return; } if( m_nSelectBlockIndex == -1 ) pCmdUI->Enable( FALSE ); else pCmdUI->Enable( TRUE ); } void CLayerGrassView::OnUpdateGrass2(CCmdUI *pCmdUI) { SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) { pCmdUI->Enable( FALSE ); return; } CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( pSector == NULL ) { pCmdUI->Enable( FALSE ); return; } if( m_nSelectBlockIndex == -1 ) pCmdUI->Enable( FALSE ); else pCmdUI->Enable( TRUE ); } void CLayerGrassView::OnUpdateGrass3(CCmdUI *pCmdUI) { SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) { pCmdUI->Enable( FALSE ); return; } CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( pSector == NULL ) { pCmdUI->Enable( FALSE ); return; } if( m_nSelectBlockIndex == -1 ) pCmdUI->Enable( FALSE ); else pCmdUI->Enable( TRUE ); } void CLayerGrassView::OnUpdateGrass4(CCmdUI *pCmdUI) { SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) { pCmdUI->Enable( FALSE ); return; } CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( pSector == NULL ) { pCmdUI->Enable( FALSE ); return; } if( m_nSelectBlockIndex == -1 ) pCmdUI->Enable( FALSE ); else pCmdUI->Enable( TRUE ); } LRESULT CLayerGrassView::OnGridNotify(WPARAM wParam, LPARAM lParam) { return ProcessNotifyGrid( wParam, lParam ); } void CLayerGrassView::OnInitialUpdate() { __super::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the base class if( m_bActivate == true ) return; m_bActivate = true; CRect rcRect, rcToolbar; GetClientRect( &rcRect ); m_wndToolBar.GetClientRect( &rcToolbar ); rcRect.top = rcRect.bottom - ( ( rcRect.Height() - rcToolbar.Height() ) / 2 ); m_PropertyGrid.Create( rcRect, this, 0 ); m_PropertyGrid.SetCustomColors( RGB(200, 200, 200), 0, RGB(182, 210, 189), RGB(247, 243, 233), 0 ); } void CLayerGrassView::OnSetValue( CUnionValueProperty *pVariable, DWORD dwIndex ) { SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) return; CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( !pSector ) return; switch( dwIndex ) { case 0: pVariable->SetVariable( pSector->GetGrassShakeMin() ); break; case 1: pVariable->SetVariable( pSector->GetGrassShakeMax() ); break; } if( dwIndex > 1 ) { int nIndex = (dwIndex-2) / 3; switch( (dwIndex-2)%3 ) { case 0: pVariable->SetVariable( pSector->GetGrassWidth( nIndex ) ); break; case 1: pVariable->SetVariable( pSector->GetGrassHeightMin( nIndex ) ); break; case 2: pVariable->SetVariable( pSector->GetGrassHeightMax( nIndex ) ); break; } } } void CLayerGrassView::OnChangeValue( CUnionValueProperty *pVariable, DWORD dwIndex ) { SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) return; CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( !pSector ) return; switch( dwIndex ) { case 0: pSector->SetGrassShakeMin( pVariable->GetVariableFloat() ); break; case 1: pSector->SetGrassShakeMax( pVariable->GetVariableFloat() ); break; } if( dwIndex > 1 ) { int nIndex = (dwIndex-2) / 3; switch( (dwIndex-2)%3 ) { case 0: pSector->SetGrassWidth( nIndex, pVariable->GetVariableFloat() ); break; case 1: pSector->SetGrassHeightMin( nIndex, pVariable->GetVariableFloat() ); break; case 2: pSector->SetGrassHeightMax( nIndex, pVariable->GetVariableFloat() ); break; } } pSector->ApplyGrassInfo(); } void CLayerGrassView::OnReload() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) return; CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( pSector == NULL ) return; int nSize = (int)CGlobalValue::GetInstance().m_nVecEditBlockList.size(); if( nSize > 1 ) return; EtTextureHandle hTexture; #ifdef _TOOLCOMPILE hTexture = pSector->GetGrassTexture(); #endif if( hTexture ) { // ÇöÀç ·ÎµùµÈ ÅØ½ºÃ³¸¦ ¾²´Â TerrainµéÀÇ ÅØ½ºÃ³¸¦ ¸ðµÎ ¸±¸®Áî ÇÏ°í ´Ù½Ã ¼ÂÆÃÇÏ´Â°Ç ÀÛ¾÷·®ÀÌ ¸¹¾Æ¼­ ÀÌ·¸°Ô °­Á¦·Î ·ÎµùÇϴ°ŷΠÇϰڴÙ. CFileStream *pStream = new CFileStream( hTexture->GetFullName() ); hTexture->LoadResource( pStream ); pStream->Close(); SAFE_DELETE( pStream ); } }