Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
287 lines
8.0 KiB
C++
287 lines
8.0 KiB
C++
// PageDuengunContainer.cpp : implementation file
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include "worldcreator.h"
|
||
#include "PageDuengunContainer.h"
|
||
#include "SceneManager.h"
|
||
#include "worldcreatorView.h"
|
||
#include "mainfrm.h"
|
||
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CPageDuengunContainer property page
|
||
|
||
IMPLEMENT_DYNCREATE(CPageDuengunContainer, CPropertyPage)
|
||
|
||
CPageDuengunContainer::CPageDuengunContainer() : CPropertyPage(CPageDuengunContainer::IDD)
|
||
{
|
||
//{{AFX_DATA_INIT(CPageDuengunContainer)
|
||
// NOTE: the ClassWizard will add member initialization here
|
||
//}}AFX_DATA_INIT
|
||
|
||
m_pEditName = NULL;
|
||
m_pDuengunTriggerDlg = NULL;
|
||
|
||
}
|
||
|
||
CPageDuengunContainer::~CPageDuengunContainer()
|
||
{
|
||
delete m_pEditName;
|
||
m_pEditName = NULL;
|
||
|
||
}
|
||
|
||
void CPageDuengunContainer::DoDataExchange(CDataExchange* pDX)
|
||
{
|
||
CPropertyPage::DoDataExchange(pDX);
|
||
//{{AFX_DATA_MAP(CPageDuengunContainer)
|
||
DDX_Control(pDX, IDC_TREE1, m_ctrlDuengunTree);
|
||
//}}AFX_DATA_MAP
|
||
}
|
||
|
||
|
||
BEGIN_MESSAGE_MAP(CPageDuengunContainer, CPropertyPage)
|
||
//{{AFX_MSG_MAP(CPageDuengunContainer)
|
||
ON_NOTIFY(NM_RCLICK, IDC_TREE1, OnRclickTree1)
|
||
ON_COMMAND(ID_MENUITEM_DUNGUENINSERT, OnMenu_DunguenInsert)
|
||
ON_COMMAND(ID_MENUITEM_DUENGUNDELETE, OnMenu_DuengunDelete)
|
||
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelchangedTree1)
|
||
ON_NOTIFY(NM_DBLCLK, IDC_TREE1, OnDblclkTree1)
|
||
ON_MESSAGE(WM_CHILD_CLOSE, OnChildClose)
|
||
ON_NOTIFY(TVN_BEGINDRAG, IDC_TREE1, OnBegindragTree1)
|
||
//}}AFX_MSG_MAP
|
||
END_MESSAGE_MAP()
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CPageDuengunContainer message handlers
|
||
|
||
void CPageDuengunContainer::OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult)
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
CPoint point;
|
||
GetCursorPos(&point);
|
||
CMenu menu;
|
||
menu.LoadMenu(IDR_MENU_DUENGUN);
|
||
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
|
||
*pResult = 0;
|
||
|
||
}
|
||
|
||
void CPageDuengunContainer::OnMenu_DunguenInsert()
|
||
{
|
||
// TODO: Add your command handler code here
|
||
|
||
m_pEditName = new CDlgEditName;
|
||
m_pEditName->DoModal();
|
||
// Bsp <20≯<EFBFBD><CCB8><EFBFBD> <20>Էµ<D4B7><C2B5><EFBFBD> <20>ʾҴٸ<D2B4>..
|
||
if( m_pEditName->m_EditName.GetLength() < 2)
|
||
return;
|
||
|
||
float fScale = m_pEditName->m_fScale;
|
||
|
||
TV_INSERTSTRUCT tvInsert;
|
||
tvInsert.hParent = m_Root;
|
||
tvInsert.hInsertAfter = TVI_LAST;
|
||
tvInsert.item.mask = TVIF_TEXT;
|
||
tvInsert.item.state = 0;
|
||
tvInsert.item.stateMask = 0;
|
||
tvInsert.item.cchTextMax = 50;
|
||
tvInsert.item.iSelectedImage = 1;
|
||
tvInsert.item.cChildren = 0;
|
||
tvInsert.item.pszText = m_pEditName->m_EditName.LockBuffer();
|
||
tvInsert.item.iImage = 1;
|
||
|
||
char *pChr = strrchr(tvInsert.item.pszText,'.');
|
||
pChr++;
|
||
pChr++;
|
||
pChr++;
|
||
//pChr == 'e' || pChr == 'p'
|
||
|
||
if((*pChr) == 'p' || (*pChr) == 'P')
|
||
CSceneManager::m_RBspSceneManager.InsertBspScene(tvInsert.item.pszText,fScale);
|
||
else
|
||
{
|
||
CSceneManager::m_RBspSceneManager.InsertBseScene(tvInsert.item.pszText,fScale);
|
||
RBspScene *pScene = CSceneManager::m_RBspSceneManager.SearchBspScene(tvInsert.item.pszText);
|
||
pScene->m_bVisible = true;
|
||
|
||
vector3 vecPos = vector3(pScene->m_vecZeroPos.x,
|
||
pScene->m_vecZeroPos.y,
|
||
pScene->m_vecZeroPos.z);
|
||
|
||
matrix *ViewPos=CSceneManager::GetCamera()->GetMatPosition();
|
||
ViewPos->_41=vecPos.x;
|
||
ViewPos->_42=vecPos.y;
|
||
ViewPos->_43=vecPos.z;
|
||
|
||
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
||
CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView();
|
||
av->m_SceneManager->UpdateScene(0.0f);
|
||
}
|
||
m_ctrlDuengunTree.Expand(m_ctrlDuengunTree.InsertItem(&tvInsert),TVE_EXPAND);
|
||
m_ctrlDuengunTree.Expand(m_Root,TVE_EXPAND);
|
||
|
||
|
||
delete m_pEditName;
|
||
m_pEditName = NULL;
|
||
|
||
}
|
||
|
||
void CPageDuengunContainer::OnMenu_DuengunDelete()
|
||
{
|
||
TVITEM tvitem;
|
||
char szStr[50];
|
||
memset(szStr,0,sizeof(char) * 50);
|
||
tvitem.hItem = m_ctrlDuengunTree.GetSelectedItem();
|
||
tvitem.mask = TVIF_TEXT;
|
||
tvitem.pszText = szStr;
|
||
tvitem.cchTextMax = 50;
|
||
|
||
m_ctrlDuengunTree.GetItem(&tvitem );
|
||
if(strcmp(tvitem.pszText,"Root"))
|
||
{
|
||
CSceneManager::m_RBspSceneManager.DeleteBspScene(tvitem.pszText);
|
||
m_ctrlDuengunTree.DeleteItem(m_ctrlDuengunTree.GetSelectedItem());
|
||
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
||
CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView();
|
||
av->Invalidate(TRUE);
|
||
}
|
||
else
|
||
{
|
||
MessageBox("Root Node<64><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.");
|
||
|
||
}
|
||
// TODO: Add your command handler code here
|
||
}
|
||
/*
|
||
BOOL CPageDuengunContainer::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
|
||
{
|
||
// TODO: Add your specialized code here and/or call the base class
|
||
|
||
return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
|
||
}
|
||
*/
|
||
BOOL CPageDuengunContainer::OnInitDialog()
|
||
{
|
||
CPropertyPage::OnInitDialog();
|
||
|
||
m_imgIcon.Create(IDB_TREEICON,16,2,RGB(0,128,128));
|
||
m_ctrlDuengunTree.SetImageList(&m_imgIcon,TVSIL_NORMAL);
|
||
TV_INSERTSTRUCT tvInsert;
|
||
tvInsert.hParent = NULL;
|
||
tvInsert.hInsertAfter = TVI_LAST;
|
||
tvInsert.item.mask = TVIF_TEXT;
|
||
tvInsert.item.state = 0;
|
||
tvInsert.item.stateMask = 0;
|
||
tvInsert.item.cchTextMax = 50;
|
||
tvInsert.item.iSelectedImage = 1;
|
||
tvInsert.item.cChildren = 0;
|
||
tvInsert.item.pszText = "Root";
|
||
tvInsert.item.iImage = 0;
|
||
m_Root = m_ctrlDuengunTree.InsertItem(&tvInsert);
|
||
m_ctrlDuengunTree.Expand(m_Root,TVE_EXPAND);
|
||
|
||
// TODO: Add extra initialization here
|
||
m_pDuengunTriggerDlg = new CDlgDuengunTrigger;
|
||
m_pDuengunTriggerDlg->Create(this);
|
||
m_pDuengunTriggerDlg->ShowWindow(SW_HIDE);
|
||
m_pDuengunTriggerDlg->SetWindowPos( NULL, 0, 500, 0, 0, SWP_NOSIZE | SWP_NOZORDER );
|
||
|
||
|
||
return TRUE; // return TRUE unless you set the focus to a control
|
||
// EXCEPTION: OCX Property Pages should return FALSE
|
||
}
|
||
|
||
void CPageDuengunContainer::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
|
||
{
|
||
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
|
||
// TODO: Add your control notification handler code here
|
||
HTREEITEM hItem = pNMTreeView->itemNew.hItem;
|
||
|
||
*pResult = 0;
|
||
}
|
||
|
||
void CPageDuengunContainer::OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult)
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
BeginDuengunTrigger();
|
||
*pResult = 0;
|
||
}
|
||
void CPageDuengunContainer::BeginDuengunTrigger()
|
||
{
|
||
TVITEM tvitem;
|
||
char szStr[50];
|
||
memset(szStr,0,sizeof(char) * 50);
|
||
tvitem.hItem = m_ctrlDuengunTree.GetSelectedItem();
|
||
tvitem.mask = TVIF_TEXT;
|
||
tvitem.pszText = szStr;
|
||
tvitem.cchTextMax = 50;
|
||
|
||
m_ctrlDuengunTree.GetItem(&tvitem );
|
||
if(strcmp(tvitem.pszText,"Root")) {
|
||
CSceneManager::m_RBspSceneManager.SetPickIndex(tvitem.pszText);
|
||
|
||
m_pDuengunTriggerDlg->SetBspFile(tvitem.pszText);
|
||
m_pDuengunTriggerDlg->ShowWindow(SW_SHOW);
|
||
m_ctrlDuengunTree.EnableWindow(FALSE);
|
||
|
||
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
||
CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView();
|
||
av->Invalidate(TRUE);
|
||
|
||
}
|
||
else // Root Node Select
|
||
{
|
||
MessageBox("Root Node <20>Դϴ<D4B4>.(<28><><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.)");
|
||
|
||
}
|
||
|
||
}
|
||
LRESULT CPageDuengunContainer::OnChildClose(WPARAM wParam, LPARAM lParam)
|
||
{
|
||
/*if( (CDlgEditGCMDS*)wParam == m_pDlgEditGCMDS )
|
||
{
|
||
EndGCMDSEdit();
|
||
}
|
||
*/
|
||
m_pDuengunTriggerDlg->ShowWindow(SW_HIDE);
|
||
m_ctrlDuengunTree.EnableWindow(TRUE);
|
||
CSceneManager::m_RBspSceneManager.SetPickIndex("");
|
||
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
||
CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView();
|
||
av->Invalidate(TRUE);
|
||
|
||
return 0;
|
||
}
|
||
|
||
void CPageDuengunContainer::OnBegindragTree1(NMHDR* pNMHDR, LRESULT* pResult)
|
||
{
|
||
|
||
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
|
||
// TODO: Add your control notification handler code here
|
||
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
||
CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView();
|
||
av->m_bSelectBsp = true;
|
||
av->ChangeMouseInterface(95);
|
||
|
||
TVITEM tvitem;
|
||
char szStr[50];
|
||
memset(szStr,0,sizeof(char) * 50);
|
||
tvitem.hItem = m_ctrlDuengunTree.GetSelectedItem();
|
||
tvitem.mask = TVIF_TEXT;
|
||
tvitem.pszText = szStr;
|
||
tvitem.cchTextMax = 50;
|
||
|
||
m_ctrlDuengunTree.GetItem(&tvitem );
|
||
// Select <20><> bsp <20≯<EFBFBD>
|
||
av->m_strSelectBspScene.Format("%s",tvitem.pszText);
|
||
////
|
||
*pResult = 0;
|
||
}
|