// PageObjectContainer.cpp : implementation file // #include "stdafx.h" #include "worldcreator.h" #include "PageObjectContainer.h" #include "DlgObjectLoad.h" #include "MainFrm.h" #include "WorldCreatorView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPageObjectContainer property page IMPLEMENT_DYNCREATE(CPageObjectContainer, CPropertyPage) CPageObjectContainer::CPageObjectContainer() : CPropertyPage(CPageObjectContainer::IDD) { //{{AFX_DATA_INIT(CPageObjectContainer) m_bBspInput = FALSE; m_bAddObj = FALSE; //}}AFX_DATA_INIT } CPageObjectContainer::~CPageObjectContainer() { /* for(int i=0;iTrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this); *pResult = 0; } BOOL CPageObjectContainer::OnInitDialog() { CPropertyPage::OnInitDialog(); DWORD dwStyle; dwStyle = m_ObjectList.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0 ,0); dwStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES ; m_ObjectList.SendMessage( LVM_SETEXTENDEDLISTVIEWSTYLE, 0,dwStyle ); m_ObjectList.InsertColumn(0,"À̸§",LVCFMT_LEFT,80); m_ObjectList.InsertColumn(1,"¿ÀºêÁ§Æ®",LVCFMT_LEFT,80); m_ObjectList.InsertColumn(2,"¾ËÆÄ",LVCFMT_LEFT,50); m_ObjectList.InsertColumn(3,"¶óÀÌÆ®",LVCFMT_LEFT,50); // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPageObjectContainer::OnObjectLoad() { // TODO: Add your command handler code here CDlgObjectLoad dlgObjectLoad; if(dlgObjectLoad.DoModal()!=IDOK) return; CString strText; ObjectListNode AddNode; strcpy(AddNode.m_strObjectName,dlgObjectLoad.m_strObjectName.LockBuffer()); strcpy(AddNode.m_strObjectFilename,dlgObjectLoad.m_strObjectFilename.LockBuffer()); if(dlgObjectLoad.m_isAlpha) AddNode.m_IsAlpha=true; else AddNode.m_IsAlpha=false; if(dlgObjectLoad.m_isLight) AddNode.m_IsLight=true; else AddNode.m_IsLight=false; int nInsertItem=m_ObjectList.GetItemCount(); m_ObjectList.InsertItem(nInsertItem,dlgObjectLoad.m_strObjectName); m_ObjectList.SetItemText(nInsertItem,1,dlgObjectLoad.m_strObjectFilename); if(dlgObjectLoad.m_isAlpha) m_ObjectList.SetItemText(nInsertItem,2,"Yes"); else m_ObjectList.SetItemText(nInsertItem,2,"No"); if(dlgObjectLoad.m_isLight) m_ObjectList.SetItemText(nInsertItem,3,"No"); else m_ObjectList.SetItemText(nInsertItem,3,"No"); m_ObjectListNode.Add(AddNode); } void CPageObjectContainer::OnBegindragListObectscene(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); SelectObject(); av->ChangeMouseInterface(3); *pResult = 0; } void CPageObjectContainer::AddObject(float fXp, float fYp, float fZp) { if(CSceneManager::m_PickHouseScene) { if(CSceneManager::m_PickHouseScene->m_HouseObject->m_pBspObject) { if(CSceneManager::m_PickHouseScene->m_HouseObject->m_ObjectList.num%4==0) { if(AfxMessageBox("BSPÀÇ ÀÔ±¸¸¦ ³Ö°Ú½À´Ï±î?",MB_YESNO,0)!=IDYES) return; CSceneManager::m_pBspScene=CSceneManager::m_PickHouseScene; } else if(CSceneManager::m_PickHouseScene->m_HouseObject->m_ObjectList.num%4==1) { if(AfxMessageBox("BSPÀÇ ½ºÅ¸Æ®¸¦ ³Ö°Ú½À´Ï±î?",MB_YESNO,0)!=IDYES) return; } else if(CSceneManager::m_PickHouseScene->m_HouseObject->m_ObjectList.num%4==2) { if(AfxMessageBox("BSPÀÇ Ãⱸ¸¦ ³Ö°Ú½À´Ï±î?",MB_YESNO,0)!=IDYES) return; CSceneManager::m_pBspScene=NULL; } else if(CSceneManager::m_PickHouseScene->m_HouseObject->m_ObjectList.num%4==3) { if(AfxMessageBox("ÇʵåÀÇ Ãⱸ¸¦ ³Ö°Ú½À´Ï±î?",MB_YESNO,0)!=IDYES) return; } } else { if(AfxMessageBox("Áý¾È¿¡ ¿ÀºêÅØÆ®¸¦ ³Ö°Ú½À´Ï±î?",MB_YESNO,0)!=IDYES) return; } if(m_SelectCur>=0) { matrix matInvTM,matTM; matTM.Translation(vector3(fXp,fYp,fZp)); matInvTM.Inverse(CSceneManager::m_PickHouseScene->m_AccumulateTM); CObjectScene *AddObjectScene=new CObjectScene(); AddObjectScene->m_TM=matTM*matInvTM; AddObjectScene->m_pObject=CSceneManager::m_ObjectContainer.GetObject(m_strObjectFileName.LockBuffer(),m_isAlpha,m_isLight); AddObjectScene->m_vecMaxBox=AddObjectScene->m_pObject->m_MaxBox; AddObjectScene->m_vecMinBox=AddObjectScene->m_pObject->m_MinBox; AddObjectScene->Init(); strcpy(AddObjectScene->m_strObjectName,m_strObjectFileName.LockBuffer()); AddObjectScene->m_isAlpha=true; AddObjectScene->m_isLight=true; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); AddObjectScene->m_ObjectID=av->m_SceneManager->m_MapStorage.m_TotalInHouseLightSceneCount; //AddObjectScene->m_ObjectID=CMapStorage::m_TotalInHouseObjectSceneCount; CSceneManager::m_PickHouseScene->m_HouseObject->m_ObjectList.Add(AddObjectScene); av->m_SceneManager->m_MapStorage.AddInHouseObject(CSceneManager::m_PickHouseScene->m_strOutName, CSceneManager::m_PickHouseScene->m_strMedName, CSceneManager::m_PickHouseScene->m_strInName, CSceneManager::m_PickHouseScene->m_strBSPName, m_strObjectFileName.LockBuffer(),AddObjectScene->m_TM, m_isAlpha,m_isLight); /* CMapStorage::AddInHouseObject(CSceneManager::m_PickHouseScene->m_strOutName, CSceneManager::m_PickHouseScene->m_strMedName, CSceneManager::m_PickHouseScene->m_strInName, m_strObjectFileName.LockBuffer(),AddObjectScene->m_TM, m_isAlpha,m_isLight); */ CSceneManager::m_PickHouseScene->m_HouseObject->m_pInHouseMap= av->m_SceneManager->m_MapStorage.CMapStorage::FindInHouseMap( CSceneManager::m_PickHouseScene->m_strOutName, CSceneManager::m_PickHouseScene->m_strMedName, CSceneManager::m_PickHouseScene->m_strInName, CSceneManager::m_PickHouseScene->m_strBSPName); CSceneManager::m_PickHouseScene->UpdateBspPosition(); /* */ /* CMapStorage::FindInHouseMap( CSceneManager::m_PickHouseScene->m_strOutName, CSceneManager::m_PickHouseScene->m_strMedName, CSceneManager::m_PickHouseScene->m_strInName); */ CSceneManager::m_PickHouseScene->m_SelfLoadInObject=true; return; } } if(m_SelectCur>=0) { matrix matTM; matTM.Translation(vector3(fXp,fYp,fZp)); if(CSceneManager::m_RBspSceneManager.m_pCurrentBspScene == NULL) // RBSP Ãß°¡ { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); av->m_SceneManager->m_MapStorage.AddMeshMap(fXp,fYp,fZp,m_strObjectFileName.LockBuffer(),matTM,m_isAlpha,m_isLight); //CMapStorage::AddMeshMap(fXp,fYp,fZp,m_strObjectFileName.LockBuffer(),matTM,m_isAlpha,m_isLight); } else // RBSPÃß°¡ { RBspScene *pScene = CSceneManager::m_RBspSceneManager.m_pCurrentBspScene; int iCurrentLeaf = pScene->FindWorldLeaf(D3DXVECTOR3(fXp,fYp,fZp)); pScene->m_pLeafExs[iCurrentLeaf].InputR3SObject(fXp,fYp,fZp,m_strObjectFileName.LockBuffer(),matTM,m_isAlpha,m_isLight); pScene->GenerateR3SObject(); } } } void CPageObjectContainer::Save(FILE *fp) { fwrite(&m_ObjectListNode.num,sizeof(int),1,fp); for(int cObject=0;cObjectm_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); av->m_SceneManager->m_MapStorage.AddMeshMap(vecPos.x,vecPos.y,vecPos.z,strObjectName,matTM,false,false); } //RBSP Ãß°¡ void CPageObjectContainer::OnBspinput() { m_bBspInput = (m_bBspInput == TRUE) ? FALSE : TRUE; UpdateData(FALSE); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); if((CSceneManager::m_RBspSceneManager.m_pCurrentBspScene != NULL) && (m_bBspInput == TRUE)) // RBSP Ãß°¡ { SelectObject(); av->ChangeMouseInterface(3); } else { av->ChangeMouseInterface(-1); } // TODO: Add your control notification handler code here } void CPageObjectContainer::MoveTarget(int i) { int iTotalItem = m_ObjectList.GetItemCount(); m_SelectCur=m_ObjectList.GetNextItem(-1,LVNI_SELECTED); UINT flag = LVIS_SELECTED | LVIS_FOCUSED; //¼±ÅÃ, Æ÷Ä¿½º if(m_SelectCur<0) { m_ObjectList.SetItemState(0,flag,flag); m_SelectCur = 0; } if( i == 0 ) //Cursor Down { if(m_SelectCur + 1 < iTotalItem) { m_ObjectList.SetItemState(m_SelectCur + 1,flag,flag); m_SelectCur = m_SelectCur + 1; } else { m_ObjectList.SetItemState(0,flag,flag); m_SelectCur = 0; } } else //Cursor Up { if(m_SelectCur - 1 >= 0) { m_ObjectList.SetItemState(m_SelectCur - 1,flag,flag); m_SelectCur = m_SelectCur - 1; } else { m_ObjectList.SetItemState(iTotalItem - 1,flag,flag); m_SelectCur = iTotalItem - 1; } } m_ObjectList.RedrawWindow(); m_ObjectList.RedrawItems(0,iTotalItem -1); SelectObject(); } /* void CPageObjectContainer::OnBUTTONClick() { } */ void CPageObjectContainer::OnCheckadd() { // TODO: Add your control notification handler code here m_bAddObj = (m_bAddObj == TRUE) ? FALSE : TRUE; UpdateData(FALSE); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); if((m_bAddObj == TRUE)) // RBSP Ãß°¡ { SelectObject(); av->ChangeMouseInterface(3); } else { av->ChangeMouseInterface(-1); } } void CPageObjectContainer::OnItemclickListObectscene(NMHDR* pNMHDR, LRESULT* pResult) { HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR; // TODO: Add your control notification handler code here SelectObject(); *pResult = 0; } void CPageObjectContainer::OnSetfocusListObectscene(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here SelectObject(); *pResult = 0; }