Files
Client/GameTools/WORLDCREATOR/MainFrm.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

2121 lines
66 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.
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "WorldCreator.h"
#include "MainFrm.h"
#include "MulFileDialog.h"
#include "SelectFolderDialog.h"
#include "WorldCreatorView.h"
#include <SceneManager.h>
#include <BaseDataDefine.h>
#include "ConvertTexture.h"
#include "DlgWeatherColor.h"
#include "DlgSectorMove.h"
#include "AmbienceList.h"
#include "Dds_container.h"
#include "DlgCamera.h"
#include "DlgBoid.h"
#include "DlgCharacterCreate.h"
#include "DlgEditName.h"
#include "DialogCharacterLodDist.h"
#include "RenderOption.h"
#include "CharEffect.h"
#include "SelectFolderDialog.h"
#include "FullSceneEffect.h"
#include "DlgCameraSet.h"
#include "DlgLightmapInfo.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CH3DTextureContainer g_ContTexture;
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_COMMAND_EX(CG_ID_VIEW_SCENEEDITBAR, OnBarCheck)
ON_UPDATE_COMMAND_UI(CG_ID_VIEW_SCENEEDITBAR, OnUpdateControlBarMenu)
ON_WM_CREATE()
ON_COMMAND_EX(CG_ID_VIEW_MESHOBJECTCONTAINER, OnBarCheck)
ON_UPDATE_COMMAND_UI(CG_ID_VIEW_MESHOBJECTCONTAINER, OnUpdateControlBarMenu)
//{{AFX_MSG_MAP(CMainFrame)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_APP_EXIT, OnAppExit)
ON_COMMAND(MENU_CONVERTTEXTURE, OnConverttexture)
ON_BN_CLICKED(IDC_CHECK_LIGHTMAP, OnCheckLightmap)
ON_BN_CLICKED(IDC_CHECK_OCTREE, OnCheckOctree)
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_CHECK_EDITTERRAIN, OnCheckEditterrain)
ON_BN_CLICKED(IDC_CHECK_WEATHERTIME, OnCheckWeathertime)
ON_BN_CLICKED(IDC_BUTTON_FIXWEATHERCOLOR, OnButtonFixweathercolor)
ON_BN_CLICKED(IDC_BUTTON_MAKEWATER, OnButtonMakewater)
ON_BN_CLICKED(IDC_BUTTON_WATERFALL, OnButtonWaterfall)
ON_COMMAND(MENU_SCENESAVE, OnScenesave)
ON_BN_CLICKED(IDC_BUTTON_MAKETREE, OnButtonMaketree)
ON_BN_CLICKED(IDC_BUTTON_WALKMODE, OnButtonWalkmode)
ON_BN_CLICKED(IDC_CHECK_PICKHOUSE, OnCheckPickhouse)
ON_BN_CLICKED(IDC_CHECK_PICKOBJECT, OnCheckPickobect)
ON_BN_CLICKED(IDC_CHECK_PICKNONE, OnCheckPicknode)
ON_BN_CLICKED(IDC_CHECK_NOTMOVE, OnCheckNotmove)
ON_COMMAND(MENU_VERTEXOPTIMAZE, OnVertexoptimaze)
ON_COMMAND(MENU_SECTOR_SAVE, OnSectorSave)
ON_COMMAND(MENU_SECTOR_LOAD, OnSectorLoad)
ON_COMMAND(MEUN_SECTORMOVE, OnSectormove)
ON_BN_CLICKED(IDC_BUTTON_GENERATESECTORSHOAW, OnButtonGeneratesectorshoaw)
ON_COMMAND(MENU_OLDSCENELOAD, OnOldsceneload)
ON_BN_CLICKED(IDC_BUTTON_SECTORVIEW, OnButtonSectorview)
ON_COMMAND(MENU_INHOUSEMAPLOAD, OnInhousemapload)
ON_COMMAND(MENU_INHOUSEMAPSAVE, OnInhousemapsave)
ON_BN_CLICKED(IDC_BUTTON_INFO, OnButtonInfo)
ON_BN_CLICKED(IDC_BUTTON_CAMERA, OnButtonCamera)
ON_COMMAND(MENU_WEATHER, OnWeather)
ON_COMMAND(MENU_SHOWINFO, OnShowinfo)
ON_BN_CLICKED(IDC_BUTTON_GRASS, OnButtonGrass)
ON_COMMAND(MENU_SECTORLOADNOWPOS, OnSectorloadnowpos)
ON_COMMAND(MENE_GARBEGEDEL, OnGarbegedel)
ON_BN_CLICKED(IDC_BUTTON_EFFECT, OnButtonEffect)
ON_COMMAND(MENU_CAMERAVIEW, OnCameraview)
ON_COMMAND(MENU_SMOKEPARTICLE, OnSmokeparticle)
ON_COMMAND(MENU_WATERMAKE, OnWatermake)
ON_COMMAND(MENU_SOUNDMAPSAVE, OnSoundmapsave)
ON_COMMAND(MENU_SOUNDMAPLOAD, OnSoundmapload)
ON_BN_CLICKED(IDC_BUTTON_BOID, OnButtonBoid)
ON_COMMAND(MENU_WEATHERTIME, OnWeathertime)
ON_COMMAND(MENU_GF3SAVE, OnGf3save)
ON_COMMAND(MENU_GF3LOAD, OnGf3load)
ON_BN_CLICKED(IDC_CHECK_PICKFIX, OnCheckPickfix)
ON_BN_CLICKED(IDC_BUTTON_MESHOPTIMIZE, OnButtonMeshoptimize)
ON_COMMAND(MENU_RESAVE, OnResave)
ON_COMMAND(MENU_AMBIENCELIST, OnAmbiencelist)
ON_BN_CLICKED(IDC_BUTTON_BSPLIGHTMODE, OnButtonBsplightmode)
ON_BN_CLICKED(IDC_EFFECT, OnEffect)
ON_COMMAND(MENU_CLEARALL, OnClearall)
ON_BN_CLICKED(IDC_CHECK_TRIGGER, OnCheckTrigger)
ON_COMMAND(MENU_TERRAINTEXTUREAUTOINSERT, OnTerraintextureautoinsert)
ON_COMMAND(MENU_DDS, OnDds)
ON_BN_CLICKED(IDC_CHECK_TERRAINLIGHTMAP, OnCheckTerrainlightmap)
ON_BN_CLICKED(IDC_BUTTON_CHARACTERVIEWER, OnButtonCharacterviewer)
ON_BN_CLICKED(IDC_BUTTON_CHARACTERMOVE, OnButtonCharactermove)
ON_COMMAND(MENU_CHARACTERCONTROL, OnCharactercontrol)
ON_COMMAND(MENU_MAKECHARACTER, OnMakecharacter)
ON_BN_CLICKED(IDC_BUTTON_CHAREFFECT, OnButtonChareffect)
ON_BN_CLICKED(IDC_BUTTON_CAMERAMODECHANGE, OnButtonCameramodechange)
ON_COMMAND(MENU_ESF, OnEsf)
ON_COMMAND(ID_EFF_INTER, OnInterfaceEsf)
ON_COMMAND(IDD_TEXTESF, OnTextesf)
ON_COMMAND(IDD_TEXTINTERESF, OnTextinteresf)
ON_COMMAND(MENU_CHARACTERCAMERA, OnCharactercamera)
ON_COMMAND(MENU_MOUSESHOW, OnMouseshow)
ON_COMMAND(ID_CHARMOTION, OnCharmotion)
ON_COMMAND(ID_CHAREFF, OnChareff)
ON_BN_CLICKED(IDC_BSP, OnBsp)
ON_COMMAND(ID_SECTORLIGHTGEN, OnSectorlightgen)
ON_COMMAND(MENU_CHARACTERLOD, OnCharacterlod)
ON_COMMAND(MENU_CHRDIR, OnChrdir)
ON_COMMAND(MENU_CHRBUMDIR, OnChrbumdir)
ON_COMMAND(MENU_CHRENVDIR, OnChrenvdir)
ON_BN_CLICKED(IDC_TERRAINFIX, OnTerrainfix)
ON_BN_CLICKED(IDC_BUTTON_RELOAD, OnButtonReload)
ON_BN_CLICKED(IDC_BUTTON_MINIMAP, OnButtonMinimap)
ON_COMMAND(ID_MENU_Z3CLOAD, OnMenuZ3cload)
ON_COMMAND(ID_CAMERASET, OnCameraset)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
m_dlgConvertTexture=new CDlgConvertTexture();
m_dlgConvertTexture->Create(IDD_DIALOG_TEXTURECONVERT);
m_dlgLightmap=new CDlgLightmap();
m_dlgLightmap->Create(IDD_DIALOG_MAKELIGHTMAP);
m_dlgMakeWater=new CDlgMakeWater();
m_dlgMakeWater->Create(IDD_DIALOG_WATER);
m_dlgMakeFall=new CDlgMakeFall();
m_dlgMakeFall->Create(IDD_DIALOG_WATERFALL);
m_dlgMakePlant=new CDlgMakePlant();
m_dlgMakePlant->Create(IDD_DIALOG_EDITPLANT);
m_dlgCamera=new CDlgCamera();
m_dlgCamera->Create(IDD_DIALOG_CAMERA);
m_dlgMakeGrass=new CDlgGrass();
m_dlgMakeGrass->Create(IDD_DIALOG_GRASS);
m_dlgEffect=new CDlgEffect();
m_dlgEffect->Create(IDD_DIALOG_EFFECTMAP);
m_dlgWeatherColor=new CDlgWeatherColor();
m_dlgWeatherColor->Create(IDD_DIALOG_WEATHER);
m_dlgBoid=new CDlgBoid();
m_dlgBoid->Create(IDD_DIALOG_BOID);
m_bShowDlgLightmap=FALSE;
m_PickMode=0;
m_NotMove=0;
}
CMainFrame::~CMainFrame()
{
delete m_dlgEffect;
delete m_dlgBoid;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
| WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
BOOL CMainFrame::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);
}
void CMainFrame::OnFileNew()
{
// TODO: Add your command handler code here
}
void CMainFrame::OnFileOpen()
{
// TODO: Add your command handler code here
UpdateData();
CString strFilter = Z3SFILE;
CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
CString filename=filedia.GetFileName();
if(filename=="")
return;
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_SceneManager->LoadMap(filename.LockBuffer());
//CMapStorage::Load(filename.LockBuffer());
//for(int cSector=0;cSector<LSIZEX*LSIZEY;cSector++)
for(int cSector=0;cSector<av->m_SceneManager->m_HeightField.GetLSizeX() * av->m_SceneManager->m_HeightField.GetLSizeY();cSector++)
{
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_MapDungeon=NULL;
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_MapEffect=NULL;
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_MapFall=NULL;
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_MapHeight=NULL;
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_MapHouse=NULL;
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_MapMash=NULL;
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_MapMesh=NULL;
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_MapPlant=NULL;
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateHeight();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateWater();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateWideMap();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateFall();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateHouseObject();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GeneratePlant();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateObject();
//CSceneManager::m_HeightField.m_SectorScene[cSector].GenerateWideMap();
}
ContainerLoad();
}
void CMainFrame::OnAppExit()
{
// TODO: Add your command handler code here
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
m_nMode=0;
if(m_nMode==0)
{
if(!m_MeshContainerBar.Create(this,IDD_DIALOGBAR_MESHCONTAINERBAR,CBRS_LEFT,IDD_DIALOGBAR_MESHCONTAINERBAR))
{
return -1;
}
m_MeshContainerBar.SetWindowText("Power by Rainbow's Creator");
m_MeshContainerBar.EnableDocking(CBRS_ALIGN_LEFT);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_MeshContainerBar);
if(!m_SectorViewerBar.Create(this,IDD_DIALOGBAR_SECTORVIEWER,CBRS_BOTTOM,IDD_DIALOGBAR_SECTORVIEWER))
{
return -1;
}
m_SectorViewerBar.SetWindowText("Sector Viewer Bar");
CRect rc;
//m_SectorViewerBar.GetWindowRect(rc);
//GetWindowRect( LPRECT lpRect )
//SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags );
//m_SectorViewerBar.
m_SectorViewerBar.EnableDocking(CBRS_ALIGN_BOTTOM);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_SectorViewerBar);
{
if (!m_wndSceneEditBar.Create(this, CG_IDD_SCENEEDITBAR,
CBRS_RIGHT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
CG_ID_VIEW_SCENEEDITBAR))
{
TRACE0("Failed to create dialog bar m_wndSceneEditBar\n");
return -1; // fail to create
}
m_wndSceneEditBar.EnableDocking(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndSceneEditBar);
}
}
return 0;
}
void CMainFrame::OnConverttexture()
{
/*
CSelectFolderDialog SelectFolderDlg(TRUE, "C:\\", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, this);
if(SelectFolderDlg.DoModal()!=IDOK)
return;
CString strFolderPath=SelectFolderDlg.GetSelectedPath();
CFileFind ff;
CString strFileName;
CString strPathFileName;
CString strPath=SelectFolderDlg.GetSelectedPath();
m_dlgConvertTexture->m_strPath=strFolderPath;
strFolderPath+="\\*.bmp";
int cListItem=m_dlgConvertTexture->m_filelist.GetCount();
for(int i=0;i<cListItem;i++)
{
m_dlgConvertTexture->m_filelist.DeleteString(0);
}
CConvertTexture ConvertTexture;
int curdot;
if(ff.FindFile(strFolderPath)==TRUE)
{
BOOL bFlag=TRUE;
while(bFlag)
{
bFlag=ff.FindNextFile();
strFileName=ff.GetFileName();
if(strFileName.Find("_mask",0)>=0)
continue;
strPathFileName=strPath;
strPathFileName+=strFileName;
ConvertTexture.LoadBMP(strPathFileName.LockBuffer());
CString alphafilename=strPathFileName;
curdot=alphafilename.ReverseFind('.');
alphafilename=alphafilename.Left(curdot)+"_mask.bmp";
CFileStatus status;
if (CFile::GetStatus(alphafilename, status))
{
/*
if(ConvertTexture.LoadAlphaIntoSurface(alphafilename,ConvertTexture.m_pddsOrig)!=S_OK)
{
AfxMessageBox("<22><><EFBFBD>ĸ<EFBFBD> <20>ε<EFBFBD><CEB5>ϴµ<CFB4> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.");
continue;
}
}
ConvertTexture.Compress(D3DFMT_DXT3);
ConvertTexture.GenerateMipMaps();
strPathFileName.SetAt(strPathFileName.GetLength()-1,'s');
strPathFileName.SetAt(strPathFileName.GetLength()-2,'d');
strPathFileName.SetAt(strPathFileName.GetLength()-3,'d');
ConvertTexture.SaveDDS(ConvertTexture.m_ptexNew,strPathFileName.LockBuffer());
m_dlgConvertTexture->m_filelist.AddString(strFileName);
}
}
ff.Close();
m_dlgConvertTexture->ShowWindow(SW_SHOW);
*/
}
void CMainFrame::OnCheckLightmap()
{
CDlgLightmapInfo Dlg;
Dlg.DoModal();
if(Dlg.m_bStart)
{
D3DXVECTOR3 vecSkyLightColor;
D3DXVECTOR3 vecDirectionColor;
D3DXVECTOR3 vecAmbientColor;
vecSkyLightColor.x = (float)GetRValue(Dlg.m_cSkyLightColor) / 255.0f;
vecSkyLightColor.y = (float)GetGValue(Dlg.m_cSkyLightColor) / 255.0f;
vecSkyLightColor.z = (float)GetBValue(Dlg.m_cSkyLightColor) / 255.0f;
vecDirectionColor.x = (float)GetRValue(Dlg.m_cDirectionColor) / 255.0f;
vecDirectionColor.y = (float)GetGValue(Dlg.m_cDirectionColor) / 255.0f;
vecDirectionColor.z = (float)GetBValue(Dlg.m_cDirectionColor) / 255.0f;
vecAmbientColor.x = (float)GetRValue(Dlg.m_cAmbientColor) / 255.0f;
vecAmbientColor.y = (float)GetGValue(Dlg.m_cAmbientColor) / 255.0f;
vecAmbientColor.z = (float)GetBValue(Dlg.m_cAmbientColor) / 255.0f;
bool bFlag[4];
bFlag[0] = Dlg.m_bDirectionLight;
bFlag[1] = Dlg.m_bGlobalShadow;
bFlag[2] = Dlg.m_bPointLight;
bFlag[3] = Dlg.m_bSkyLight;
char path[256];
GetCurrentDirectory(256,path);
sprintf(path,"%s\\CaldronLightmapInfo.dat",path);
FILE *fp = fopen(path,"wb");
fwrite(bFlag,sizeof(bool) * 4, 1,fp);
fwrite(&vecSkyLightColor,sizeof(D3DXVECTOR3),1,fp);
fwrite(&vecDirectionColor,sizeof(D3DXVECTOR3),1,fp);
fwrite(&vecAmbientColor,sizeof(D3DXVECTOR3),1,fp);
fwrite(&Dlg.m_fDirectionLightRandValue,sizeof(float),1,fp);
fwrite(&Dlg.m_iDirectionSampleCount,sizeof(int),1,fp);
fwrite(&Dlg.m_fExposeValue,sizeof(float),1,fp);
fwrite(&Dlg.m_iSkySampleCount,sizeof(int),1,fp);
fwrite(&Dlg.m_fGlobalRandValue,sizeof(float),1,fp);
fwrite(&Dlg.m_iGlobalSampleCount,sizeof(int),1,fp);
fwrite(&Dlg.m_fPointRandValue,sizeof(float),1,fp);
fwrite(&Dlg.m_iPointSampleCount,sizeof(int),1,fp);
fclose(fp);
m_bShowDlgLightmap=!m_bShowDlgLightmap;
switch(AfxMessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ?",MB_YESNO))
{
case IDNO:
CSceneManager::CalculateLightmap(0);
break;
case IDYES:
CSceneManager::CalculateLightmap(2);
break;
}
}
/* switch(AfxMessageBox("<22><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͻðڽ<C3B0><DABD>ϱ<EFBFBD>?",MB_YESNOCANCEL))
{
case 6:
CSceneManager::CalculateLightmap(1);
break;
case IDNO:
break;
case IDCANCEL:
break;
}*/
//CSceneManager::CalculateLightmap();
}
void CMainFrame::OnCheckOctree()
{
// TODO: Add your control notification handler code here
CSceneManager::CalculateOctree();
}
void CMainFrame::OnDestroy()
{
CFrameWnd::OnDestroy();
m_dlgConvertTexture->DestroyWindow();
m_dlgLightmap->DestroyWindow();
m_dlgMakeWater->DestroyWindow();
m_dlgMakeFall->DestroyWindow();
m_dlgMakePlant->DestroyWindow();
m_dlgCamera->DestroyWindow();
delete m_dlgMakeWater;
delete m_dlgConvertTexture;
delete m_dlgLightmap;
delete m_dlgMakeFall;
delete m_dlgMakePlant;
delete m_dlgCamera;
// TODO: Add your message handler code here
}
void CMainFrame::OnCheckEditterrain()
{
CButton *forIsShow=(CButton*)m_wndSceneEditBar.GetDlgItem(IDC_CHECK_EDITTERRAIN);
BOOL isShow=forIsShow->GetCheck();
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
av->m_MouseInterface=-2;
if(isShow==FALSE)
{
av->m_dlgEditTerrain->EndAndSave();
av->m_MouseInterface=-1;
}
av->m_SceneManager->m_PickHouseScene=NULL;
av->m_SceneManager->m_PickLightScene=NULL;
av->m_SceneManager->m_PickObjectScene=NULL;
av->ReArrangeDlg(0,isShow);
// TODO: Add your control notification handler code here
}
void CMainFrame::OnCheckWeathertime()
{
// TODO: Add your control notification handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
if(av->m_fWeatherTimeAdder==0.007f)
av->m_fWeatherTimeAdder=0.0f;
else
av->m_fWeatherTimeAdder=0.007f;
}
void CMainFrame::OnButtonFixweathercolor()
{
// TODO: Add your control notification handler code here
/*
CDlgWeatherColor dlgWeatherColor;
dlgWeatherColor.DoModal();
*/
m_dlgWeatherColor->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOREPOSITION|SWP_NOSIZE);
m_dlgWeatherColor->ShowWindow(SW_SHOW);
}
void CMainFrame::OnButtonMakewater()
{
m_dlgMakeWater->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOREPOSITION|SWP_NOSIZE);
m_dlgMakeWater->ShowWindow(SW_SHOW);
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_MouseInterface=30;
// TODO: Add your control notification handler code here
}
void CMainFrame::OnButtonWaterfall()
{
// TODO: Add your control notification handler code here
m_dlgMakeFall->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOREPOSITION|SWP_NOSIZE);
m_dlgMakeFall->ShowWindow(SW_SHOW);
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_MouseInterface=40;
}
void CMainFrame::OnScenesave()
{
// TODO: Add your command handler code here
UpdateData();
CString filename;
if(m_strSaveFilename=="")
{
CString strFilter = Z3SFILE;
CFileDialog filedia(FALSE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
filename=filedia.GetFileName();
}
else
{
filename=m_strSaveFilename;
}
if(filename=="")
return;
//CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_SceneManager->m_MapStorage.Save(filename.LockBuffer());
m_strSaveFilename=filename;
//CMapStorage::Save(filename.LockBuffer());
ContainerSave();
}
void CMainFrame::ContainerSave()
{
char strContainer[256] = {0};
if(!strcmp(CRenderOption::m_strBaseGraphicsDataPath,"Default"))
strcpy(strContainer,Z3DCONTAINERFILE);
else {
strncpy(strContainer,Z3DCONTAINERFILE,sizeof(char) * 26);
strcat(strContainer,"_");
strcat(strContainer,CRenderOption::m_strBaseGraphicsDataPath);
strcat(strContainer,".Z3C");
}
FILE *fp=fopen(strContainer,"wb");
m_MeshContainerBar.m_MeshContainerSheet->m_PageHouseContainer.Save(fp);
m_MeshContainerBar.m_MeshContainerSheet->m_PageObjectContainer.Save(fp);
m_MeshContainerBar.m_MeshContainerSheet->m_PageLightContainer.Save(fp);
m_MeshContainerBar.m_MeshContainerSheet->m_PageWideContainer.Save(fp);
// m_MeshContainerBar.m_MeshContainerSheet->m_PageSoundContainer.Save(fp);
fclose(fp);
}
void CMainFrame::ContainerLoad()
{
if(m_nMode==0)
{
char strContainer[256] = {0};
if(!strcmp(CRenderOption::m_strBaseGraphicsDataPath,"Default"))
strcpy(strContainer,Z3DCONTAINERFILE);
else {
strncpy(strContainer,Z3DCONTAINERFILE,sizeof(char) * 26);
strcat(strContainer,"_");
strcat(strContainer,CRenderOption::m_strBaseGraphicsDataPath);
strcat(strContainer,".Z3C");
}
FILE *fp=fopen(strContainer,"rb");
if(fp==NULL)
{
return;
}
m_MeshContainerBar.m_MeshContainerSheet->m_PageHouseContainer.Load(fp);
m_MeshContainerBar.m_MeshContainerSheet->SetActivePage(0);
m_MeshContainerBar.m_MeshContainerSheet->m_PageHouseContainer.UpdateHouseTree();
m_MeshContainerBar.m_MeshContainerSheet->SetActivePage(1);
m_MeshContainerBar.m_MeshContainerSheet->m_PageObjectContainer.Load(fp);
m_MeshContainerBar.m_MeshContainerSheet->m_PageObjectContainer.UpdateList();
m_MeshContainerBar.m_MeshContainerSheet->SetActivePage(2);
m_MeshContainerBar.m_MeshContainerSheet->m_PageLightContainer.Load(fp);
m_MeshContainerBar.m_MeshContainerSheet->m_PageLightContainer.UpdateList();
m_MeshContainerBar.m_MeshContainerSheet->SetActivePage(3);
m_MeshContainerBar.m_MeshContainerSheet->m_PageWideContainer.Load(fp);
m_MeshContainerBar.m_MeshContainerSheet->m_PageWideContainer.UpdateList();
m_MeshContainerBar.m_MeshContainerSheet->SetActivePage(4);
// m_MeshContainerBar.m_MeshContainerSheet->m_PageSoundContainer.Load(fp);
// m_MeshContainerBar.m_MeshContainerSheet->m_PageSoundContainer.UpdateList();
m_MeshContainerBar.m_MeshContainerSheet->SetActivePage(0);
fclose(fp);
}
}
void CMainFrame::OnButtonMaketree()
{
// TODO: Add your control notification handler code here
m_dlgMakePlant->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOREPOSITION|SWP_NOSIZE);
m_dlgMakePlant->ShowWindow(SW_SHOW);
}
void CMainFrame::OnButtonWalkmode()
{
// TODO: Add your control notification handler code here
if(CSceneManager::m_isCollisionDetection)
{
CSceneManager::m_isCollisionDetection=false;
}
else
{
CSceneManager::m_isCollisionDetection=true;
}
if(CSceneManager::m_ViewerMode==0)
{
/*
CSceneManager::m_ViewerMode=1;
CSceneManager::m_ViewCamera->m_matExtraPosition=CSceneManager::m_ViewCamera->m_matPosition;
CSceneManager::m_ViewCamera->m_matExtraView=CSceneManager::m_ViewCamera->m_matView;
CSceneManager::m_pCharacter->SetPosition(CSceneManager::m_ViewCamera->m_matPosition._41,CSceneManager::m_ViewCamera->m_matPosition._42,CSceneManager::m_ViewCamera->m_matPosition._42);
CSceneManager::m_pCharacter->SetDirection(CSceneManager::m_ViewCamera->m_fRoty+3.14159f);
*/
//CSceneManager::m_pCharacter->Turn(CSceneManager::m_ViewCamera->m_fRoty);
}
else
CSceneManager::m_ViewerMode=0;
}
void CMainFrame::OnCheckPickhouse()
{
// TODO: Add your control notification handler code here
CButton *btHouse=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKHOUSE);
CButton *btObject=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKOBJECT);
CButton *btNone=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKNONE);
CButton *btEffect =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_EFFECT);
CButton *btTrigger =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_TRIGGER);
CButton *btBsp =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_BSP);
btEffect->SetCheck(0);
btHouse->SetCheck(1);
btObject->SetCheck(0);
btNone->SetCheck(0);
btTrigger->SetCheck(0);
btBsp->SetCheck(0);
m_PickMode=1;
}
void CMainFrame::UnPickButton()
{
CButton *btHouse=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKHOUSE);
CButton *btObject=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKOBJECT);
CButton *btNone=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKNONE);
CButton *btEffect =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_EFFECT);
CButton *btTrigger =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_TRIGGER);
CButton *btBsp =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_BSP);
CButton *btPickFix =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKFIX);
btHouse->SetCheck(0);
btObject->SetCheck(0);
btNone->SetCheck(0);
btEffect->SetCheck(0);
btTrigger->SetCheck(0);
btBsp->SetCheck(0);
////
btPickFix->SetCheck(0);
CSceneManager::m_bPickFix=false;
if(CSceneManager::m_bPickFix==false)
{
CSceneManager::m_PickHouseScene=NULL;
CSceneManager::m_PickLightScene=NULL;
CSceneManager::m_PickObjectScene=NULL;
}
////
m_PickMode= -1;
UpdateData(FALSE);
}
void CMainFrame::OnCheckPickobect()
{
CButton *btHouse=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKHOUSE);
CButton *btObject=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKOBJECT);
CButton *btNone=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKNONE);
CButton *btEffect =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_EFFECT);
CButton *btTrigger =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_TRIGGER);
CButton *btBsp =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_BSP);
btHouse->SetCheck(0);
btObject->SetCheck(1);
btNone->SetCheck(0);
btEffect->SetCheck(0);
btTrigger->SetCheck(0);
btBsp->SetCheck(0);
m_PickMode=2;
// TODO: Add your control notification handler code here
}
void CMainFrame::OnCheckPicknode()
{
// TODO: Add your control notification handler code here
CButton *btHouse=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKHOUSE);
CButton *btObject=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKOBJECT);
CButton *btNone=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKNONE);
CButton *btTrigger =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_TRIGGER);
CButton *btBsp =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_BSP);
btHouse->SetCheck(0);
btObject->SetCheck(0);
btNone->SetCheck(1);
CButton *btEffect =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_EFFECT);
btEffect->SetCheck(0);
btTrigger->SetCheck(0);
btBsp->SetCheck(0);
m_PickMode=-1;
}
void CMainFrame::OnEffect()
{
// TODO: Add your control notification handler code here
//MessageBox("<22>غ<EFBFBD><D8BA><EFBFBD>..^^;;");
m_PickMode = 7;
CButton *btHouse=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKHOUSE);
CButton *btObject=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKOBJECT);
CButton *btNone=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKNONE);
CButton *btEffect =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_EFFECT);
CButton *btTrigger =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_TRIGGER);
CButton *btBsp =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_BSP);
btHouse->SetCheck(0);
btObject->SetCheck(0);
btNone->SetCheck(0);
btEffect->SetCheck(1);
btTrigger->SetCheck(0);
btBsp->SetCheck(0);
}
void CMainFrame::OnCheckTrigger()
{
m_PickMode = 8;
CButton *btHouse=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKHOUSE);
CButton *btObject=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKOBJECT);
CButton *btNone=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKNONE);
CButton *btEffect =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_EFFECT);
CButton *btTrigger =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_TRIGGER);
CButton *btBsp =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_BSP);
btHouse->SetCheck(0);
btObject->SetCheck(0);
btNone->SetCheck(0);
btEffect->SetCheck(0);
btTrigger->SetCheck(1);
btBsp->SetCheck(0);
}
void CMainFrame::OnCheckNotmove()
{
// TODO: Add your control notification handler code here
m_NotMove=!m_NotMove;
}
void CMainFrame::OnVertexoptimaze()
{
// TODO: Add your command handler code here
CSelectFolderDialog SelectFolderDlg(TRUE, "C:\\", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, this);
if(SelectFolderDlg.DoModal()!=IDOK)
return;
CString strFolderPath=SelectFolderDlg.GetSelectedPath();
CFileFind ff;
CString strFileName;
CString strPathFileName;
CString strPath=SelectFolderDlg.GetSelectedPath();
m_dlgConvertTexture->m_strPath=strFolderPath;
strFolderPath+="\\*.r3s";
if(ff.FindFile(strFolderPath)==TRUE)
{
BOOL bFlag=TRUE;
{
while(bFlag)
{
COptimizeMesh Mesh;
bFlag=ff.FindNextFile();
strFileName=ff.GetFileName();
strPathFileName=strPath;
strPathFileName+=strFileName;
Mesh.Load(strPathFileName.LockBuffer(),1);
/*
CMeshObject OptimizeMesh;
bFlag=ff.FindNextFile();
strFileName=ff.GetFileName();
strPathFileName=strPath;
strPathFileName+=strFileName;
OptimizeMesh.Load(strPathFileName.LockBuffer());
OptimizeMesh.Optimize();
OptimizeMesh.Save(strPathFileName.LockBuffer());
*/
}
}
}
ff.Close();
}
void CMainFrame::OnSectorSave()
{
// TODO: Add your command handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
matrix *matPos=av->m_BaseGraphicLayer.m_ViewCamera.GetMatPosition();
CString strSectorPos;
strSectorPos.Format("%s\\Sector %d %d.z3m",SECTORMAPPATH,(int)(matPos->_41/(63.0f*500.0f)),(int)(matPos->_43/(63.0f*500.0f)));
//CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_SceneManager->m_MapStorage.SaveSector(strSectorPos.LockBuffer(),(int)(matPos->_41/(63.0f*500.0f)),(int)(matPos->_43/(63.0f*500.0f)));
//CMapStorage::SaveSector(strSectorPos.LockBuffer(),(int)(matPos->_41/(63.0f*500.0f)),(int)(matPos->_43/(63.0f*500.0f)));
}
void CMainFrame::OnSectorLoad()
{
CString strFilter = Z3MFILE;
CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
CString filename=filedia.GetFileName();
if(filename=="")
return;
long ReadSectorX,ReadSectorY;
sscanf(filename.LockBuffer(),"Sector %d %d.z3m",&ReadSectorX,&ReadSectorY);
//CMapStorage::LoadSector(filename.LockBuffer(),ReadSectorX,ReadSectorY);
//CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_SceneManager->m_MapStorage.LoadSector(filename.LockBuffer(),ReadSectorX,ReadSectorY);
for(int cSector=0;cSector<LSIZEX*LSIZEY;cSector++)
{
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateHeight();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateWater();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateWideMap();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateFall();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateHouseObject();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GeneratePlant();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateObject();
//CSceneManager::m_HeightField.m_SectorScene[cSector].GenerateWideMap();
}
/*
CMapStorage::Load(filename.LockBuffer());
*/
// TODO: Add your command handler code here
}
//DEL void CMainFrame::OnButtonSectormove()
//DEL {
//DEL // TODO: Add your control notification handler code here
//DEL CDlgSectorMove dlgSectorMove;
//DEL dlgSectorMove.DoModal();
//DEL
//DEL matrix *ViewPos=CSceneManager::GetCamera()->GetMatPosition();
//DEL ViewPos->_41=SECTORSIZE*dlgSectorMove.m_ToMoveX;
//DEL ViewPos->_42=SECTORSIZE*dlgSectorMove.m_ToMoveY;
//DEL CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
//DEL av->m_SceneManager->UpdateScene();
//DEL }
void CMainFrame::OnButtonSectormove()
{
// TODO: Add your control notification handler code here
CDlgSectorMove dlgSectorMove;
dlgSectorMove.DoModal();
}
void CMainFrame::OnSectormove()
{
// TODO: Add your command handler code here
CDlgSectorMove dlgSectorMove;
dlgSectorMove.DoModal();
matrix *ViewPos=CSceneManager::GetCamera()->GetMatPosition();
ViewPos->_41=SECTORSIZE*dlgSectorMove.m_ToMoveX;
ViewPos->_43=SECTORSIZE*dlgSectorMove.m_ToMoveY;
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_SceneManager->UpdateScene(0.0f);
}
void CMainFrame::OnButtonGeneratesectorshoaw()
{
// TODO: Add your control notification handler code here
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
for(int cSector=0;cSector<LSIZEX*LSIZEY;cSector++)
{
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_ShadowUsed=-1;
}
for(int cShadow=0;cShadow<9;cShadow++)
{
av->m_SceneManager->m_HeightField.m_SectorScene->m_UsedShadowTerrain[cShadow]=-1;
}
for(cSector=0;cSector<LSIZEX*LSIZEY;cSector++)
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateWideMap();
vector3 *ViewPos=CSceneManager::GetCamera()->GetPosition();
int UpdatePositionX=(int)(ViewPos->x/SECTORSIZE);
int UpdatePositionY=(int)(ViewPos->z/SECTORSIZE);
int sectorx,sectory;
for(cSector=0;cSector<LSIZEX*LSIZEY;cSector++)
{
sectorx=(int)(av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_TM._41/SECTORSIZE);
sectory=(int)(av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_TM._43/SECTORSIZE);
if( UpdatePositionX <= sectorx+1 &&
UpdatePositionX >= sectorx-1 &&
UpdatePositionY <= sectory+1 &&
UpdatePositionY >= sectory-1)
{
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateShadow(BaseGraphicsLayer::GetDevice());
}
else
{
if(av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_ShadowUsed!=-1)
{
/*av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_UsedShadowTerrain[av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_ShadowUsed]=-1;
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].m_ShadowUsed=-1;*/
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateWideMap();
}
}
}
}
void CMainFrame::OnOldsceneload()
{
// TODO: Add your command handler code here
CString strFilter = Z3SFILE;
CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
CString filename=filedia.GetFileName();
if(filename=="")
return;
//CMapStorage::OldLoad(filename.LockBuffer());
//CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_SceneManager->m_MapStorage.OldLoad(filename.LockBuffer());
for(int cSector=0;cSector<LSIZEX*LSIZEY;cSector++)
{
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateHeight();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateWater();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateWideMap();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateFall();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateHouseObject();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GeneratePlant();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateObject();
//CSceneManager::m_HeightField.m_SectorScene[cSector].GenerateWideMap();
}
ContainerLoad();
}
void CMainFrame::OnButtonSectorview()
{
// TODO: Add your control notification handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
matrix *matPos=av->m_BaseGraphicLayer.m_ViewCamera.GetMatPosition();
CString strSectorPos;
int sx,sy;
sx=(int)(matPos->_41/(63.0f*500.0f));
sy=(int)(matPos->_43/(63.0f*500.0f));
//=CMapStorage::FindHouseMap(matPos->_41,matPos->_43);
}
void CMainFrame::OnInhousemapload()
{
// TODO: Add your command handler code here
CString strFilter = Z3HFILE;
CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
CString filename=filedia.GetPathName();
if(filename=="")
return;
//CMapStorage::LoadInHouseMap(filename.LockBuffer());
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_SceneManager->m_MapStorage.LoadInHouseMap(filename.LockBuffer());
}
void CMainFrame::OnInhousemapsave()
{
// TODO: Add your command handler code here
CString strFilter = Z3HFILE;
CFileDialog filedia(FALSE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
CString filename=filedia.GetPathName();
//tring filename=filedia.GetFileName();
if(filename=="")
return;
//CMapStorage::SaveInHouseMap(filename.LockBuffer());
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_SceneManager->m_MapStorage.SaveInHouseMap(filename.LockBuffer());
}
void CMainFrame::OnButtonInfo()
{
// TODO: Add your control notification handler code here
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
if(av->m_bInfoShow)
av->m_bInfoShow=false;
else
av->m_bInfoShow=true;
}
void CMainFrame::OnButtonCamera()
{
// TODO: Add your control notification handler code here
CSceneManager::GetCamera()->SaveViewMatrix();
CSceneManager::m_ViewerMode=2;
m_dlgCamera->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOREPOSITION|SWP_NOSIZE);
m_dlgCamera->ShowWindow(SW_SHOW);
}
void CMainFrame::OnWeather()
{
// TODO: Add your command handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
if(av->m_SceneManager->GetWeatherTimeAdder()==0.001f)
av->m_SceneManager->SetWeatherTimeAdder(0.0f);
else
av->m_SceneManager->SetWeatherTimeAdder(0.001f);
/*
if(av->m_SceneManager->m_fWeatherTimeAdder==0.001f)
av->m_SceneManager->m_fWeatherTimeAdder=0.0f;`
else
av->m_SceneManager->m_fWeatherTimeAdder=0.001f;
*/
}
void CMainFrame::OnShowinfo()
{
// TODO: Add your command handler code here
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
if(av->m_bInfoShow)
av->m_bInfoShow=false;
else
av->m_bInfoShow=true;
}
void CMainFrame::OnButtonGrass()
{
// TODO: Add your control notification handler code here
m_dlgMakeGrass->ShowWindow(SW_SHOW);
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_MouseInterface=60;
}
void CMainFrame::OnSectorloadnowpos()
{
// TODO: Add your command handler code here
CString strFilter = Z3MFILE;
CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
CString filename=filedia.GetFileName();
if(filename=="")
return;
long ReadSectorX,ReadSectorY;
sscanf(filename.LockBuffer(),"Sector %d %d.z3m",&ReadSectorX,&ReadSectorY);
//CMapStorage::LoadSector(filename.LockBuffer(),ReadSectorX,ReadSectorY);
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_SceneManager->m_MapStorage.LoadSector(filename.LockBuffer(),ReadSectorX,ReadSectorY);
for(int cSector=0;cSector<LSIZEX*LSIZEY;cSector++)
{
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateHeight();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateWater();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateWideMap();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateFall();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateHouseObject();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GeneratePlant();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateObject();
}
}
void CMainFrame::OnGarbegedel()
{
// TODO: Add your command handler code here
CDlgMapFileInfo dlgMapFileInfo;
dlgMapFileInfo.DoModal();
}
void CMainFrame::OnButtonEffect()
{
// TODO: Add your control notification handler code here
m_dlgEffect->ShowWindow(SW_SHOW);
m_dlgEffect->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOREPOSITION|SWP_NOSIZE);
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_MouseInterface=70;
}
void CMainFrame::OnCameraview()
{
// TODO: Add your command handler code here
CSceneManager::GetCamera()->SaveViewMatrix();
CSceneManager::m_ViewerMode=2;
//m_dlgCamera->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOREPOSITION|SWP_NOSIZE);
m_dlgCamera->ShowWindow(SW_SHOW);
}
void CMainFrame::OnSmokeparticle()
{
// TODO: Add your command handler code here
m_dlgEffect->ShowWindow(SW_SHOW);
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_MouseInterface=70;
}
void CMainFrame::OnWatermake()
{
// TODO: Add your command handler code here
m_dlgMakeWater->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOREPOSITION|SWP_NOSIZE);
m_dlgMakeWater->ShowWindow(SW_SHOW);
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_MouseInterface=30;
}
void CMainFrame::OnSoundmapsave()
{
// TODO: Add your command handler code here
m_MeshContainerBar.m_MeshContainerSheet->SetActivePage(4);
CString strFilter = SOUNDMAPFILE;
CFileDialog filedia(FALSE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
CString filename=filedia.GetPathName();
if(filename!="")
m_MeshContainerBar.m_MeshContainerSheet->m_PageSoundContainer.Save( filename );
}
void CMainFrame::OnSoundmapload()
{
// TODO: Add your command handler code here
m_MeshContainerBar.m_MeshContainerSheet->SetActivePage(4);
CString strFilter = SOUNDMAPFILE;
CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
CString filename=filedia.GetPathName();
if(filename!="")
m_MeshContainerBar.m_MeshContainerSheet->m_PageSoundContainer.Load( filename );
//av->m_SceneManager->m_MapStorage.SaveSoundMap(filename.LockBuffer());
}
void CMainFrame::OnClearall()
{
m_MeshContainerBar.m_MeshContainerSheet->m_PageSoundContainer.ClearAll();
}
void CMainFrame::OnAmbiencelist()
{
CAmbienceList ambList;
ambList.DoModal();
}
void CMainFrame::OnButtonBoid()
{
// TODO: Add your control notification handler code here
m_dlgBoid->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOREPOSITION|SWP_NOSIZE);
m_dlgBoid->ShowWindow(SW_SHOW);
//dlgBoid.DoModal();
}
void CMainFrame::OnWeathertime()
{
// TODO: Add your command handler code here
m_dlgWeatherColor->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOREPOSITION|SWP_NOSIZE);
m_dlgWeatherColor->ShowWindow(SW_SHOW);
}
void CMainFrame::OnGf3save()
{
// TODO: Add your command handler code here
UpdateData();
CString strFilter = Z3SFILE;
CFileDialog filedia(FALSE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
CString filename=filedia.GetFileName();
if(filename=="")
return;
//CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
//av->m_SceneManager->m_MapStorage.Save(filename.LockBuffer());
av->m_SceneManager->m_MapStorage.SaveGF3(filename.LockBuffer());
//CMapStorage::Save(filename.LockBuffer());
ContainerSave();
}
void CMainFrame::OnGf3load()
{
// TODO: Add your command handler code here
UpdateData();
CString strFilter = Z3SFILE;
CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
CString filename=filedia.GetFileName();
if(filename=="")
return;
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
//av->m_SceneManager->LoadMap(filename.LockBuffer());
av->m_SceneManager->m_MapStorage.LoadGF3(filename.LockBuffer());
//CMapStorage::Load(filename.LockBuffer());
av->m_SceneManager->m_HeightField.m_NowPositionX=-100000000;
av->m_SceneManager->m_HeightField.m_NowPositionY=-100000000;
av->m_SceneManager->m_HeightField.m_NowTessellatePosX=-100000000;
av->m_SceneManager->m_HeightField.m_NowTessellatePosY=-100000000;
int iX = av->m_SceneManager->m_HeightField.GetLSizeX();
int iY = av->m_SceneManager->m_HeightField.GetLSizeY();
//for(int cSector=0;cSector<LSIZEX*LSIZEY;cSector++)
for(int cSector=0;cSector<av->m_SceneManager->m_HeightField.GetLSizeX() * av->m_SceneManager->m_HeightField.GetLSizeY();cSector++)
{
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateHeight();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateWater();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateWideMap();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateFall();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateHouseObject();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GeneratePlant();
av->m_SceneManager->m_HeightField.m_SectorScene[cSector].GenerateObject();
//CSceneManager::m_HeightField.m_SectorScene[cSector].GenerateWideMap();
}
ContainerLoad();
}
void CMainFrame::OnCheckPickfix()
{
// TODO: Add your control notification handler code here
CSceneManager::m_bPickFix=!CSceneManager::m_bPickFix;
if(CSceneManager::m_bPickFix==false)
{
CSceneManager::m_PickHouseScene=NULL;
CSceneManager::m_PickLightScene=NULL;
CSceneManager::m_PickObjectScene=NULL;
}
}
void CMainFrame::OnButtonMeshoptimize()
{
// TODO: Add your control notification handler code here
if(CSceneManager::m_PickHouseScene && CSceneManager::m_PickObjectScene)
{
CSceneManager::m_PickObjectScene->m_pObject->Optimize();
CSceneManager::m_PickObjectScene->m_pObject->Save(CSceneManager::m_PickObjectScene->m_pObject->m_strMeshName);
}
else if(CSceneManager::m_PickHouseScene)
{
if(CSceneManager::m_PickHouseScene->m_HouseObject->m_pLodHouseObject)
{
CSceneManager::m_PickHouseScene->m_HouseObject->m_pLodHouseObject->Optimize();
CSceneManager::m_PickHouseScene->m_HouseObject->m_pLodHouseObject->Save(CSceneManager::m_PickHouseScene->m_HouseObject->m_pLodHouseObject->m_strMeshName);
}
if(CSceneManager::m_PickHouseScene->m_HouseObject->m_pOutHouseObject)
{
CSceneManager::m_PickHouseScene->m_HouseObject->m_pOutHouseObject->Optimize();
CSceneManager::m_PickHouseScene->m_HouseObject->m_pOutHouseObject->Save(CSceneManager::m_PickHouseScene->m_HouseObject->m_pOutHouseObject->m_strMeshName);
}
if(CSceneManager::m_PickHouseScene->m_HouseObject->m_pMedHouseObject)
{
CSceneManager::m_PickHouseScene->m_HouseObject->m_pMedHouseObject->Optimize();
CSceneManager::m_PickHouseScene->m_HouseObject->m_pMedHouseObject->Save(CSceneManager::m_PickHouseScene->m_HouseObject->m_pMedHouseObject->m_strMeshName);
}
if(CSceneManager::m_PickHouseScene->m_HouseObject->m_pInHouseObject)
{
CSceneManager::m_PickHouseScene->m_HouseObject->m_pInHouseObject->Optimize();
CSceneManager::m_PickHouseScene->m_HouseObject->m_pInHouseObject->Save(CSceneManager::m_PickHouseScene->m_HouseObject->m_pInHouseObject->m_strMeshName);
}
}
}
void CMainFrame::OnResave()
{
// TODO: Add your command handler code here
UpdateData();
CString strFilter = Z3SFILE;
CFileDialog filedia(FALSE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
CString filename=filedia.GetFileName();
if(filename=="")
return;
//CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
av->m_SceneManager->m_MapStorage.Save(filename.LockBuffer());
//CMapStorage::Save(filename.LockBuffer());
ContainerSave();
}
// BSP <20>߰<EFBFBD>
void CMainFrame::OnButtonBsplightmode()
{
// TODO: Add your control notification handler code here
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
// m_PickMode = 95;
/* CButton *btHouse=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKHOUSE);
CButton *btObject=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKOBJECT);
CButton *btNone=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKNONE);
CButton *btEffect =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_EFFECT);
CButton *btTrigger =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_TRIGGER);
CButton *btBsp =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_BUTTON_BSPLIGHTMODE);
btHouse->SetCheck(0);
btObject->SetCheck(0);
btNone->SetCheck(0);
btEffect->SetCheck(0);
btTrigger->SetCheck(0);
btBsp->SetCheck(1);
*/
if(av->m_SceneManager->m_pBspScene)
{
av->m_SceneManager->m_pBspScene->m_HouseObject->m_pBspObject->LoadLightmapVector3();
}
else
{
AfxMessageBox("BSP<EFBFBD><EFBFBD> <20><><EFBFBD>õǾ<C3B5><C7BE><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.");
}
}
void CMainFrame::PropertySetup()
{
CRect rc,MainRc;
m_SectorViewerBar.GetWindowRect(rc);
GetWindowRect(MainRc);
m_SectorViewerBar.SetWindowPos(&wndNoTopMost,rc.left,rc.top,MainRc.right-MainRc.left-30,rc.bottom-rc.top,SWP_NOMOVE|SWP_NOZORDER );
m_SectorViewerBar.m_SectorViewerSheet->GetWindowRect(rc);
m_SectorViewerBar.m_SectorViewerSheet->SetWindowPos(&wndNoTopMost,rc.left,rc.top,MainRc.right-MainRc.left-30,rc.bottom-rc.top,SWP_NOMOVE|SWP_NOZORDER );
}
void CMainFrame::OnTerraintextureautoinsert()
{
// TODO: Add your command handler code here
char strPathAll[256];
sprintf(strPathAll,"%s\\*.dds",WIDETEXTUREPATH);
WIN32_FIND_DATA wfd = {0};
HANDLE hFind = FindFirstFile(strPathAll, &wfd);
if(INVALID_HANDLE_VALUE == hFind)
return;
CString strFilePathname;
int IndexX,IndexY,DetailIndex;
char strDetailName[256];
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
CMapStorage *pMapStorage=&av->m_SceneManager->m_MapStorage;
char strDetailTextureName[256];
for(int i=0;i<pMapStorage->m_WideMap.num;i++)
{
for(int j = 0; j < 3; j++ ) {
memset(pMapStorage->m_WideMap[i]->m_strWidemapName[j],0,sizeof(char) * 256);
memset(pMapStorage->m_WideMap[i]->m_strDetailName[j],0,sizeof(char) * 256);
}
}
while(1)
{
strFilePathname.Format("%s",wfd.cFileName);
if(sscanf(strFilePathname.GetBuffer(0),"%d_%d_%d_%s.dds",&IndexX,&IndexY,&DetailIndex,strDetailName)==4)
{
if(DetailIndex>=3)
AfxMessageBox("sadfasdf");
if(strcmp(strDetailName,"Sand.dds")==0)
strcpy(strDetailTextureName,"SandDetail.dds");
if(strcmp(strDetailName,"Grass.dds")==0)
strcpy(strDetailTextureName,"GrassDetail.dds");
if(strcmp(strDetailName,"Land.dds")==0)
strcpy(strDetailTextureName,"LandDetail.dds");
if(strcmp(strDetailName,"Rock.dds")==0)
strcpy(strDetailTextureName,"RockDetail.dds");
if(strcmp(strDetailName,"Normal.dds")==0)
strcpy(strDetailTextureName,"Detail.dds");
bool bFound=false;
for(int i=0;i<pMapStorage->m_WideMap.num;i++)
{
if( pMapStorage->m_WideMap[i]->m_IndexX == IndexX&&
pMapStorage->m_WideMap[i]->m_IndexY == IndexY)
{
strcpy(pMapStorage->m_WideMap[i]->m_strWidemapName[DetailIndex],strFilePathname.GetBuffer(0));
strcpy(pMapStorage->m_WideMap[i]->m_strDetailName[DetailIndex],strDetailTextureName);
bFound=true;
break;
}
}
if(!bFound)
{
CSectorWideMap *AddWideMap=new CSectorWideMap();
memset(AddWideMap,0,sizeof(CSectorWideMap));
AddWideMap->m_IndexX=IndexX;
AddWideMap->m_IndexY=IndexY;
strcpy(AddWideMap->m_strWidemapName[DetailIndex],strFilePathname.GetBuffer(0));
strcpy(AddWideMap->m_strDetailName[DetailIndex],strDetailTextureName);
pMapStorage->m_WideMap.Add(AddWideMap);
}
}
if(FindNextFile(hFind, &wfd)==FALSE)
break;
}
}
void CMainFrame::OnDds()
{
// TODO: Add your command handler code here
CDds_container tmp;
tmp.DoModal();
}
void CMainFrame::OnCheckTerrainlightmap()
{
// TODO: Add your control notification handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
matrix *matPos=av->m_BaseGraphicLayer.m_ViewCamera.GetMatPosition();
vector3 vecViewPos=matPos->GetLoc();
CSectorScene *pCenterSectorScene=NULL;
for(int i=0;i<LSIZEX*LSIZEY;i++)
{
if( av->m_SceneManager->m_HeightField.m_SectorScene[i].m_AccumulateTM._41 <= vecViewPos.x &&
vecViewPos.x <= av->m_SceneManager->m_HeightField.m_SectorScene[i].m_AccumulateTM._41+SECTORSIZE &&
av->m_SceneManager->m_HeightField.m_SectorScene[i].m_AccumulateTM._43 <= vecViewPos.z &&
vecViewPos.z<= av->m_SceneManager->m_HeightField.m_SectorScene[i].m_AccumulateTM._43+SECTORSIZE )
{
pCenterSectorScene=&av->m_SceneManager->m_HeightField.m_SectorScene[i];
break;
}
}
int SectorPx=(int)(pCenterSectorScene->m_AccumulateTM._41/SECTORSIZE);
int SectorPy=(int)(pCenterSectorScene->m_AccumulateTM._43/SECTORSIZE);
CSectorScene *SelectNeighborScene[8];
for(int ix=0;ix<LSIZEX; ix++)
{
for(int iy=0;iy<LSIZEY;iy++)
{
int NowSectorPx=(int)(av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX].m_AccumulateTM._41/SECTORSIZE);
int NowSectorPy=(int)(av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX].m_AccumulateTM._43/SECTORSIZE);
if( SectorPx-1 == NowSectorPx && SectorPy-1 == NowSectorPy)
SelectNeighborScene[0]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
if( SectorPx == NowSectorPx && SectorPy-1 == NowSectorPy)
SelectNeighborScene[1]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
if( SectorPx+1 == NowSectorPx && SectorPy-1 == NowSectorPy)
SelectNeighborScene[2]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
if( SectorPx-1 == NowSectorPx && SectorPy == NowSectorPy)
SelectNeighborScene[3]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
if( SectorPx+1 == NowSectorPx && SectorPy == NowSectorPy)
SelectNeighborScene[4]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
if( SectorPx-1 == NowSectorPx && SectorPy+1 == NowSectorPy)
SelectNeighborScene[5]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
if( SectorPx == NowSectorPx && SectorPy+1 == NowSectorPy)
SelectNeighborScene[6]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
if( SectorPx+1 == NowSectorPx && SectorPy+1 == NowSectorPy)
SelectNeighborScene[7]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
}
}
pCenterSectorScene->GenerateTerrainLightmap(BaseGraphicsLayer::GetDevice(),SelectNeighborScene);
// OnSectorlightgen();
}
void CMainFrame::OnButtonCharacterviewer()
{
// TODO: Add your control notification handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
matrix *matPos=av->m_BaseGraphicLayer.m_ViewCamera.GetMatPosition();
vector3 vecViewPos=matPos->GetLoc();
CDlgCharacterCreate dlgChrCreate;
dlgChrCreate.DoModal();
/*
for(int i=0;i<10;i++)
{
av->m_ChrManager.AddCharacter("PC_MAN.GCMDS", "FACE01", "HAIR01",vecViewPos+vector3(rand()%1000,0.0f,rand()%1000));
}
*/
}
void CMainFrame::OnButtonCharactermove()
{
// TODO: Add your control notification handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
if(av->m_nCameraViewMode==0)
{
av->m_nCameraViewMode=1;
av->m_ChrManager.m_nFocusCharacter=0;
}
else
{
av->m_nCameraViewMode=0;
//av->m_ChrManager.m_nFocusCharacter=-1;
matrix *matPos=CSceneManager::GetCamera()->GetMatPosition();
vector3 vecPos=matPos->GetLoc();
matPos->Translation(vecPos);
matrix matInv;
matInv.Inverse(*matPos);
CSceneManager::GetCamera()->SetMatView(matInv);
CSceneManager::GetCamera()->SetRotaitionX(0.0f);
CSceneManager::GetCamera()->SetRotaitionY(0.0f);
CSceneManager::GetCamera()->SetRotaitionZ(0.0f);
}
}
void CMainFrame::OnCharactercontrol()
{
// TODO: Add your command handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
if(av->m_nCameraViewMode==0)
{
av->m_nCameraViewMode=1;
av->m_ChrManager.m_nFocusCharacter=0;
}
else
{
av->m_nCameraViewMode=0;
//av->m_ChrManager.m_nFocusCharacter=-1;
matrix *matPos=CSceneManager::GetCamera()->GetMatPosition();
vector3 vecPos=matPos->GetLoc();
matPos->Translation(vecPos);
matrix matInv;
matInv.Inverse(*matPos);
CSceneManager::GetCamera()->SetMatView(matInv);
CSceneManager::GetCamera()->SetRotaitionX(0.0f);
CSceneManager::GetCamera()->SetRotaitionY(0.0f);
CSceneManager::GetCamera()->SetRotaitionZ(0.0f);
}
}
void CMainFrame::OnMakecharacter()
{
// TODO: Add your command handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
matrix *matPos=av->m_BaseGraphicLayer.m_ViewCamera.GetMatPosition();
vector3 vecViewPos=matPos->GetLoc();
CDlgCharacterCreate dlgChrCreate;
dlgChrCreate.DoModal();
}
void CMainFrame::OnButtonChareffect()
{
// TODO: Add your control notification handler code here
}
void CMainFrame::OnButtonCameramodechange()
{
// TODO: Add your control notification handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
av->m_ChrManager.MouseModeChange();
}
void CMainFrame::OnEsf()
{
// TODO: Add your command handler code here
char str[] = "Esf <20><><EFBFBD><EFBFBD>(*.esf) |*.esf| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(*.*)|*.*||";
CString strFilter = str;
CString t_name;
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CWorldCreatorView* av=(CWorldCreatorView*)mf->GetActiveView();
CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
t_name = filedia.GetFileName();
// strcpy((av->m_ChrManager.m_TestEsf),(t_name.LockBuffer()));
}
void CMainFrame::OnInterfaceEsf()
{
// TODO: Add your command handler code here
char str[] = "Esf <20><><EFBFBD><EFBFBD>(*.esf) |*.esf| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(*.*)|*.*||";
CString strFilter = str;
CString t_name;
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CWorldCreatorView* av=(CWorldCreatorView*)mf->GetActiveView();
CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
t_name = filedia.GetFileName();
// strcpy((av->m_ChrManager.m_TestEsfInterface),(t_name.LockBuffer()));
}
void CMainFrame::OnTextesf()
{
// TODO: Add your command handler code here
// TODO: Add your command handler code here
char str[] = "Esf <20><><EFBFBD><EFBFBD>(*.esf) |*.esf| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(*.*)|*.*||";
CString strFilter = str;
CString t_name;
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CWorldCreatorView* av=(CWorldCreatorView*)mf->GetActiveView();
CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
t_name = filedia.GetFileName();
strcpy((av->m_ChrManager.m_TextEsf),(t_name.LockBuffer()));
}
void CMainFrame::OnTextinteresf()
{
// TODO: Add your command handler code here
char str[] = "Esf <20><><EFBFBD><EFBFBD>(*.esf) |*.esf| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(*.*)|*.*||";
CString strFilter = str;
CString t_name;
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CWorldCreatorView* av=(CWorldCreatorView*)mf->GetActiveView();
CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
t_name = filedia.GetFileName();
strcpy((av->m_ChrManager.m_TextEsfInterface),(t_name.LockBuffer()));
}
void CMainFrame::OnCharactercamera()
{
// TODO: Add your command handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
av->m_ChrManager.MouseModeChange();
}
void CMainFrame::OnMouseshow()
{
static int n=0;
if(n==0)
{
ShowCursor(FALSE);
n=1;
}
else
{
ShowCursor(TRUE);
n=0;
}
// TODO: Add your command handler code here
}
void CMainFrame::OnCharmotion()
{
// TODO: Add your command handler code here
CDlgEditName tmp;
tmp.DoModal();
strncpy(CCharacterControl::m_WCharMotion,tmp.m_EditName.LockBuffer(),49 * sizeof(char));
}
void CMainFrame::OnChareff()
{
// TODO: Add your command handler code here
CCharEffect tmp;
tmp.DoModal();
}
/*
void CMainFrame::OnButtonBsp()
{
// TODO: Add your control notification handler code here
}
*/
void CMainFrame::OnBsp()
{
// TODO: Add your control notification handler code here
CWorldCreatorView *av=(CWorldCreatorView *)GetActiveView();
m_PickMode = 95;
CButton *btHouse=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKHOUSE);
CButton *btObject=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKOBJECT);
CButton *btNone=(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_PICKNONE);
CButton *btEffect =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_EFFECT);
CButton *btTrigger =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_CHECK_TRIGGER);
CButton *btBsp =(CButton*)m_MeshContainerBar.GetDlgItem(IDC_BSP);
btHouse->SetCheck(0);
btObject->SetCheck(0);
btNone->SetCheck(0);
btEffect->SetCheck(0);
btTrigger->SetCheck(0);
btBsp->SetCheck(1);
}
// Sector <20><><EFBFBD><EFBFBD> light <20><><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD>Ʈ
void CMainFrame::OnSectorlightgen()
{
// TODO: Add your command handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
matrix *matPos = av->m_SceneManager->m_ViewCamera->GetMatPosition();
D3DXVECTOR3 vecCamera = D3DXVECTOR3(matPos->_41,matPos->_42,matPos->_43);
int indexx=(int)((vecCamera.x)/SECTORSIZE);
int indexy=(int)((vecCamera.z)/SECTORSIZE);
int iLSizeX = av->m_SceneManager->m_HeightField.GetLSizeX();
int iLSizeY = av->m_SceneManager->m_HeightField.GetLSizeY();
CSectorScene *pCurrentSector = NULL;
for(int ix=0;ix<iLSizeX;ix++)
{
for(int iy=0;iy<iLSizeY;iy++)
{
int iSectorx = (int)((av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*iLSizeX].m_TM._41)/SECTORSIZE);
int iSectory = (int)((av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*iLSizeX].m_TM._43)/SECTORSIZE);
// if(iSectorx == indexx && iSectory == indexy)
// {
pCurrentSector = &(av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*iLSizeX]);
if(pCurrentSector)
{
CSectorLightMap *pMapLight = av->m_SceneManager->m_MapStorage.FindLightMap(pCurrentSector->m_TM._41,pCurrentSector->m_TM._43);
if(pMapLight) {
for(int cLight = 0; cLight < pMapLight->m_lstLights.size(); cLight++)
{
D3DXVECTOR3 vecPos = pMapLight->m_lstLights[cLight].m_vecPos;
vector3 vecTarget = vector3(vecPos.x,vecPos.y,vecPos.z);
float fRange = pMapLight->m_lstLights[cLight].m_fRange;
float fTerrainHeight = CSceneManager::m_HeightField.GetHeight(vecTarget);
if(fTerrainHeight > vecPos.y)
{
pMapLight->m_lstLights[cLight].m_fExpose = -10.0;
continue;
}
vecTarget.y = fTerrainHeight;
float fLength = D3DXVec3Length(&(D3DXVECTOR3(vecPos.x - vecTarget.x,vecPos.y - vecTarget.y,vecPos.z - vecTarget.z)));
if(fLength < fRange) // <20>ٴڿ<D9B4> glow <20><><EFBFBD><EFBFBD>
{
pMapLight->m_lstLights[cLight].m_fExpose = fRange - fLength;
}
else
{
pMapLight->m_lstLights[cLight].m_fExpose = -10.0;
}
}
pCurrentSector->GenerateSectorLight();
}
}
// }
}
}
}
void CMainFrame::OnCharacterlod()
{
// TODO: Add your command handler code here
CDialogCharacterLodDist *pDialog;
pDialog = new CDialogCharacterLodDist;
pDialog->Create(IDD_DIALOG_CHARACTERLOD);
pDialog->SetWindowPos( NULL, 0, 100, 0, 0, SWP_NOSIZE | SWP_NOZORDER );
}
void CMainFrame::OnChrdir()
{
// TODO: Add your command handler code here
CSelectFolderDialog SelectFolderDlg(TRUE, "C:\\", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, this);
if(SelectFolderDlg.DoModal()!=IDOK)
{
return;
}
CString strPath = SelectFolderDlg.GetSelectedPath();
strcpy(WORLDCHRDIFF,strPath.GetBuffer(256));
char path[256];
GetCurrentDirectory(256,path);
sprintf(path,"%s\\CHRPATH.dat",path);
FILE *fp = fopen(path,"wt");
if(fp) {
fprintf(fp,"%s\n",WORLDCHRDIFF);
fprintf(fp,"%s\n",WORLDCHRBUM);
fprintf(fp,"%s\n",WORLDCHRENV);
fclose(fp);
}
}
void CMainFrame::OnChrbumdir()
{
// TODO: Add your command handler code here
CSelectFolderDialog SelectFolderDlg(TRUE, "C:\\", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, this);
if(SelectFolderDlg.DoModal()!=IDOK)
{
return;
}
CString strPath = SelectFolderDlg.GetSelectedPath();
strcpy(WORLDCHRBUM,strPath.GetBuffer(256));
char path[256];
GetCurrentDirectory(256,path);
sprintf(path,"%s\\CHRPATH.dat",path);
FILE *fp = fopen(path,"wt");
if(fp) {
fprintf(fp,"%s\n",WORLDCHRDIFF);
fprintf(fp,"%s\n",WORLDCHRBUM);
fprintf(fp,"%s\n",WORLDCHRENV);
fclose(fp);
}
}
void CMainFrame::OnChrenvdir()
{
// TODO: Add your command handler code here
CSelectFolderDialog SelectFolderDlg(TRUE, "C:\\", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, this);
if(SelectFolderDlg.DoModal()!=IDOK)
{
return;
}
CString strPath = SelectFolderDlg.GetSelectedPath();
strcpy(WORLDCHRENV,strPath.GetBuffer(256));
FILE *fp = fopen("c:\\MP-project\\CHRPATH.dat","wt");
if(fp) {
fprintf(fp,"%s\n",WORLDCHRDIFF);
fprintf(fp,"%s\n",WORLDCHRBUM);
fprintf(fp,"%s\n",WORLDCHRENV);
fclose(fp);
}
}
void CMainFrame::OnTerrainfix()
{
// TODO: Add your control notification handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
matrix *matPos=av->m_BaseGraphicLayer.m_ViewCamera.GetMatPosition();
vector3 vecViewPos=matPos->GetLoc();
CSectorScene *pCenterSectorScene=NULL;
for(int i=0;i<LSIZEX*LSIZEY;i++)
{
if( av->m_SceneManager->m_HeightField.m_SectorScene[i].m_AccumulateTM._41 <= vecViewPos.x &&
vecViewPos.x <= av->m_SceneManager->m_HeightField.m_SectorScene[i].m_AccumulateTM._41+SECTORSIZE &&
av->m_SceneManager->m_HeightField.m_SectorScene[i].m_AccumulateTM._43 <= vecViewPos.z &&
vecViewPos.z<= av->m_SceneManager->m_HeightField.m_SectorScene[i].m_AccumulateTM._43+SECTORSIZE )
{
pCenterSectorScene=&av->m_SceneManager->m_HeightField.m_SectorScene[i];
break;
}
}
int SectorPx=(int)(pCenterSectorScene->m_AccumulateTM._41/SECTORSIZE);
int SectorPy=(int)(pCenterSectorScene->m_AccumulateTM._43/SECTORSIZE);
CSectorScene *SelectNeighborScene[8];
for(int ix=0;ix<LSIZEX; ix++)
{
for(int iy=0;iy<LSIZEY;iy++)
{
int NowSectorPx=(int)(av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX].m_AccumulateTM._41/SECTORSIZE);
int NowSectorPy=(int)(av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX].m_AccumulateTM._43/SECTORSIZE);
if( SectorPx-1 == NowSectorPx && SectorPy-1 == NowSectorPy)
SelectNeighborScene[0]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
if( SectorPx == NowSectorPx && SectorPy-1 == NowSectorPy)
SelectNeighborScene[1]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
if( SectorPx+1 == NowSectorPx && SectorPy-1 == NowSectorPy)
SelectNeighborScene[2]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
if( SectorPx-1 == NowSectorPx && SectorPy == NowSectorPy)
SelectNeighborScene[3]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
if( SectorPx+1 == NowSectorPx && SectorPy == NowSectorPy)
SelectNeighborScene[4]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
if( SectorPx-1 == NowSectorPx && SectorPy+1 == NowSectorPy)
SelectNeighborScene[5]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
if( SectorPx == NowSectorPx && SectorPy+1 == NowSectorPy)
SelectNeighborScene[6]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
if( SectorPx+1 == NowSectorPx && SectorPy+1 == NowSectorPy)
SelectNeighborScene[7]=&av->m_SceneManager->m_HeightField.m_SectorScene[ix+iy*LSIZEX];
}
}
pCenterSectorScene->FixedTerrainLightmap(BaseGraphicsLayer::GetDevice(),SelectNeighborScene);
// OnSectorlightgen();
}
void CMainFrame::OnButtonReload()
{
// TODO: Add your control notification handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
matrix *matPos=av->m_BaseGraphicLayer.m_ViewCamera.GetMatPosition();
vector3 vecViewPos=matPos->GetLoc();
CSectorScene *pCenterSectorScene=NULL;
for(int i=0;i<LSIZEX*LSIZEY;i++)
{
if( av->m_SceneManager->m_HeightField.m_SectorScene[i].m_AccumulateTM._41 <= vecViewPos.x &&
vecViewPos.x <= av->m_SceneManager->m_HeightField.m_SectorScene[i].m_AccumulateTM._41+SECTORSIZE &&
av->m_SceneManager->m_HeightField.m_SectorScene[i].m_AccumulateTM._43 <= vecViewPos.z &&
vecViewPos.z<= av->m_SceneManager->m_HeightField.m_SectorScene[i].m_AccumulateTM._43+SECTORSIZE )
{
pCenterSectorScene=&av->m_SceneManager->m_HeightField.m_SectorScene[i];
break;
}
}
pCenterSectorScene->ReloadWideMap();
}
void CMainFrame::OnButtonMinimap()
{
// TODO: Add your control notification handler code here
CWorldCreatorView* av=(CWorldCreatorView*)GetActiveView();
av->m_SceneManager->m_bMinimapGenerate = true;
}
void CMainFrame::OnMenuZ3cload()
{
// TODO: Add your command handler code here
char str[] = "Z3C <20><><EFBFBD><EFBFBD>(*.Z3C) |*.z3c| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(*.*)|*.*||";
char strFileName[256] = {0};
CString strFilter = str;
CString t_name;
CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
strcpy(strFileName,filedia.GetFileName().GetBuffer(256));
FILE *fp=fopen(strFileName,"rb");
if(fp==NULL)
{
return;
}
m_MeshContainerBar.m_MeshContainerSheet->m_PageHouseContainer.Load(fp,1);
m_MeshContainerBar.m_MeshContainerSheet->SetActivePage(0);
m_MeshContainerBar.m_MeshContainerSheet->m_PageHouseContainer.UpdateHouseTree();
m_MeshContainerBar.m_MeshContainerSheet->SetActivePage(1);
m_MeshContainerBar.m_MeshContainerSheet->m_PageObjectContainer.Load(fp,1);
m_MeshContainerBar.m_MeshContainerSheet->m_PageObjectContainer.UpdateList();
m_MeshContainerBar.m_MeshContainerSheet->SetActivePage(2);
m_MeshContainerBar.m_MeshContainerSheet->m_PageLightContainer.Load(fp,1);
m_MeshContainerBar.m_MeshContainerSheet->m_PageLightContainer.UpdateList();
m_MeshContainerBar.m_MeshContainerSheet->SetActivePage(3);
m_MeshContainerBar.m_MeshContainerSheet->m_PageWideContainer.Load(fp,1);
m_MeshContainerBar.m_MeshContainerSheet->m_PageWideContainer.UpdateList();
m_MeshContainerBar.m_MeshContainerSheet->SetActivePage(4);
// m_MeshContainerBar.m_MeshContainerSheet->m_PageSoundContainer.Load(fp);
// m_MeshContainerBar.m_MeshContainerSheet->m_PageSoundContainer.UpdateList();
m_MeshContainerBar.m_MeshContainerSheet->SetActivePage(0);
fclose(fp);
}
void CMainFrame::OnCameraset()
{
// TODO: Add your command handler code here
CDlgCameraSet Dlg;
Dlg.DoModal();
}