Files
Client/GameTools/WORLDCREATOR/PageDuengunContainer.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
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>
2025-11-29 20:17:20 +09:00

287 lines
8.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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;
}