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 이름이 입력되지 않았다면..
|
|
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는 지울수 없습니다.");
|
|
|
|
}
|
|
// 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 입니다.(선택하실 수 없습니다.)");
|
|
|
|
}
|
|
|
|
}
|
|
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 된 bsp 이름
|
|
av->m_strSelectBspScene.Format("%s",tvitem.pszText);
|
|
////
|
|
*pResult = 0;
|
|
}
|