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>
225 lines
6.4 KiB
C++
225 lines
6.4 KiB
C++
// PageDuengunLight.cpp : implementation file
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include "worldcreator.h"
|
||
#include "PageDuengunLight.h"
|
||
#include "SceneManager.h"
|
||
#include "MainFrm.h"
|
||
#include "WorldCreatorView.h"
|
||
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CPageDuengunLight property page
|
||
|
||
IMPLEMENT_DYNCREATE(CPageDuengunLight, CPropertyPage)
|
||
|
||
CPageDuengunLight::CPageDuengunLight() : CPropertyPage(CPageDuengunLight::IDD)
|
||
{
|
||
//{{AFX_DATA_INIT(CPageDuengunLight)
|
||
m_bToggle = TRUE;
|
||
m_bPick = FALSE;
|
||
//}}AFX_DATA_INIT
|
||
}
|
||
|
||
CPageDuengunLight::~CPageDuengunLight()
|
||
{
|
||
}
|
||
|
||
void CPageDuengunLight::DoDataExchange(CDataExchange* pDX)
|
||
{
|
||
CPropertyPage::DoDataExchange(pDX);
|
||
//{{AFX_DATA_MAP(CPageDuengunLight)
|
||
DDX_Control(pDX, IDC_LIST1, m_ctrlLightList);
|
||
DDX_Check(pDX, IDC_CHECK1, m_bToggle);
|
||
DDX_Check(pDX, IDC_PICK, m_bPick);
|
||
//}}AFX_DATA_MAP
|
||
}
|
||
|
||
|
||
BEGIN_MESSAGE_MAP(CPageDuengunLight, CPropertyPage)
|
||
//{{AFX_MSG_MAP(CPageDuengunLight)
|
||
ON_BN_CLICKED(IDC_CHECK1, OnCheck1)
|
||
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
|
||
ON_BN_CLICKED(IDC_PICK, OnPick)
|
||
ON_BN_CLICKED(IDC_LISTUPDATE, OnListupdate)
|
||
//}}AFX_MSG_MAP
|
||
END_MESSAGE_MAP()
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CPageDuengunLight message handlers
|
||
|
||
void CPageDuengunLight::OnCheck1()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
m_bToggle = (m_bToggle == TRUE) ? FALSE : TRUE;
|
||
CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->m_bVisLightBox = (m_bToggle == TRUE) ? true : false;
|
||
UpdateData(FALSE);
|
||
}
|
||
void CPageDuengunLight::UpdateList()
|
||
{
|
||
if(CSceneManager::m_RBspSceneManager.m_pCurrentBspScene != NULL)
|
||
{
|
||
RBspScene *pScene = NULL;
|
||
|
||
if(CSceneManager::m_RBspSceneManager.m_pCurrentBspScene != NULL)
|
||
pScene = CSceneManager::m_RBspSceneManager.m_pCurrentBspScene;
|
||
else
|
||
pScene = CSceneManager::m_RBspSceneManager.m_lstBspScene[CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->m_iRBspLeafIndex];
|
||
|
||
int iLeaf = pScene->m_iLeafsNum;
|
||
int i,j;
|
||
// List <20>ʱ<EFBFBD>ȭ
|
||
m_ctrlLightList.DeleteAllItems();
|
||
|
||
for( i = 0; i < iLeaf; i++ )
|
||
{
|
||
RBspScene::RBspLeafEx *pLeaf = &(pScene->m_pLeafExs[i]);
|
||
for(j = 0; j < pLeaf->m_iLightNum; j++)
|
||
{
|
||
RBspScene::RBspLight LightNode = pLeaf->m_lstLight[j];
|
||
|
||
// Insert Item
|
||
LV_ITEM item;
|
||
item.iItem = m_ctrlLightList.GetItemCount();
|
||
item.mask = LVIF_TEXT;
|
||
item.iSubItem = 0;
|
||
|
||
CString Tmp;
|
||
// Leaf Index Setting
|
||
Tmp.Format("%d",i);
|
||
item.pszText = Tmp.LockBuffer();
|
||
m_ctrlLightList.InsertItem(&item);
|
||
// Red
|
||
Tmp.Format("%d",(int)(LightNode.m_fRed * 255.0f));
|
||
m_ctrlLightList.SetItemText(item.iItem,1,Tmp);
|
||
// Green
|
||
Tmp.Format("%d",(int)(LightNode.m_fGreen * 255.0f));
|
||
m_ctrlLightList.SetItemText(item.iItem,2,Tmp);
|
||
// Blue
|
||
Tmp.Format("%d",(int)(LightNode.m_fBlue * 255.0f));
|
||
m_ctrlLightList.SetItemText(item.iItem,3,Tmp);
|
||
// Range
|
||
Tmp.Format("%f",LightNode.m_vecLightRange.x);
|
||
m_ctrlLightList.SetItemText(item.iItem,4,Tmp);
|
||
}
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
MessageBox("Bsp <20><><EFBFBD>ΰ<EFBFBD> <20>ƴϰų<CFB0> Leaf <20><><EFBFBD>尡 <20>߸<EFBFBD><DFB8>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.");
|
||
}
|
||
|
||
}
|
||
void CPageDuengunLight::OnButton1()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
|
||
if((CSceneManager::m_RBspSceneManager.m_pCurrentBspScene != NULL) &&
|
||
(CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->m_iRBspLeafIndex != -1))
|
||
{
|
||
|
||
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
||
CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView();
|
||
D3DXMATRIX matView;
|
||
av->m_SceneManager->GetDevice()->GetTransform(D3DTS_VIEW,&matView);
|
||
D3DXMatrixInverse(&matView,NULL,&matView);
|
||
vector3 vecPos = vector3(matView._41,matView._42,matView._43);
|
||
|
||
m_DlgLight.m_strPos.Format("X : %f Y : %f Z : %f",vecPos.x,vecPos.y,vecPos.z);
|
||
m_DlgLight.m_iLeaf = CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->m_iRBspLeafIndex;
|
||
m_DlgLight.DoModal();
|
||
RBspScene *pScene = CSceneManager::m_RBspSceneManager.m_pCurrentBspScene;
|
||
int iLeaf = CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->m_iRBspLeafIndex;
|
||
D3DXVECTOR3 vecEffect = D3DXVECTOR3(vecPos.x,vecPos.y,vecPos.z);
|
||
pScene->m_pLeafExs[iLeaf].InputLight(0,vecEffect,D3DXVECTOR3(m_DlgLight.m_fRange,m_DlgLight.m_fRange,m_DlgLight.m_fRange),
|
||
m_DlgLight.m_uiRed,m_DlgLight.m_uiGreen,m_DlgLight.m_uiBlue,false,false);
|
||
|
||
// Insert Item
|
||
LV_ITEM item;
|
||
item.iItem = m_ctrlLightList.GetItemCount();
|
||
item.mask = LVIF_TEXT;
|
||
item.iSubItem = 0;
|
||
|
||
CString Tmp;
|
||
Tmp.Format("%d",iLeaf);
|
||
|
||
item.pszText = Tmp.LockBuffer();
|
||
|
||
m_ctrlLightList.InsertItem(&item);
|
||
Tmp.Format("%d",(int)m_DlgLight.m_uiRed);
|
||
m_ctrlLightList.SetItemText(item.iItem,1,Tmp);
|
||
|
||
Tmp.Format("%d",(int)m_DlgLight.m_uiGreen);
|
||
m_ctrlLightList.SetItemText(item.iItem,2,Tmp);
|
||
|
||
Tmp.Format("%d",(int)m_DlgLight.m_uiBlue);
|
||
m_ctrlLightList.SetItemText(item.iItem,3,Tmp);
|
||
|
||
Tmp.Format("%f",m_DlgLight.m_fRange);
|
||
m_ctrlLightList.SetItemText(item.iItem,4,Tmp);
|
||
}
|
||
else
|
||
{
|
||
MessageBox("Bsp <20><><EFBFBD>ΰ<EFBFBD> <20>ƴϰų<CFB0> Leaf <20><><EFBFBD>尡 <20>߸<EFBFBD><DFB8>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.");
|
||
}
|
||
}
|
||
|
||
BOOL CPageDuengunLight::OnInitDialog()
|
||
{
|
||
CPropertyPage::OnInitDialog();
|
||
|
||
DWORD dwStyle;
|
||
dwStyle = m_ctrlLightList.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0 ,0);
|
||
dwStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES ;
|
||
m_ctrlLightList.SendMessage( LVM_SETEXTENDEDLISTVIEWSTYLE, 0,dwStyle );
|
||
|
||
m_ctrlLightList.InsertColumn(0,"<EFBFBD>ͼ<EFBFBD> Leaf",LVCFMT_LEFT,70);
|
||
m_ctrlLightList.InsertColumn(1,"Red", LVCFMT_LEFT,50);
|
||
m_ctrlLightList.InsertColumn(2,"Green", LVCFMT_LEFT,50);
|
||
m_ctrlLightList.InsertColumn(3,"Blue", LVCFMT_LEFT,50);
|
||
m_ctrlLightList.InsertColumn(4,"Range",LVCFMT_LEFT,70);
|
||
|
||
// TODO: Add extra initialization here
|
||
UpdateList();
|
||
return TRUE; // return TRUE unless you set the focus to a control
|
||
// EXCEPTION: OCX Property Pages should return FALSE
|
||
}
|
||
|
||
void CPageDuengunLight::OnPick()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
m_bPick = (m_bPick == TRUE) ? FALSE : TRUE;
|
||
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
||
|
||
if(m_bPick == TRUE)
|
||
{
|
||
mf->m_PickMode = 98;
|
||
}
|
||
else
|
||
{
|
||
mf->m_PickMode = -1;
|
||
}
|
||
}
|
||
|
||
BOOL CPageDuengunLight::OnSetActive()
|
||
{
|
||
// TODO: Add your specialized code here and/or call the base class
|
||
UpdateList();
|
||
return CPropertyPage::OnSetActive();
|
||
}
|
||
|
||
void CPageDuengunLight::OnListupdate()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
UpdateList();
|
||
UpdateData(FALSE);
|
||
|
||
}
|