Files
Client/GameTools/Zallad3D SceneClass/SceneManager.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

6572 lines
196 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.
// SceneManager.cpp: implementation of the CSceneManager class.
//
//////////////////////////////////////////////////////////////////////
#include "SceneManager.h"
#include <d3dx8.h>
#include "ConvertTexture.h"
#include "BaseGraphicsLayer.h"
#include "SectorSoundMap.h"
#include "BGMController.h"
//#include "RenderOption.h"
#include <exception>
#include "CCameraScript.h"
#include "WBEnvPlaneTex.h"
#include "RainParticle.h"
#include "ChristmasParticle.h"
#include "hristmasParticleManager.h"
#include "SceneStateMgr.h"
#include "FullSceneEffect.h"
using namespace std;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CViewCamera* CSceneManager::m_ViewCamera;
#define KeyPressed( key ) HIBYTE( GetAsyncKeyState( key ) )
// SceneData Container
CHeightFieldScene CSceneManager::m_HeightField;
CMeshObjectContainer CSceneManager::m_MeshObjectContainer;
CHouseObjectContainer CSceneManager::m_HouseObjectContainer;
CLightContainer CSceneManager::m_LightObjectContainer;
CObjectContainer CSceneManager::m_ObjectContainer;
CWeatherManager CSceneManager::m_WeatherManager;
COctreeContainer CSceneManager::m_OctreeContainer;
CInstanceObjectManager CSceneManager::m_InstanceObjectManager;
WBWaterNormalTexGenerator *CSceneManager::m_pWaterTexGenerator = NULL;
float CSceneManager::m_fWeatherTimeAdder;
CCharacterLightShadowManager CSceneManager::m_CharacterManager;
//CMapStorage CSceneManager::m_MapStorage;
//Pick Member
long CSceneManager::m_bIsPickObjectMoving;
CHouseObjectScene *CSceneManager::m_PickHouseScene;
CLightObjectScene *CSceneManager::m_PickLightScene;
CSectorLandscapeEffectMap *CSceneManager::m_PickLandscape;
CObjectScene *CSceneManager::m_PickObjectScene;
matrix CSceneManager::m_matUndo;
bool CSceneManager::m_bPickFix=false;
//Lod Member
int CSceneManager::m_isTessellate;
//Detail Member
long CSceneManager::m_DetailCharShadow;
long CSceneManager::m_DetailMapShadow;
long CSceneManager::m_DetailBuildShadow;
long CSceneManager::m_DetailTerrain;
long CSceneManager::m_DetailChrMesh;
long CSceneManager::m_DetailViewRange;
long CSceneManager::m_DetailWaterReflection;
long CSceneManager::m_DetailLensflare;
long CSceneManager::m_DetailTreeDetail;
//
LPDIRECT3DDEVICE8 CSceneManager::m_pd3dDevice;
CCollisionDetection CSceneManager::m_CollisionDetection;
bool CSceneManager::m_isCollisionDetection;
//
//Particle Manager//
//CParticleManager CSceneManager::m_ParticleManager;
int CSceneManager::m_ViewerMode;
long CSceneManager::m_cRenderVertex;
long CSceneManager::m_cRenderPolygon;
long CSceneManager::m_cRenderSector;
long CSceneManager::m_cRenderSectorPoly;
long CSceneManager::m_cRenderSectorVertex;
long CSceneManager::m_cRenderPrimitive;
vector3 CSceneManager::m_vecPickRayStart;
vector3 CSceneManager::m_vecPickRayDir;
float CSceneManager::m_fRemainFrame;
bool CSceneManager::m_bEditor;
CTexture CSceneManager::m_NsTexture;
float CSceneManager::m_fChrCameraInter;
float CSceneManager::m_fWeatherTime;
//CBoidScene CSceneManager::m_Boid;
CHouseObjectScene *CSceneManager::m_pBspScene=NULL;
List<vector3> CSceneManager::m_vecBspConvertList;
List<CHouseObjectScene*> CSceneManager::m_pBspConvertList;
List<vector3> CSceneManager::m_vecFieldConvertList;
CX3DEffectManager CSceneManager::m_EffectManager;
CSectorEffectMap *CSceneManager::m_Effect_Map;
CSectorEffectMap *CSceneManager::m_PickEffect;
BOOL CSceneManager::m_bPickEffect;
int CSceneManager::m_EffectNum;
CTexture CSceneManager::m_ChracterEnvTexture;
LPDIRECT3DCUBETEXTURE8 CSceneManager::m_LightCubeTexture;
List<CSceneManager::CGlareNode> CSceneManager::m_GlareList;
CRenderEnvTexture CSceneManager::m_DiffuseLightCubeTexture;
CRenderEnvTexture CSceneManager::m_SpecularLightTexture;
CRenderTexture CSceneManager::m_SpGlareTexture;
CLightEffectManager CSceneManager::m_LightEffectManager;
color CSceneManager::m_FullSceneFade;
char CSceneManager::m_SceneManagerPath[256];
//ũ<><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
CSnowFall CSceneManager::m_SnowFall;
CRenderOption::ZoneInfo CSceneManager::m_ZoneInfoData;
//////////////////////////BSP<53>߰<EFBFBD>
RBspSceneManager CSceneManager::m_RBspSceneManager;
bool CSceneManager::m_bRBspSceneIn = false;
//// Sector Light
CSectorLight *CSceneManager::m_pPickSectorLight = NULL;
bool CSceneManager::m_bRenderSectorLight = true;
D3DLIGHT8 CSceneManager::m_CharacterLight;
bool CSceneManager::m_bCharacterLight;
float CSceneManager::m_fGlowPlaneRange;
bool CSceneManager::m_bCharacterLightOp;
bool CSceneManager::m_bSectorLightFactor = false;
DWORD CSceneManager::m_dwSectorLightFactor = 0xffffffff;
CCameraScript *g_CameraScript = NULL;
CShaderManager CSceneManager::m_ShaderManager;
WBEnvPlaneTex *CSceneManager::m_pEnvPlaneTex = NULL;
CGlareManager *CSceneManager::m_GlareManager = NULL;
bool CSceneManager::m_bEnv = false;
CTexture *CSceneManager::m_pBlackGlare = NULL;
CEffectCasher *CSceneManager::m_pEsfCasher = NULL;
int g_iBlurTextureNum = 6;
int g_iBlurCount = 0;
D3DXVECTOR3 CSceneManager::m_vecLifeColor;
CFullSceneEffect *CSceneManager::m_pFullSceneEffect = NULL;
bool CSceneManager::m_bSceneNodeCulling = true;
bool CSceneManager::m_bMinimapGenerate = false;
CSectorScene *CSceneManager::m_pPickSector = NULL;
IDirect3DCubeTexture8* CSceneManager::m_pWorldCubemap = NULL;
ID3DXRenderToEnvMap* CSceneManager::m_pRenderEnvMap = NULL;
bool CSceneManager::m_bInView = false; // true <20>϶<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
CHouseObjectScene *CSceneManager::m_pInViewHouseScene = NULL;
//Caldron::Base::CResourceLoader *CSceneManager::m_pResourceLoader = NULL;
//CCaldronHouseCacheMgr *CSceneManager::m_pCaldronHouseCacheMgr = NULL;
CSceneManager::CSceneManager()
{
//LogMessage("Constructor SceneManager");
m_isTessellate=1;
m_PickHouseScene=NULL;
m_bIsPickObjectMoving=0;
m_fWeatherTimeAdder=0.001f;
m_ViewerMode=0;
m_fRemainFrame=0;
m_isCollisionDetection=false;
m_bEditor=false;
m_fChrCameraInter=350.0f;
m_fWeatherTime=0.0f;
m_fWeatherTimeAdder=0.0f;
m_EffectNum = 0;
m_bPickEffect = NULL;
m_PickLandscape = NULL;
m_ScreenSize=1024;
m_FullSceneFade.c=0x0;
strcpy(m_SceneManagerPath,"");
m_bSnowFall = false;
memset(&m_CharacterLight,0,sizeof(D3DLIGHT8));
m_CharacterLight.Type=D3DLIGHT_POINT;
/* m_CharacterLight.Attenuation0=0.2f;
m_CharacterLight.Attenuation1=0.005f;
m_CharacterLight.Attenuation2=0.0f;
*/
m_CharacterLight.Attenuation0=0.6f;
m_CharacterLight.Attenuation1=0.001f;
m_CharacterLight.Attenuation2=0.0f;
m_CharacterLight.Diffuse.r = 227.0f / 255.0f;
m_CharacterLight.Diffuse.g = 186.0f / 255.0f;
m_CharacterLight.Diffuse.b = 31.0f / 255.0f;
m_CharacterLight.Position.x = 0.0f;
m_CharacterLight.Position.y = 0.0f;
m_CharacterLight.Position.z = 0.0f;
m_CharacterLight.Range= 1500.0f;
m_CharacterLight.Falloff = 1.0f;
m_fGlowPlaneRange = 800.0f;
m_bCharacterLight = true;
m_bCharacterLightOp = true;
m_pBlackGlare = NULL;
m_pRainParticle = NULL;
m_pChristmasParticle = NULL;
m_pChristmasParticleManager = NULL;
m_bChristmas = true;
srand(time(0));
m_pFullSceneEffect = NULL;
m_pFullsceneEffect2 = NULL;
m_vecLifeColor = D3DXVECTOR3(0.0f,0.0f,0.0f);
m_pRenderEnvMap = NULL;
m_pWorldCubemap = NULL;
m_bInView = false;
m_pInViewHouseScene = NULL;
// m_pResourceLoader = new Caldron::Base::CResourceLoader();
// m_pCaldronHouseCacheMgr = new CCaldronHouseCacheMgr();
}
CSceneManager::~CSceneManager()
{
//CMapStorage::DeleteAllData();
m_MapStorage.DeleteAllObject();
m_HouseObjectContainer.DeleteAllObject();
m_LightObjectContainer.DeleteAllObject();
m_ObjectContainer.DeleteAllObject();
m_MeshObjectContainer.DeleteAllObject();
m_OctreeContainer.DeleteAllObject();
if(CGrassScene::m_NormalTexture != NULL)
{
delete CGrassScene::m_NormalTexture;
CGrassScene::m_NormalTexture = NULL;
}
/**/ if(m_pWaterTexGenerator != NULL)
{
delete m_pWaterTexGenerator;
m_pWaterTexGenerator = NULL;
}
if(m_pEnvPlaneTex != NULL)
delete m_pEnvPlaneTex;
if(m_GlareManager != NULL)
delete m_GlareManager;
if(m_pBlackGlare != NULL) {
delete m_pBlackGlare;
m_pBlackGlare = NULL;
}
if(m_pRainParticle != NULL) {
delete m_pRainParticle;
m_pRainParticle = NULL;
}
if(m_pChristmasParticle != NULL) {
delete m_pChristmasParticle;
m_pChristmasParticle = NULL;
}
if(m_pChristmasParticleManager) {
delete m_pChristmasParticleManager;
m_pChristmasParticleManager = NULL;
}
if(m_pEsfCasher != NULL) {
delete m_pEsfCasher;
m_pEsfCasher = NULL;
}
if(m_pFullSceneEffect) {
delete m_pFullSceneEffect;
m_pFullSceneEffect = NULL;
}
if(m_pFullsceneEffect2) {
delete m_pFullsceneEffect2;
m_pFullsceneEffect2 = NULL;
}
/* if(m_pResourceLoader)
{
delete m_pResourceLoader;
m_pResourceLoader = NULL;
}
if(m_pCaldronHouseCacheMgr)
{
delete m_pCaldronHouseCacheMgr;
m_pCaldronHouseCacheMgr = NULL;
}*/
if(m_pRenderEnvMap)
{
m_pRenderEnvMap->Release();
}
if(m_pWorldCubemap)
{
m_pWorldCubemap->Release();
}
}
void CSceneManager::Create()
{
m_bEditor=true;
m_DetailCharShadow=4;
m_DetailMapShadow=4;
m_DetailBuildShadow=4;
m_DetailTerrain=4;
m_DetailChrMesh=4;
m_DetailViewRange=4;
m_DetailWaterReflection=4;
m_DetailLensflare=4;
m_DetailTreeDetail=4;
CPerlinNoise::Init();
SHADOWSIZE=256;
char path[256];
GetCurrentDirectory(256,path);
SetSceneManagerPath(path);
CSceneStateMgr::_Init();
m_HeightField.Create(CRenderOption::m_TerrainRange,CRenderOption::m_TerrainRange,&m_MapStorage);
m_HeightField.CheckingNextTerrain();
m_CollisionDetection.m_HeightField=&m_HeightField;
// CParticle::SetMatPosition(&m_ViewCamera->m_matPosition);
m_InstanceObjectManager.Create(m_pd3dDevice);
DETAILGROUND=25;
m_EffectManager.SetDevice(m_pd3dDevice);
//m_Boid.Create(100,0);
CRenderTargetTexture::Create(m_pd3dDevice,SHADOWSIZE,SHADOWSIZE);
LENS_REALPOLYTREE=12000.0f;
//m_CharacterManager.Create();
//m_CharacterManager.SetHeightField(&m_HeightField);
CHRTEXTURESIZE=0;
m_LightCubeTexture=NULL;
if(CRenderOption::m_FullSceneGlare)
{
/*
m_GlareTexture.Create(m_ScreenSize,m_ScreenSize);
m_FullSceneTexture.Create(m_ScreenSize,m_ScreenSize);
m_SpecularGlareTexture.Create(m_ScreenSize,m_ScreenSize);
m_GlareCompositeTexture.Create(256,256);
m_FullSceneAnti=true;
CTexture::SetPath(NATURETEXTUREPATH);
m_ChracterEnvTexture.Load("Env.dds");
char strCubeTextureName[256];
sprintf(strCubeTextureName,"%s\\%s",NATURETEXTUREPATH,"LightCubemap.dds");
D3DXCreateCubeTextureFromFileExA(m_pd3dDevice,
strCubeTextureName,
D3DX_DEFAULT,
0,
0,
D3DFMT_UNKNOWN,
D3DPOOL_MANAGED,
D3DX_FILTER_LINEAR,
D3DX_FILTER_LINEAR,
0,
NULL,
NULL,
&m_LightCubeTexture);
//sprintf(strCubeTextureName,"%s\\%s",NATURETEXTUREPATH,"LightCubemap.dds");
m_DiffuseLightCubeTexture.Create(m_pd3dDevice,"sky",NATURETEXTUREPATH);
m_SpecularLightTexture.Create(m_pd3dDevice,"sp_light",NATURETEXTUREPATH,false);
m_SpGlareTexture.Create(256,256);
m_SmoothGlareTexture.Create(128);
*/
m_LightEffectManager.Create(m_ScreenSize);
}
//m_GlareTexture.Create(256,256);
//CShadowMap::Create(512,512);
//m_CharacterManager.CreateEditor();
//CParticleManager::AddParticle(SMOKE_PARTICLE,vector3(0.0f,0.0f,0.0f),vector3(1.0f,1.0f,0.0f));
///m_GrassScene.Create();
//
//m_pShip.Load("c:\\MP-Project\\Objects\\Object\\flying-trans-1.R3S");
//CTexture::SetPath(OBJECTTEXTUREPATH);
//m_pShip.TextureLoad();
//m_pShip.ConvertNormal();
//m_AniObject.Load("c:\\test.R3A");
//strcpy(CRenderOption::m_strBaseGraphicsDataPath,"Zone2");
//strcpy(CRenderOption::m_strBaseGraphicsDataPath,"");
BaseGraphicsDataLoad(CRenderOption::m_strBaseGraphicsDataPath);
m_WeatherManager.Create();
m_CharacterManager.Create();
m_CharacterManager.SetHeightField(&m_HeightField);
g_CameraScript = new CCameraScript;
m_ShaderManager.Init();
/**/ if(m_pWaterTexGenerator == NULL) {
m_pWaterTexGenerator = new WBWaterNormalTexGenerator;
m_pWaterTexGenerator->Init(GetDevice(),256,256,"Displacement.dds");
}
if(m_pEnvPlaneTex != NULL)
delete m_pEnvPlaneTex;
m_pEnvPlaneTex = new WBEnvPlaneTex;
m_pEnvPlaneTex->Init(GetDevice(),256,256);
//===================
// Glare Test
//===================
m_GlareManager = new CGlareManager;
m_GlareManager->Create();
if(m_pBlackGlare != NULL)
delete m_pBlackGlare;
m_pBlackGlare = new CTexture;
CTexture::SetPath(EFFECTTEXTUREPATH);
m_pBlackGlare->Load("spec_black.dds");
///////////////////ũ<><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
if(m_bSnowFall) {
D3DXMATRIX tmpview;
m_pd3dDevice->GetTransform(D3DTS_VIEW,&tmpview);
D3DXMatrixInverse(&tmpview,NULL,&tmpview);
vector3 tmppos;
tmppos.x = tmpview._41;
tmppos.y = tmpview._42;
tmppos.z = tmpview._43;
/*m_SnowFall.SetWorldValue(0.0f,-2.0f,0.0f,8.0f,-3.0f,8.0f,"snow.dds");
//m_SnowFall.Init(GetDevice(),300,tmppos.x,tmppos.y,tmppos.z,800.0f,800.0f,tmppos.y + 100.0f);
m_SnowFall.Init(GetDevice(),500,tmppos.x,tmppos.y,tmppos.z,800.0f,800.0f,tmppos.y + 2000.0f);
*/
m_SnowFall.SetWorldValue(0.0f,-15.0f,0.0f,1.0f,-0.5f,1.0f,"snow.dds");
//m_SnowFall.Init(GetDevice(),300,tmppos.x,tmppos.y,tmppos.z,800.0f,800.0f,tmppos.y + 100.0f);
m_SnowFall.Init(GetDevice(),200,tmppos.x,tmppos.y,tmppos.z,500.0f,500.0f,tmppos.y + 2000.0f);
}
if(CRenderOption::m_bRain) {
m_pRainParticle = new CRainParticle;
m_pRainParticle->Init(1000,"RainPar.dds");
m_pRainParticle->SetMaxLife(75.0f);
m_pRainParticle->Explode(0.12f, 777 );
m_pRainParticle->SetVisible(1.0f,0.2f);
m_pRainParticle->SetBaseMass(1.2f);
m_pRainParticle->SetFraction(0.0f);
m_pRainParticle->SetGravity( 10.5f, -0.980001f, 0.0f );
m_pRainParticle->SetColor(1.0f,1.0f,1.0f,1.0f,1.0f,1.0f);
m_pRainParticle->SetSize(0.1f,3.5f,0.1f,3.5f);
/*m_pRainParticle->SetColor(0.6f,0.6f,0.6f,0.6f,0.6f,0.6f);
m_pRainParticle->SetSize(0.1f,3.5f,0.1f,3.5f);
m_pChristmasParticle = new CChristmasParticle;
m_pChristmasParticle->Init(900,"CParticle.dds");
m_pChristmasParticle->SetMaxLife(75.0f);
m_pChristmasParticle->SetVisible(1.0f,0.0f);
m_pChristmasParticle->SetBaseMass(1.2f);
m_pChristmasParticle->SetFraction(0.0f);
m_pChristmasParticle->SetGravity( 0.0f, -0.1f, 0.0f );
m_pChristmasParticle->SetColor(1.0f,1.0f,1.0f,0.0f,0.0f,0.0f);
m_pChristmasParticle->SetSize(4.0f,4.0f,4.0f,4.0f);
*/
}
if(m_bChristmas) {
m_pChristmasParticleManager = new CChristmasParticleManager;
}
/* if(m_pEsfCasher) {
delete m_pEsfCasher;
}
m_pEsfCasher = new CEffectCasher;
m_pEsfCasher->BuildHashTable(EFFECTSCRIPTPATH);
*/
if(m_pFullSceneEffect) {
delete m_pFullSceneEffect;
m_pFullSceneEffect = NULL;
}
m_pFullSceneEffect = new CFullSceneEffect;
m_pFullSceneEffect->SetFullSceneEffectEnable(CRenderOption::m_bFullSceneEffect);
m_pFullSceneEffect->Init(GetDevice());
m_pFullSceneEffect->SetFlag(11,true); //FullScene Glare
// m_pFullSceneEffect->SetFlag(9,true);
// Blur Enable
//m_pFullSceneEffect->SetFlag(1,true);
/* FULLSCENE_MOTIONBLUR = 0,
FULLSCENE_BRIGHT,
FULLSCENE_BLACK,
FULLSCENE_CONTRAST,
FULLSCENE_LEVEL,
FULLSCENE_GRAYLEVEL,
FULLSCENE_EDGE,
FULLSCENE_NEGATIVE,
FULLSCENE_SEPIA,
FULLSCENE_SOLAR,
FULLSCENE_NUMS,
*/
///////////////
// Cubemap Generation
//////////////
if(CRenderOption::m_WaterBumpEnvRendering)
{
D3DXCreateRenderToEnvMap( BaseGraphicsLayer::GetDevice(), 256,
BaseGraphicsLayer::m_d3dpp.BackBufferFormat, TRUE, D3DFMT_D16, &m_pRenderEnvMap );
D3DXCreateCubeTexture( BaseGraphicsLayer::GetDevice(), 256, 1,
D3DUSAGE_RENDERTARGET,BaseGraphicsLayer::m_d3dpp.BackBufferFormat, D3DPOOL_DEFAULT, &m_pWorldCubemap );
}
//////////////
}
D3DXMATRIX D3DUtil_RGetCubeMapViewMatrix( DWORD dwFace )
{
D3DXVECTOR3 vEyePt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vLookDir;
D3DXVECTOR3 vUpDir;
switch( dwFace )
{
case D3DCUBEMAP_FACE_POSITIVE_X:
vLookDir = D3DXVECTOR3( 1.0f, 0.0f, 0.0f );
vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
break;
case D3DCUBEMAP_FACE_NEGATIVE_X:
vLookDir = D3DXVECTOR3(-1.0f, 0.0f, 0.0f );
vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
break;
case D3DCUBEMAP_FACE_POSITIVE_Y:
vLookDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
vUpDir = D3DXVECTOR3( 0.0f, 0.0f,-1.0f );
break;
case D3DCUBEMAP_FACE_NEGATIVE_Y:
vLookDir = D3DXVECTOR3( 0.0f,-1.0f, 0.0f );
vUpDir = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
break;
case D3DCUBEMAP_FACE_POSITIVE_Z:
vLookDir = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
break;
case D3DCUBEMAP_FACE_NEGATIVE_Z:
vLookDir = D3DXVECTOR3( 0.0f, 0.0f,-1.0f );
vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
break;
}
// Set the view transform for this cubemap surface
D3DXMATRIX matView;
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookDir, &vUpDir );
return matView;
}
D3DXMATRIX DD3DUtil_GetCubeMapViewMatrix( DWORD dwFace )
{
D3DXVECTOR3 vEyePt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vLookDir;
D3DXVECTOR3 vUpDir;
switch( dwFace )
{
case D3DCUBEMAP_FACE_POSITIVE_X:
vLookDir = D3DXVECTOR3( 1.0f, 0.0f, 0.0f );
vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
break;
case D3DCUBEMAP_FACE_NEGATIVE_X:
vLookDir = D3DXVECTOR3(-1.0f, 0.0f, 0.0f );
vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
break;
case D3DCUBEMAP_FACE_POSITIVE_Y:
vLookDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
vUpDir = D3DXVECTOR3( 0.0f, 0.0f,-1.0f );
break;
case D3DCUBEMAP_FACE_NEGATIVE_Y:
vLookDir = D3DXVECTOR3( 0.0f,-1.0f, 0.0f );
vUpDir = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
break;
case D3DCUBEMAP_FACE_POSITIVE_Z:
vLookDir = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
break;
case D3DCUBEMAP_FACE_NEGATIVE_Z:
vLookDir = D3DXVECTOR3( 0.0f, 0.0f,-1.0f );
vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
break;
}
// Set the view transform for this cubemap surface
D3DXMATRIX matView;
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookDir, &vUpDir );
return matView;
};
const long T3LVERTEXFVF=D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1|D3DFVF_TEXCOORDSIZE3(0);
class T3LVertex
{
public:
vector3 v;
float w;
color Diffuse;
color Specular;
float tu,tv,tw;
};
void CSceneManager::Render()
{
D3DVIEWPORT8 Viewport;
m_pd3dDevice->GetViewport(&Viewport);
/*
m_pd3dDevice->EndScene();
m_DiffuseLightCubeTexture.RenderCubeMap(m_pd3dDevice);
m_pd3dDevice->BeginScene();
m_pd3dDevice->EndScene();
m_SpGlareTexture.Begin(m_pd3dDevice);
m_pd3dDevice->BeginScene();
m_pd3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER|D3DCLEAR_TARGET,0x0,1.0f, 0);
D3DXMATRIX matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/2.0f , 1.0f, 100.0f, 2000.0f );
D3DXMATRIX matOldView,matOldProjection;
m_pd3dDevice->GetTransform(D3DTS_VIEW,&matOldView);
m_pd3dDevice->GetTransform(D3DTS_PROJECTION,&matOldProjection);
D3DXMATRIX matViewDir( matOldView);
matViewDir._41 = 0.0f; matViewDir._42 = 0.0f; matViewDir._43 = 0.0f;
D3DXMATRIX matView;
matView =matViewDir;
//matView = DD3DUtil_GetCubeMapViewMatrix( (D3DCUBEMAP_FACES) 1 );
//D3DXMatrixMultiply( &matView, &matViewDir, &matView );
//D3DXMatrixMultiply( &matView, &matView ,&matViewDir );
m_pd3dDevice->SetTransform(D3DTS_VIEW,&matView);
m_pd3dDevice->SetTransform(D3DTS_PROJECTION,&matProj);
m_SpecularLightTexture.RenderSkymap(m_pd3dDevice);
//m_DiffuseLightCubeTexture.RenderSkymap(m_pd3dDevice);
vector3 vecSunPos;
vector3 vecProjPos;
float w;
vecSunPos=vector3(-1000.0f,-500.0f,-1000.0f);
bool isInScreenSun=BaseGraphicsLayer::TransformVector(vecSunPos,vecProjPos,w);
TLVertex m_SunVertex[4];
float sx=100.0f;
float sy=100.0f;
m_SunVertex[0].v=vecProjPos;
m_SunVertex[1].v=vecProjPos;
m_SunVertex[2].v=vecProjPos;
m_SunVertex[3].v=vecProjPos;
m_SunVertex[0].v.x-=sx;m_SunVertex[0].v.y+=sy;
m_SunVertex[1].v.x-=sx;m_SunVertex[1].v.y-=sy;
m_SunVertex[2].v.x+=sx;m_SunVertex[2].v.y+=sy;
m_SunVertex[3].v.x+=sx;m_SunVertex[3].v.y-=sy;
m_SunVertex[0].w=w;
m_SunVertex[1].w=w;
m_SunVertex[2].w=w;
m_SunVertex[3].w=w;
m_SunVertex[0].Diffuse.c=0xffffffff;
m_SunVertex[1].Diffuse.c=0xffffffff;
m_SunVertex[2].Diffuse.c=0xffffffff;
m_SunVertex[3].Diffuse.c=0xffffffff;
m_SunVertex[0].tu=0.0f;
m_SunVertex[0].tv=1.0f;
m_SunVertex[0].Specular.c=0x0;
m_SunVertex[1].tu=0.0f;
m_SunVertex[1].tv=0.0f;
m_SunVertex[1].Specular.c=0x0;
m_SunVertex[2].tu=1.0f;
m_SunVertex[2].tv=1.0f;
m_SunVertex[2].Specular.c=0x0;
m_SunVertex[3].tu=1.0f;
m_SunVertex[3].tv=0.0f;
m_SunVertex[3].Specular.c=0x0;
CSceneStateMgr::_SetD3DRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
CSceneStateMgr::_SetD3DRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE,TRUE);
//m_pd3dDevice->SetTexture(0,);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
CSceneStateMgr::_SetD3DTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pd3dDevice->SetVertexShader(TLVERTEXFVF);
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE,FALSE);
m_pd3dDevice->SetTexture(0,m_WeatherManager.m_SunScene.m_SunTexture.GetTexture());
m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,m_SunVertex,sizeof(TLVertex));
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
m_pd3dDevice->SetTransform(D3DTS_VIEW,&matOldView);
m_pd3dDevice->SetTransform(D3DTS_PROJECTION,&matOldProjection);
m_pd3dDevice->EndScene();
m_SpGlareTexture.End(m_pd3dDevice);
m_pd3dDevice->BeginScene();
m_pd3dDevice->EndScene();
m_SpecularLightTexture.RenderCubeMap(m_pd3dDevice);
m_pd3dDevice->BeginScene();
if(GF3OPTION)
{
RenderFullSceneTextureBegin();
}
*/
////////////////////
m_pFullSceneEffect->BeginRender(BaseGraphicsLayer::m_ClearColor.c);
/////////////////////
if(g_CameraScript->ISPlay()) {
D3DXMATRIX tmp = g_CameraScript->GetCurrentViewMat();
D3DXVECTOR3 vecCameraPos = g_CameraScript->GetVecPos();
D3DXVECTOR3 vecCameraUp = g_CameraScript->GetVecUp();
D3DXVECTOR3 vecCameraLook = g_CameraScript->GetVecLook();
m_ViewCamera->LookAt(vector3(vecCameraPos.x,vecCameraPos.y,vecCameraPos.z),
vector3(vecCameraLook.x,vecCameraLook.y,vecCameraLook.z),
vector3(vecCameraUp.x,vecCameraUp.y,vecCameraUp.z));
m_pd3dDevice->SetTransform(D3DTS_VIEW,m_ViewCamera->GetMatView());
//m_pd3dDevice->SetTransform( D3DTS_VIEW ,&tmp);
}
if(CRenderOption::m_FullSceneGlare)
{
m_LightEffectManager.PrepareLightingEnvmap(m_pd3dDevice);
}
m_RBspSceneManager.Render();
D3DVIEWPORT8 m_pTempViewPort;
bool bRenderEnv = false;
if(m_RBspSceneManager.m_pCurrentBspScene == NULL)
{
if(m_bMinimapGenerate)
{
m_bMinimapGenerate = false;
m_bSceneNodeCulling = false;
CFullSceneEffect *pScene = NULL;
matrix *matPos= m_ViewCamera->GetMatPosition();
pScene = new CFullSceneEffect;
pScene->SetFullSceneEffectEnable(true);
pScene->Init(m_pd3dDevice,256,256);
m_pFullSceneEffect->EndRender();
pScene->BeginRender(BaseGraphicsLayer::m_ClearColor.c);
vector3 vecViewPos=matPos->GetLoc();
matrix matInit;
matrix matProjection,matView;
D3DXMATRIX matOldProjection,matOldView;
m_pd3dDevice->GetTransform(D3DTS_PROJECTION,(D3DMATRIX*)&matOldProjection);
m_pd3dDevice->GetTransform(D3DTS_VIEW,(D3DMATRIX*)&matOldView);
matInit.MakeIdent();
CSectorScene *pCenterSectorScene=NULL;
for(int i=0;i<LSIZEX*LSIZEY;i++)
{
if( m_HeightField.m_SectorScene[i].m_AccumulateTM._41 <= vecViewPos.x &&
vecViewPos.x <= m_HeightField.m_SectorScene[i].m_AccumulateTM._41+SECTORSIZE &&
m_HeightField.m_SectorScene[i].m_AccumulateTM._43 <= vecViewPos.z &&
vecViewPos.z<= m_HeightField.m_SectorScene[i].m_AccumulateTM._43+SECTORSIZE )
{
pCenterSectorScene=&m_HeightField.m_SectorScene[i];
break;
}
}
float fStartX = pCenterSectorScene->m_AccumulateTM._41;
float fStartZ = pCenterSectorScene->m_AccumulateTM._43;
int SectorPx=(int)(pCenterSectorScene->m_AccumulateTM._41/SECTORSIZE);
int SectorPy=(int)(pCenterSectorScene->m_AccumulateTM._43/SECTORSIZE);
//float fViewHeight=(SECTORSIZE/2.0f)/tanf(3.14159f/6.0f) + 100.0f;
float fViewHeight=60000.0f;
matrix *matpPos = m_ViewCamera->GetMatPosition();
matpPos->_41 = fStartX + SECTORSIZE/2.0f;
matpPos->_42 = fViewHeight;
matpPos->_43 = fStartZ + SECTORSIZE/2.0f;
matrix *matViewCamera = (matrix *)m_ViewCamera->GetMatView();
matViewCamera->_41 = fStartX + SECTORSIZE/2.0f;
matViewCamera->_42 = 0.0f;
matViewCamera->_43 = fStartZ + SECTORSIZE/2.0f;
matView.CameraLookAt(vector3(fStartX + SECTORSIZE/2.0f,fViewHeight,fStartZ + SECTORSIZE/2.0f),vector3(fStartX + SECTORSIZE/2.0f,0.0f,fStartZ + SECTORSIZE/2.0f),vector3(0.0f,0.0f,1.0f));
D3DXMatrixOrthoLH(matProjection,SECTORSIZE,SECTORSIZE,10.0f, 100000.0f);
m_pd3dDevice->SetTransform(D3DTS_PROJECTION,(D3DMATRIX*)&matProjection);
m_pd3dDevice->SetTransform(D3DTS_VIEW,(D3DMATRIX*)&matView);
m_HeightField.RenderMinimap(m_pd3dDevice);
pScene->EndRender();
char strTextureFileName[256];
sprintf(strTextureFileName,"%s\\Minimap\\%d_%d.dds",WIDETEXTUREPATH,SectorPx,SectorPy);
pScene->SaveTexture(strTextureFileName);
m_pd3dDevice->SetTransform(D3DTS_PROJECTION,(D3DMATRIX*)&matOldProjection);
m_pd3dDevice->SetTransform(D3DTS_VIEW,(D3DMATRIX*)&matOldView);
m_pFullSceneEffect->BeginRender(BaseGraphicsLayer::m_ClearColor.c);
delete pScene;
pScene = NULL;
m_bSceneNodeCulling = true;
MessageBox(NULL,"Save Success","minimap",MB_OK);
}
if(!GetInView())
m_WeatherManager.Render(m_pd3dDevice);
m_pd3dDevice->GetViewport(&m_pTempViewPort);
m_HeightField.Render(m_pd3dDevice);
m_pd3dDevice->GetViewport(&m_pTempViewPort);
//m_CharacterManager.Render(m_pd3dDevice);
//////////////////////////////////////////////////////Render Env
D3DXMATRIX matWorld,matView;
D3DXMATRIX matInvView;
CSceneManager::GetDevice()->GetTransform(D3DTS_WORLD,&matWorld);
D3DXMatrixIdentity(&matWorld);
CSceneManager::GetDevice()->GetTransform(D3DTS_VIEW,&matView);
D3DXMatrixInverse(&matInvView,NULL,&matView);
D3DXVECTOR3 vecViewPos = D3DXVECTOR3(matInvView._41,matInvView._42,matInvView._43);
D3DXVECTOR3 vecClipRange[4];
vecClipRange[0].y = vecClipRange[1].y = vecClipRange[2].y = vecClipRange[3].y = 300.0f;
vecClipRange[0].x = 15800.0f;
vecClipRange[0].z = 63000.0f;
vecClipRange[1].x = 281000.0f;
vecClipRange[1].z = 63000.0f;
vecClipRange[2].x = 15800.0f;
vecClipRange[2].z = 292000.0f;
vecClipRange[3].x = 281000.0f;
vecClipRange[3].z = 292000.0f;
if((vecClipRange[0].x <= vecViewPos.x) && (vecClipRange[0].z <= vecViewPos.z))
{
if((vecClipRange[3].x >= vecViewPos.x) && (vecClipRange[3].z >= vecViewPos.z))
{
bRenderEnv = false;
}
}
if(bRenderEnv) {
/* CSceneManager::m_pEnvPlaneTex->InitClipRange(vecClipRange[0],
vecClipRange[1],
vecClipRange[2],
vecClipRange[3]);*/
vecViewPos.y = 1900.0f;
CSceneManager::m_pEnvPlaneTex->RenderBegin(vecViewPos,matWorld,1900.0f);
/*
CSceneManager::m_WeatherManager.Render(CSceneManager::GetDevice());
CSceneManager::m_HeightField.Render(CSceneManager::GetDevice());
CSceneManager::m_CharacterManager.Render(CSceneManager::GetDevice());
CSceneManager::m_pEnvPlaneTex->RenderEnd();*/
}
//////////////////////////////////////////////////////////////////////////
//m_HeightField.RenderWater(m_pd3dDevice);
m_pd3dDevice->GetViewport(&m_pTempViewPort);
if(SHADOWSIZE!=0)
{
if(strcmp(CRenderOption::m_strBaseGraphicsDataPath, "Zone100"))
{
m_CharacterManager.HeightFieldShadowRender(m_pd3dDevice);
m_CharacterManager.HeightFieldCharacterLightRender(m_pd3dDevice);
}
}
m_InstanceObjectManager.Render(m_pd3dDevice);
m_CharacterManager.HeightFieldCharacterLightRender(m_pd3dDevice);
// <20><><EFBFBD><EFBFBD> :: <20><><EFBFBD>߿<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>m_HeightField.RenderShadow(m_pd3dDevice);
m_pd3dDevice->GetViewport(&m_pTempViewPort);
//m_Boid.Render(m_pd3dDevice);
if(!GetInView())
m_HeightField.m_GrassSceneManager.Render(m_pd3dDevice);
/* m_pd3dDevice->GetViewport(&m_pTempViewPort);
m_WeatherManager.SecondRender(m_pd3dDevice);
m_pd3dDevice->GetViewport(&m_pTempViewPort);
*/
}
else
{
//m_HeightField.SetObjectCulling(false);
//m_HeightField.Render(m_pd3dDevice);
//m_WeatherManager.Render(m_pd3dDevice);
m_CharacterManager.Render(m_pd3dDevice);
}
/* {
D3DXMATRIX matOldView;
D3DXVECTOR3 vecViewPos;
m_pd3dDevice->GetTransform(D3DTS_VIEW,&matOldView);
D3DXMatrixInverse(&matOldView,NULL,&matOldView);
vecViewPos.x = matOldView._41;
vecViewPos.y = matOldView._42;
vecViewPos.z = matOldView._43;
vector3 vecToward = m_ViewCamera->GetViewTowardVector();
D3DXVECTOR3 vecLine[2];
vecLine[0].x = vecViewPos.x + 500.0f;
vecLine[0].y = vecViewPos.y ;
vecLine[0].z = vecViewPos.z + 500.0f;
vecLine[1].x = vecViewPos.x + 500.0f + (vecToward.x) * 1000.0f;
vecLine[1].y = vecViewPos.y + vecToward.y * 1000.0f;
vecLine[1].z = vecViewPos.z + 500.0f + vecToward.z * 1000.0f;
m_pd3dDevice->SetVertexShader(D3DFVF_XYZ);
m_pd3dDevice->SetPixelShader(NULL);
if(CheckRayCollision(vecLine[0],vecLine[1]))
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0xffff00ff);
else
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0xff00ffff);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TFACTOR );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
CSceneStateMgr::_SetD3DTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
CSceneStateMgr::_SetD3DTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
m_pd3dDevice->DrawPrimitiveUP(D3DPT_LINELIST,1,vecLine,sizeof(D3DXVECTOR3));
}*/
m_EffectManager.Render();
m_EffectManager.RenderScript();
m_HeightField.RenderMapEffect();
if(!g_CameraScript->ISPlay()) {
g_CameraScript->RenderPos_Up();
g_CameraScript->RenderLook();
g_CameraScript->RenderLine();
g_CameraScript->RenderPosSpline();
g_CameraScript->RenderLookSpline();
}
// ũ<><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
if(m_bSnowFall) {
m_SnowFall.Render();
}
if(CRenderOption::m_bRain) {
m_pRainParticle->UpdateBuffer();
m_pRainParticle->Render();
/** m_pChristmasParticle->UpdateBuffer();
m_pChristmasParticle->Render();
*/
}
if(m_bChristmas) {
m_pChristmasParticleManager->Render();
}
//m_EffectManager.RenderWorldScript();
if(CRenderOption::m_FullSceneGlare)
{
m_LightEffectManager.RenderGlareScene(m_pd3dDevice);
m_pd3dDevice->GetViewport(&m_pTempViewPort);
/*
RenderGlareTexture();
RenderSpecularGlareTexture();
RenderFullSceneGlare();
RenderFullSceneAnti();
RenderFullSceneTextureEnd();
*/
}
/**/ if( bRenderEnv && m_pEnvPlaneTex != NULL)
{
TLVertex pVertex[8];
pVertex[0].v.x=0.0f;
pVertex[0].tu = 0.0f;
pVertex[0].tv = 1.0f;
pVertex[1].v.x=0.0f;
pVertex[1].tu = 0.0f;
pVertex[1].tv = 0.0f;
pVertex[2].v.x=150;
pVertex[2].tu = 1.0f;
pVertex[2].tv = 1.0f;
pVertex[3].v.x=150;
pVertex[3].tu = 1.0f;
pVertex[3].tv = 0.0f;
pVertex[1].v.y=0.0f;
pVertex[3].v.y=0.0f;
pVertex[0].v.y=150;
pVertex[2].v.y=150;
for(int i=0;i<4;i++)
{
pVertex[i].w=0.1f;
pVertex[i].v.z=0.1f;
pVertex[i].Diffuse.c=0xffffffff;
pVertex[i].Specular.c=0x0;
}
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE,FALSE);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
CSceneStateMgr::_SetD3DTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
CSceneStateMgr::_SetD3DTextureStageState( 2, D3DTSS_COLOROP, D3DTOP_DISABLE);
CSceneStateMgr::_SetD3DTextureStageState( 3, D3DTSS_COLOROP, D3DTOP_DISABLE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE,FALSE);
m_pd3dDevice->SetTexture(0,m_pEnvPlaneTex->GetTexture());
m_pd3dDevice->SetTexture(1,NULL);
m_pd3dDevice->SetTexture(2,NULL);
m_pd3dDevice->SetTexture(3,NULL);
m_pd3dDevice->SetVertexShader(TLVERTEXFVF);
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE,FALSE);
m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE,TRUE);
}
if(m_FullSceneFade.c!=0x0)
{
TLVertex pVertex[8];
pVertex[0].v.x=0.0f;
pVertex[1].v.x=0.0f;
pVertex[2].v.x=BaseGraphicsLayer::m_lScreenSx;
pVertex[3].v.x=BaseGraphicsLayer::m_lScreenSx;
pVertex[1].v.y=0.0f;
pVertex[3].v.y=0.0f;
pVertex[0].v.y=BaseGraphicsLayer::m_lScreenSy;
pVertex[2].v.y=BaseGraphicsLayer::m_lScreenSy;
for(int i=0;i<4;i++)
{
pVertex[i].w=0.1f;
pVertex[i].v.z=0.1f;
pVertex[i].Diffuse.c=m_FullSceneFade.c;
pVertex[i].Specular.c=0x0;
}
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
CSceneStateMgr::_SetD3DTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_SRCBLEND,D3DBLEND_ONE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_DESTBLEND,D3DBLEND_ONE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE,TRUE);
m_pd3dDevice->SetTexture(0,NULL);
m_pd3dDevice->SetTexture(1,NULL);
m_pd3dDevice->SetVertexShader(TLVERTEXFVF);
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE,FALSE);
m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
}
m_pFullSceneEffect->EndRender();
m_pFullSceneEffect->Render(0,Viewport.Width,Viewport.Height,false);
//=================================================
// Glare Render
static bool bGlare = false;
static D3DCOLOR clr;
static DWORD cA=150;
static DWORD cR=150;
static DWORD cG=150;
static DWORD cB=150;
static D3DXVECTOR4 w = m_GlareManager->GetBlendWeight( CGlareManager::GLARE_CHARACTER );
if( KeyPressed('R') ) bGlare = false;
if( KeyPressed('T') ) bGlare = true;
if( KeyPressed(('Z')) ) w.x += 0.02f;
if( KeyPressed(('X')) ) w.x -= 0.02f;
if( KeyPressed(('C')) ) w.y += 0.02f;
if( KeyPressed(('V')) ) w.y -= 0.02f;
if( KeyPressed(('B')) ) w.z += 0.02f;
if( KeyPressed(('N')) ) w.z -= 0.02f;
if( KeyPressed(('Y')) ) w.w += 0.02f;
if( KeyPressed(('U')) ) w.w -= 0.02f;
if( w.x > 1.0f ) w.x = 1.0f;
if( w.x < 0.0f ) w.x = 0.0f;
if( w.y > 1.0f ) w.y = 1.0f;
if( w.y < 0.0f ) w.y = 0.0f;
if( w.z > 1.0f ) w.z = 1.0f;
if( w.z < 0.0f ) w.z = 0.0f;
if( w.w > 1.0f ) w.w = 1.0f;
if( w.w < 0.0f ) w.w = 0.0f;
if( KeyPressed(('9')) ) { cA += 5; cR += 5; cG += 5; cB += 5; };
if( KeyPressed(('0')) ) { cA -= 5; cR -= 5; cG -= 5; cB -= 5; };
clr = D3DCOLOR_ARGB(cA,cR,cG,cB);
if( bGlare )
{
m_GlareManager->SetBlendWeight( CGlareManager::GLARE_FULLSCENE,w );
//m_GlareManager->SetBlendWeight( CGlareManager::GLARE_FULLSCENE,D3DXVECTOR4(1.0f,1.0f,1.0f,1.0f) );
//clr = D3DCOLOR_ARGB(m_WeatherManager.m_InterGlareSkyLower.r,cR,cG,cB);
clr = D3DCOLOR_ARGB(m_WeatherManager.m_InterGlareSkyLower.r,
m_WeatherManager.m_InterGlareSkyUpper.r,
m_WeatherManager.m_InterGlareSkyUpper.g,
m_WeatherManager.m_InterGlareSkyUpper.b);
CSceneManager::m_GlareManager->SetColor( CGlareManager::GLARE_FULLSCENE, clr);
m_GlareManager->SetBlendWeight( CGlareManager::GLARE_CHARACTER,w);//D3DXVECTOR4(0.0f,0.0f,1.0f,0.0f) );
//m_GlareManager->SetBlendWeight( CGlareManager::GLARE_CHARACTER,D3DXVECTOR4(0.0f,0.0f,1.0f,0.0f) );
// m_GlareManager->RenderCharacterGlare();
m_GlareManager->RenderFullSceneGlare();
}
//==================================================
//m_GlareTexture.GenerateMipmap(m_pd3dDevice);
CSceneNode CheckNode;
//m_pd3dDevice->EndScene();
/* for(int j=0;j<m_Effect_Map.Effect_Num;j++) {
CheckNode.m_fRad=100.0f;
CheckNode.m_AccumulateTM.Translation(m_Effect_Map.m_vecEffectPos[j]);
if(CheckNode.isCulling()) {
*/
// }
// }
//matrix *matViewPosition=GetCamera()->GetMatPosition();
//m_BspScene.Render(m_pd3dDevice,matViewPosition->GetLoc());
//m_ParticleManager.Render(m_pd3dDevice);
/*
m_CharacterManager.Render(m_pd3dDevice);
*/
//m_GrassScene.Render(m_pd3dDevice);
//m_CharacterManager.CameraTest(m_pd3dDevice);
/*
if(SHADOWSIZE!=0)
{
m_CharacterManager.HeightFieldShadowRender(m_pd3dDevice);
m_CharacterManager.InHouseShadowRender(m_pd3dDevice);
}
*/
//m_AniObject.Render(m_pd3dDevice);
/*
matrix mat;
mat.MakeIdent();
m_pd3dDevice->SetTransform(D3DTS_WORLD,mat);
LVertex RayVertex[2];
RayVertex[0].v=m_vecPickRayStart;
RayVertex[1].v=m_vecPickRayStart+m_vecPickRayDir*10000.0f;
RayVertex[0].diff.c=0xffffffff;
RayVertex[1].spec.c=0x0;
m_pd3dDevice->DrawPrimitiveUP(D3DPT_LINESTRIP,1,RayVertex,sizeof(LVertex));
m_pd3dDevice->SetTexture(0,NULL);
m_pd3dDevice->SetTexture(1,NULL);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG2);
*/
//m_ViewCamera->Render(m_pd3dDevice);
/*
static matrix matPos,matRot,mat;
static vector3 vecPos(1467525.0f,7190.0f,697322.0f);
vecPos+=vector3(-10.0f,0.0f,7.0f);
matPos.Translation(vecPos);
matRot.YRotation(3.14f/6.0f);
mat=matRot*matPos;
m_pd3dDevice->SetTransform(D3DTS_WORLD,mat);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_TEXTURE);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
CSceneStateMgr::_SetD3DRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
CSceneStateMgr::_SetD3DRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE,TRUE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHATESTENABLE,TRUE);
m_pShip.Render(m_pd3dDevice);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE,FALSE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHATESTENABLE,FALSE);
*/
/*
matPos.Translation(
mat=matRot*matPos;
m_pd3dDevice->SetTransform(
m_pShip.Render(m_pd3dDevice);
/*
vector3 vecCharacterPos;
m_pCharacter->GetPosition(vecCharacterPos.x,vecCharacterPos.y,vecCharacterPos.z);
List<vector3> CharPoly;
m_HeightField.GetShadowPoly(vecCharacterPos,CharPoly);
TTVertex *pCharVertex=new TTVertex[CharPoly.num];
WORD *pCharIndices=new WORD[CharPoly.num];
for(int cIndices=0;cIndices<CharPoly.num;cIndices++)
{
pCharVertex[cIndices].v=CharPoly[cIndices];
pCharVertex[cIndices].diff.c=0xffff0000;
pCharIndices[cIndices]=cIndices;
}
delete [] pCharVertex;
delete [] pCharIndices;
// make the character's shadow //
//
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
//m_pd3dDevice->SetTexture(0,m_HeightField.m_SectorScene->m_ObjectShadowTexture.GetTexture());
//m_pd3dDevice->SetTexture(0,m_HeightField.m_SectorScene->m_SectorShadowTexture.GetTexture());
m_pd3dDevice->SetTexture(0,m_pShadowTexture.GetTexture());
m_pd3dDevice->SetTexture(1,NULL);
/*
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
*/
//m_ViewCamera->Render(m_pd3dDevice);
/////////////////////////////////
//////////////////////////////////
//m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
//m_pd3dDevice->SetTexture(0,CSceneManager::m_SpGlareTexture.GetTexture());
//m_pd3dDevice->SetTexture(0,m_SmoothGlareTexture.GetTexture());
/* m_pFullsceneEffect2->BeginRender(0x00000000);
m_CharacterManager.Render(m_pd3dDevice);
m_pFullsceneEffect2->EndRender();*/
//m_pFullSceneEffect->RenderMulti(m_pFullsceneEffect2);
m_pd3dDevice->GetViewport(&m_pTempViewPort);
m_WeatherManager.SecondRender(m_pd3dDevice);
m_pd3dDevice->GetViewport(&m_pTempViewPort);
}
/*
void CSceneManager::MouseMove(int dx, int dy)
{
switch(m_ViewerMode)
{
case 0:
if(CSceneManager::m_isCollisionDetection)
{
CollisionType CT;
matrix* matOldMat=m_ViewCamera->GetMatPosition();
vector3 vecOldPos=matOldMat->GetLoc();
m_ViewCamera->InterfaceFreelook(dx,dy);
vector3 vecNewPos=matOldMat->GetLoc();
vector3 vecVelocity=vecNewPos-vecOldPos;
vecVelocity.y-=10.0f;
vecNewPos=m_CollisionDetection.GetPosition(vecOldPos,vecVelocity,CT,false);
matOldMat->_41=vecNewPos.x;
matOldMat->_42=vecNewPos.y;
matOldMat->_43=vecNewPos.z;
matrix matView;
matView.Inverse(*matOldMat);
m_ViewCamera->m_matView=matView;
m_ViewCamera->MoveFrustum();
}
m_ViewCamera->InterfaceFreelook(dx,dy);
break;
case 1:
m_ViewCamera->InterfaceCharlook2(-dx,-dy);
break;
case 2:
m_ViewCamera->InterfaceFreeCamera(-dx,-dy);
//m_ViewCamera->InterfaceFreelook(dx,dy);
break;
}
/*
if (m_ViewerMode!=0)
{
}
else
{
if(
if(CSceneManager::m_isCollisionDetection==false)
m_ViewCamera->InterfaceFreelook(dx,dy);
else
{
vector3 vecOldPos=(*m_ViewCamera->GetPosition());
m_ViewCamera->InterfaceFreelook(dx,dy);
}
}
*/
//m_ViewCamera->InterfaceCharlook(dx,dy,100.0f);
/*
D3DXMATRIX *matPosition=(D3DXMATRIX*)m_ViewCamera->GetMatPosition();
float fDeltaY=dx/300.0f;
float fDeltaX=dy/300.0f;
D3DXVECTOR3 vecT(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 vecR(0.0f, 0.0f, 0.0f);
D3DXMATRIX matT, matR;
D3DXQUATERNION qR;
if(KeyPressed(VK_SHIFT))
{
if(KeyPressed('A') || KeyPressed(VK_NUMPAD1) || KeyPressed(VK_LEFT)) vecT.x -= 341.0f; // Slide Left
if(KeyPressed('D') || KeyPressed(VK_NUMPAD3) || KeyPressed(VK_RIGHT)) vecT.x += 341.0f; // Slide Right
if(KeyPressed(VK_DOWN)) vecT.y += 341.0f; // Slide Down
if(KeyPressed(VK_UP)) vecT.y -= 341.0f; // Slide Up
if(KeyPressed('W'))
vecT.z += 341.0f; // Move Forward
if(KeyPressed('S'))
vecT.z -= 341.0f; // Move Backward
}
else
{
if(KeyPressed('A') || KeyPressed(VK_NUMPAD1) || KeyPressed(VK_LEFT)) vecT.x -= 5.0f; // Slide Left
if(KeyPressed('D') || KeyPressed(VK_NUMPAD3) || KeyPressed(VK_RIGHT)) vecT.x += 5.0f; // Slide Right
if(KeyPressed(VK_DOWN)) vecT.y += 5.0f; // Slide Down
if(KeyPressed(VK_UP)) vecT.y -= 5.0f; // Slide Up
if(KeyPressed('W'))
vecT.z += 5.0f; // Move Forward
if(KeyPressed('S'))
vecT.z -= 5.0f; // Move Backward
}
if(KeyPressed('P'))
{
CSceneStateMgr::_SetD3DRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);
}
if(KeyPressed('O'))
{
CSceneStateMgr::_SetD3DRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);
}
vector3 vecOldPos;
vecOldPos.x=matPosition->_41;
vecOldPos.y=matPosition->_42;
vecOldPos.z=matPosition->_43;
D3DXMatrixTranslation(&matT, vecT.x, vecT.y, vecT.z);
D3DXMatrixMultiply(matPosition, &matT, matPosition);
if(m_ViewerMode!=0)
{
vector3 vecPos;
vecPos.x=matPosition->_41;
vecPos.y=matPosition->_42;
vecPos.z=matPosition->_43;
vector3 vecDir=vecPos-vecOldPos;
vecDir.y-=10.0f;
vecPos=m_CollisionDetection.GetPosition(vecOldPos,vecDir);
matPosition->_41=vecPos.x;
matPosition->_42=vecPos.y;
matPosition->_43=vecPos.z;
}
float fRotationX=m_ViewCamera->GetRotationX();
float fRotationY=m_ViewCamera->GetRotationY();
D3DXQuaternionRotationYawPitchRoll(&qR, 0.0f,-fRotationX ,0.0f);
D3DXMatrixRotationQuaternion(&matR, &qR);
D3DXMatrixMultiply(matPosition, &matR, matPosition);
fRotationX-=fDeltaX;
fRotationY-=fDeltaY;
D3DXQuaternionRotationYawPitchRoll(&qR,-fDeltaY,fRotationX, 0.0f);
D3DXMatrixRotationQuaternion(&matR, &qR);
D3DXMatrixMultiply(matPosition, &matR, matPosition);
m_ViewCamera->SetRotaitionX(fRotationX);
m_ViewCamera->SetRotaitionY(fRotationY);
m_ViewCamera->SetVecPosition(vector3(m_ViewCamera->GetMatPosition()->_41,m_ViewCamera->GetMatPosition()->_42,m_ViewCamera->GetMatPosition()->_43));
matrix *matPos=m_ViewCamera->GetMatPosition();
matrix matInv;
matInv.Inverse(*matPos);
m_ViewCamera->SetMatView(matInv);
m_ViewCamera->MoveFrustum();
*/
//}
void CSceneManager::UpdateScene(float fUpdateFrame)
{
/* if(m_pResourceLoader)
m_pResourceLoader->Process();
*/
//m_WeatherManager.m_CloudScene.Update(m_pd3dDevice,0.0f);
matrix *matViewPosition=GetCamera()->GetMatPosition();
vector3 vecViewPos=matViewPosition->GetLoc();
CSectorSoundMap & sndMap = CSectorSoundMap::GetInstance();
vector3 vecCamera = m_ViewCamera->GetViewTowardVector();
vector3 UpCamera = m_ViewCamera->GetViewUpVector();
vecCamera.Normalize();
UpCamera.Normalize();
CSectorSoundMap::GetInstance().UpdateListener( vecCamera.x, vecCamera.y, vecCamera.z
, UpCamera.x, UpCamera.y, UpCamera.z
, vecViewPos.x, vecViewPos.y, vecViewPos.z );
CSoundManager::GetInstance().Update();
if(m_isTessellate==1)
{
m_HeightField.CheckingNextTerrain();
bool bTerrainTessellate=false;
bTerrainTessellate=m_HeightField.CheckingTessellate();
if(bTerrainTessellate)
{
AllObjectCalcLens();
m_HeightField.RebuildShadowPoly();
//m_CharacterManager.HeightFiledOnChrFixPos();
}
}
/*
static float WeatherTime=0.0f;
WeatherTime+=0.001f;
if(WeatherTime>=24.0f)
{
WeatherTime=0.0f;
}
m_ParticleManager.Update(fUpdateFrame+1.0f);
*/
if(m_pBspScene==NULL && m_PickHouseScene==NULL)
{
/*
static List<vector3> m_vecBspConvertList;
static List<CHouseObjectScene*> m_pBspConvertList;
static List<vector3> m_vecFieldConvertList;
static CHouseObjectScene *m_pBspScene;
*/
vector3 vecLens;
for(int i=0;i<m_vecBspConvertList.num;i++)
{
vecLens=m_vecBspConvertList[i]-vecViewPos;
if(vecLens.GetLens() <= 500.0f)
{
m_pBspScene=m_pBspConvertList[i];
int cAccBsp=0;
for(int cBspStartPos=0;cBspStartPos<i+1;cBspStartPos++)
{
if(m_pBspConvertList[cBspStartPos]==m_pBspScene)
cAccBsp++;
}
//m_pBspConvertList[i]
matrix matToStartPos;
matToStartPos=m_pBspScene->m_HouseObject->m_pInHouseMap->m_matObjectList[(cAccBsp-1)*4+1]*m_pBspScene->m_AccumulateTM;
matViewPosition->_41=matToStartPos._41;
matViewPosition->_42=matToStartPos._42;
matViewPosition->_43=matToStartPos._43;
m_vecFieldConvertList.num=0;
for(int cField=0;cField<m_pBspScene->m_HouseObject->m_pInHouseMap->m_matObjectList.num;cField+=4)
{
matToStartPos=m_pBspScene->m_HouseObject->m_pInHouseMap->m_matObjectList[cField+2]*m_pBspScene->m_AccumulateTM;
m_vecFieldConvertList.Add(matToStartPos.GetLoc());
}
break;
}
}
}
else if(m_pBspScene && m_PickHouseScene==NULL )
{
vector3 vecLens;
for(int i=0;i<m_vecFieldConvertList.num;i++)
{
vecLens=m_vecFieldConvertList[i]-vecViewPos;
if(vecLens.GetLens() <= 500.0f)
{
matrix matExitPos=m_pBspScene->m_HouseObject->m_pInHouseMap->m_matObjectList[i*4+3]*m_pBspScene->m_AccumulateTM;
m_pBspScene=NULL;
matViewPosition->_41=matExitPos._41;
matViewPosition->_42=matExitPos._42;
matViewPosition->_43=matExitPos._43;
break;
}
}
}
CSectorScene::m_fCloudMove+=fUpdateFrame*0.0001f;
CWaterScene::IncWaterTexture(((int)fUpdateFrame)/2.5f);
m_WeatherManager.Update((float)((int)fUpdateFrame));
m_HeightField.Update((float)((int)fUpdateFrame));
m_RBspSceneManager.UpdateBsp();
//m_Boid.Update(fUpdateFrame);
if(CRenderOption::m_bRain) {
D3DXMATRIX matView,matInvView;
GetDevice()->GetTransform(D3DTS_VIEW,&matView);
D3DXMatrixInverse(&matInvView,NULL,&matView);
D3DXVECTOR3 vecViewPos = D3DXVECTOR3(matInvView._41,matInvView._42,matInvView._43);
m_pRainParticle->CreateRain(vecViewPos.x - 200.0f,vecViewPos.y - 30.0f,vecViewPos.z - 200.0f,
vecViewPos.x + 200.0f,vecViewPos.y + 200.0f,vecViewPos.z + 200.0f,
16.5, 200);
/*
if((m_pChristmasParticle->m_bStart) && (m_pChristmasParticle->m_fHeight < 500.0f)) {
m_pChristmasParticle->m_fHeight+= 20.0f;
}
if( KeyPressed('Q') ) {
vector3 vecDir = m_ViewCamera->GetViewTowardVector();
vecDir.Normalize();
vector3 vecUp = m_ViewCamera->GetViewUpVector();
vecUp.Normalize();
vector3 vecCross = vecDir ^ vecUp;
vecCross.Normalize();
vecViewPos.x += vecDir.x * 1500.0f;
vecViewPos.y = m_CharacterManager.m_CharacterList[0].m_vecRealPosition.y + 100;//m_pChristmasParticle->m_fHeight;
vecViewPos.z += vecDir.z * 1500.0f;
m_pChristmasParticle->m_vecCenter = D3DXVECTOR3(vecViewPos.x,vecViewPos.y,vecViewPos.z);
m_pChristmasParticle->m_vecRight = D3DXVECTOR3(vecCross.x,vecCross.y,vecCross.z);
m_pChristmasParticle->m_vecUp = D3DXVECTOR3(vecUp.x,vecUp.y,vecUp.z);
m_pChristmasParticle->SetStart(true);
//m_pChristmasParticle->CreateChristmasParticle(vecViewPos.x,vecViewPos.y,vecViewPos.z,0.0f,350,vecCross.x,vecCross.y,vecCross.z,vecUp.x,vecUp.y,vecUp.z);
}
if(m_pChristmasParticle->m_fHeight >= 500.0f) {
m_pChristmasParticle->SetExtUse(true);
m_pChristmasParticle->SetStart(false);
m_pChristmasParticle->SetMaxLife(85.0f);
///Sound
CEffScript *pCristmas = new CEffScript;
int iRand = rand() % 3;
switch(iRand) {
case 0:
m_pChristmasParticle->SetColor((rand() %100 / 100.0f),0.0f,0.0f,(rand() %100 / 100.0f),0.0f,0.0f);
pCristmas->GetScriptData("ChristParticleR.esf");
break;
case 1:
m_pChristmasParticle->SetColor(0.0f,(rand() %100 / 100.0f),0.0f,0.0f,(rand() %100 / 100.0f),0.0f);
pCristmas->GetScriptData("ChristParticleG.esf");
break;
case 2:
m_pChristmasParticle->SetColor(0.0f,0.0f,(rand() %100 / 100.0f),0.0f,0.0f,(rand() %100 / 100.0f));
pCristmas->GetScriptData("ChristParticleB.esf");
break;
}
CSceneManager::AddInterfaceScript(pCristmas);
vector3 *vecCameraPos = CSceneManager::m_ViewCamera->GetPosition();
pCristmas->SetStartPos(vecCameraPos->x,vecCameraPos->y,vecCameraPos->z);
pCristmas->SetEndPos(vecCameraPos->x,vecCameraPos->y,vecCameraPos->z);
pCristmas->SetChr(NULL,NULL);
pCristmas->SetChrFwd(0.0f,0.0f,1.0f);
m_pChristmasParticle->CreateChristmasParticle(m_pChristmasParticle->m_vecCenter.x,
(m_pChristmasParticle->m_vecCenter.y + (m_pChristmasParticle->m_fHeight * 2.0f)),m_pChristmasParticle->m_vecCenter.z,5.0f,850,
m_pChristmasParticle->m_vecRight.x,m_pChristmasParticle->m_vecRight.y,m_pChristmasParticle->m_vecRight.z,
m_pChristmasParticle->m_vecUp.x,m_pChristmasParticle->m_vecUp.y,m_pChristmasParticle->m_vecUp.z,true);
m_pChristmasParticle->m_fHeight = 0.0f;
}
else if(m_pChristmasParticle->m_bStart) {
m_pChristmasParticle->SetMaxLife(30.0f);
m_pChristmasParticle->SetColor(1.0f,1.0f,1.0f,1.0f,1.0f,1.0f);
m_pChristmasParticle->CreateChristmasParticle(m_pChristmasParticle->m_vecCenter.x,
(m_pChristmasParticle->m_vecCenter.y + m_pChristmasParticle->m_fHeight),m_pChristmasParticle->m_vecCenter.z,5.0f,10,
m_pChristmasParticle->m_vecRight.x,m_pChristmasParticle->m_vecRight.y,m_pChristmasParticle->m_vecRight.z,
m_pChristmasParticle->m_vecUp.x,m_pChristmasParticle->m_vecUp.y,m_pChristmasParticle->m_vecUp.z);
}*/
}
if(m_bChristmas) {
/* static bool bPushed = false;
if( KeyPressed('Q') && !bPushed) {
if(CSceneManager::m_CharacterManager.m_CharacterList.num > 0) {
CChristmasParticle *pChristmasParticle = NULL;
pChristmasParticle = new CChristmasParticle;
pChristmasParticle->Init(900,"testparticle1.dds");
vector3 vecDir = CSceneManager::m_ViewCamera->GetViewTowardVector();
vecDir.Normalize();
D3DXVECTOR3 vecPos;
vecPos.x = CSceneManager::m_CharacterManager.m_CharacterList[0].m_vecRealPosition.x + vecDir.x * 1500.0f;
vecPos.y = CSceneManager::m_CharacterManager.m_CharacterList[0].m_vecRealPosition.y + 100;//m_pChristmasParticle->m_fHeight;
vecPos.z = CSceneManager::m_CharacterManager.m_CharacterList[0].m_vecRealPosition.z + vecDir.z * 1500.0f;
m_pChristmasParticleManager->AddParticle(pChristmasParticle,vecPos.x,vecPos.y,vecPos.z);
bPushed = true;
}
}
else {
bPushed = false;
}*/
m_pChristmasParticleManager->ProcessParticle();
}
int snum = m_EffectManager.GetScriptNum();
for(int scnt = 0;scnt<snum;scnt++)
m_EffectManager.ProcessScript(scnt);
for(int cUpdate=1;cUpdate<fUpdateFrame-1;cUpdate++)
{
m_fWeatherTime+=m_fWeatherTimeAdder;
if(m_fWeatherTime>=24.0f)
m_fWeatherTime=0.0f;
}
m_WeatherManager.SetWeather(m_fWeatherTime,m_pd3dDevice);
if(fUpdateFrame>=10.0f)
return;
if(m_ViewerMode==0)
{
vector3 vecPos=m_ViewCamera->m_matPosition.GetLoc();
//CZ3DSound::SetListenerPosition(vecPos);
//CZ3DSound::SetListenerDirection(CSceneManager::m_ViewCamera->GetRotationY()+3.14159f);
//CZ3DSound::Process();
for(int cUpdate=1;cUpdate<fUpdateFrame-1;cUpdate++)
{
m_CharacterManager.ActionProcess();
//m_fWeatherTime+=m_fWeatherTimeAdder;
//if(m_fWeatherTime>=24.0f)
// m_fWeatherTime=0.0f;
}
if(fUpdateFrame>=1)
m_CharacterManager.UpdateFrame(-1);
}
if(m_ViewerMode==1)
{
for(int cUpdate=1;cUpdate<fUpdateFrame-1;cUpdate++)
{
m_CharacterManager.ActionProcess();
/*
m_fWeatherTime+=m_fWeatherTimeAdder;
if(m_fWeatherTime>=24.0f)
m_fWeatherTime=0.0f;
*/
}
if(fUpdateFrame>=1)
m_CharacterManager.UpdateFrame(-1);
}
if(m_ViewerMode==2)
{
for(int cUpdate=1;cUpdate<fUpdateFrame;cUpdate++)
{
m_CharacterManager.ActionProcess();
/*
m_fWeatherTime+=m_fWeatherTimeAdder;
if(m_fWeatherTime>=24.0f)
m_fWeatherTime=0.0f;
*/
}
}
/*
vector3 vecPos=CSceneManager::m_ViewCamera->m_matPosition.GetLoc();
CSectorScene *pSector=PickTerrain(vecPos.x,vecPos.y,vecPos.z);
if(pSector)
{
if(pSector->m_MapWater)
{
if(pSector->m_MapWater->m_fWaterHeight>vecPos.y)
{
m_WeatherManager.m_InterFogFar=1000.0f;
m_WeatherManager.m_InterSkyFogFar=1000.0f;
m_WeatherManager.m_InterFogNear=100.0f;
}
}
}
*/
//Landscape effect update
CSectorScene *tmp_sector = PickTerrain();
for(cUpdate=0;cUpdate<(int)fUpdateFrame;cUpdate++)
{
//Landscape effect
if(tmp_sector != NULL) {
//tmp_sector->UpdateLandscapeEffect();
tmp_sector->UpdateEffect();
}
//effect
m_EffectManager.UpdateFrame();
////////////ũ<><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>//
if(m_bSnowFall) {
D3DXMATRIX tmpview;
m_pd3dDevice->GetTransform(D3DTS_VIEW,&tmpview);
D3DXMatrixInverse(&tmpview,NULL,&tmpview);
vector3 tmppos;
tmppos.x = tmpview._41;
tmppos.y = tmpview._42;
tmppos.z = tmpview._43;
vector3 tmptoward = m_ViewCamera->GetViewTowardVector();
vector3 tmpup = m_ViewCamera->GetViewUpVector();
tmptoward.Normalize();
tmpup.Normalize();
m_SnowFall.Update(tmppos.x + tmptoward.x * 700.0f,tmppos.y,tmppos.z + tmptoward.z * 700.0f,1000.0f,1000.0f,tmppos.y + 700.0f);
//m_SnowFall.Update(tmppos.x,tmppos.y,tmppos.z,800.0f,800.0f,tmppos.y + 100.0f);
}
///////////////////////////////////////////
//snum = m_EffectManager.GetWScriptNum();
/* for(int scnt = 0;scnt<snum;scnt++)
m_EffectManager.ProcessWScript(scnt);
*/
}
/*
static DWORD ftime = timeGetTime();
DWORD fFtime = timeGetTime();
if((fFtime - ftime) > 20) {
m_pWaterTexGenerator->Update();
ftime = fFtime;
}
*/
static bool bq = false;
if( KeyPressed('Q') )
{
if(!bq)
{
bq = true;
CRenderOption::m_CharacterPerPixelLighting = !CRenderOption::m_CharacterPerPixelLighting;
}
}
else
{
bq = false;
}
}
void CSceneManager::PickNextObject(int iOrder,int PickMode)
{
if(PickMode==-1)
return;
if(m_bPickFix)
{
return;
}
int cObject;
if(PickMode==1)
{
if(m_pPickSector && m_PickHouseScene)
{
for(cObject=0;cObject<m_pPickSector->m_HouseObjectNode.num;cObject++)
{
if(m_PickHouseScene==m_pPickSector->m_HouseObjectNode[cObject])
{
if(iOrder == 0)
{
if(cObject != m_pPickSector->m_HouseObjectNode.num - 1)
m_PickHouseScene=m_pPickSector->m_HouseObjectNode[cObject+1];
else
m_PickHouseScene=m_pPickSector->m_HouseObjectNode[0];
}
else if(iOrder == 1)
{
if(cObject != 0)
m_PickHouseScene=m_pPickSector->m_HouseObjectNode[cObject-1];
else
m_PickHouseScene=m_pPickSector->m_HouseObjectNode[m_pPickSector->m_HouseObjectNode.num - 1];
}
break;
}
}
m_PickObjectScene=NULL;
}
}
else if(PickMode == 2)
{
if(m_pPickSector && m_PickObjectScene)
{
for(cObject=0;cObject<m_pPickSector->m_ObjectSceneNode.num;cObject++)
{
if(m_PickObjectScene==m_pPickSector->m_ObjectSceneNode[cObject])
{
if(iOrder == 0)
{
if(cObject != m_pPickSector->m_ObjectSceneNode.num - 1)
m_PickObjectScene=m_pPickSector->m_ObjectSceneNode[cObject+1];
else
m_PickObjectScene=m_pPickSector->m_ObjectSceneNode[0];
}
else if(iOrder == 1)
{
if(cObject != 0)
m_PickObjectScene=m_pPickSector->m_ObjectSceneNode[cObject-1];
else
m_PickObjectScene=m_pPickSector->m_ObjectSceneNode[m_pPickSector->m_ObjectSceneNode.num - 1];
}
break;
}
}
m_PickHouseScene=NULL;
}
}
}
void CSceneManager::PickObject(float fPx, float fPy, float fPz,int PickMode)
{
if(PickMode==-1)
return;
if(m_bPickFix)
{
return;
}
float fNearestInterval=LENS_NEAR_OBJECT;
int ix,iy;
int cObject;
// picking pos
vector3 vecPick(fPx,fPy,fPz);
vector3 vecLens;
vector3 vecObjectPos;
if(m_pBspScene)
{
matrix matLightPos;
matrix matObjectTM;
vector3 vecObjectPos;
for(int cLight=0;cLight<m_pBspScene->m_HouseObject->m_pBspObject->m_EditLightList.num;cLight++)
{
float fRad=20.0f;
matLightPos.Translation(m_pBspScene->m_HouseObject->m_pBspObject->m_EditLightList[cLight].m_vecLightPos);
matObjectTM=matLightPos*m_pBspScene->m_AccumulateTM;
vecObjectPos=matObjectTM.GetLoc();
vector3 vecInter=m_vecPickRayStart-vecObjectPos;
float fC=(vecInter*vecInter)-fRad;
float fB=m_vecPickRayDir*(m_vecPickRayStart-vecObjectPos);
vecObjectPos=m_vecPickRayStart-vecObjectPos;
if(fB*fB-fC>=0.0f)
{
if(vecObjectPos.GetLens() <= fNearestInterval)
{
if(PickMode==2)
{
m_pBspScene->m_HouseObject->m_pBspObject->m_SelectLight=cLight;
fNearestInterval=vecObjectPos.GetLens();
/*
m_PickLightScene=m_PickHouseScene->m_HouseObject->m_LightList[cLight];
m_PickObjectScene=NULL;
fNearestInterval=vecObjectPos.GetLens();
*/
}
}
}
}
return;
}
/* if(PickMode == 7) {
fNearestInterval=LENS_NEAR_OBJECT;
for(int i=0;i<m_EffectNum;i++) {
CX3DEffect *PickEffect = m_EffectManager.m_lstEffect[i];
vector3 *vecTargetObjectPos = PickEffect->GetCenter();
vecLens= (*vecTargetObjectPos) - vecPick;
if( vecLens.GetLens() <= fNearestInterval)
{
m_PickEffect = m_EffectManager.m_lstEffect[i];
m_PickHouseScene=NULL;
fNearestInterval=vecLens.GetLens();
m_bPickEffect = TRUE;
}
}
if(fNearestInterval!=LENS_NEAR_OBJECT)
return;
}//PickMode == 7*/
if(m_PickHouseScene)
{
fNearestInterval=LENS_NEAR_OBJECT;
matrix matInvTM,matTM;
matTM.Translation(vector3(fPx,fPy,fPz));
matInvTM.Inverse(m_PickHouseScene->m_AccumulateTM);
matTM=matTM*matInvTM;
vector3 vecPickPos=matTM.GetLoc();
matrix matObjectTM;
for(int cLight=0;cLight<m_PickHouseScene->m_HouseObject->m_LightList.num;cLight++)
{
//vecObjectPos=m_PickHouseScene->m_HouseObject->m_LightList[cLight]->m_TM.GetLoc();
float fRad=m_PickHouseScene->m_HouseObject->m_LightList[cLight]->m_fRad;
matObjectTM=m_PickHouseScene->m_HouseObject->m_LightList[cLight]->m_TM*m_PickHouseScene->m_AccumulateTM;
fRad=m_PickHouseScene->m_HouseObject->m_LightList[cLight]->m_fRad;
vecObjectPos=matObjectTM.GetLoc();
vector3 vecInter=m_vecPickRayStart-vecObjectPos;
float fC=(vecInter*vecInter)-fRad;
float fB=m_vecPickRayDir*(m_vecPickRayStart-vecObjectPos);
vecObjectPos=m_vecPickRayStart-vecObjectPos;
if(fB*fB-fC>=0.0f)
{
if(vecObjectPos.GetLens() <= fNearestInterval)
{
if(PickMode==2)
{
m_PickLightScene=m_PickHouseScene->m_HouseObject->m_LightList[cLight];
m_PickObjectScene=NULL;
fNearestInterval=vecObjectPos.GetLens();
}
}
}
//vecObjectPos=vecPickPos-vecObjectPos;
/*
if(vecObjectPos.GetLens() <= fNearestInterval)
{
if(PickMode==2)
{
m_PickLightScene=m_PickHouseScene->m_HouseObject->m_LightList[cLight];
m_PickObjectScene=NULL;
fNearestInterval=vecObjectPos.GetLens();
}
}
*/
}
for(int cObject=0;cObject<m_PickHouseScene->m_HouseObject->m_ObjectList.num;cObject++)
{
float fRad=m_PickHouseScene->m_HouseObject->m_ObjectList[cObject]->m_fRad;
matObjectTM=m_PickHouseScene->m_HouseObject->m_ObjectList[cObject]->m_TM*m_PickHouseScene->m_AccumulateTM;
fRad=m_PickHouseScene->m_HouseObject->m_ObjectList[cObject]->m_fRad;
vecObjectPos=matObjectTM.GetLoc();
vector3 vecInter=m_vecPickRayStart-vecObjectPos;
float fC=(vecInter*vecInter)-fRad;
float fB=m_vecPickRayDir*(m_vecPickRayStart-vecObjectPos);
vecObjectPos=m_vecPickRayStart-vecObjectPos;
if(fB*fB-fC>=0.0f)
{
if(vecObjectPos.GetLens() <= fNearestInterval)
{
if(PickMode==2)
{
m_PickObjectScene=m_PickHouseScene->m_HouseObject->m_ObjectList[cObject];
m_PickLightScene=NULL;
fNearestInterval=vecObjectPos.GetLens();
}
}
}
/*
vecObjectPos=m_PickHouseScene->m_HouseObject->m_ObjectList[cObject]->m_TM.GetLoc();
vecObjectPos=vecPickPos-vecObjectPos;
if(vecObjectPos.GetLens() <= fNearestInterval)
{
if(PickMode==2)
{
m_PickObjectScene=m_PickHouseScene->m_HouseObject->m_ObjectList[cObject];
m_PickLightScene=NULL;
fNearestInterval=vecObjectPos.GetLens();
}
}
*/
}
if(fNearestInterval!=LENS_NEAR_OBJECT)
return;
if(PickMode==2)
return;
}
fNearestInterval=LENS_NEAR_HOUSE;
for(ix=0;ix<m_HeightField.GetLSizeX();ix++)
{
for(iy=0;iy<m_HeightField.GetLSizeY();iy++)
{ //picking point<6E><74> sector <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD>
if( m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_TM._41 <= fPx &&
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_TM._41+SECTORSIZE > fPx &&
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_TM._43 <= fPz &&
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_TM._43+SECTORSIZE > fPz)
{ //<2F><><EFBFBD><EFBFBD>
if(PickMode==1)
{ //house list Ž<><C5BD>
for(cObject=0;cObject<m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_HouseObjectNode.num;cObject++)
{
vector3 vecTargetObjectPos(
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_HouseObjectNode[cObject]->m_AccumulateTM._41,
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_HouseObjectNode[cObject]->m_AccumulateTM._42,
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_HouseObjectNode[cObject]->m_AccumulateTM._43);
vecLens=vecTargetObjectPos-vecPick;
if( vecLens.GetLens() <= fNearestInterval)
{ // <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> house m_PickHouseScene<6E><65><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_PickHouseScene=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_HouseObjectNode[cObject];
m_pPickSector = &(m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()]);
m_PickObjectScene=NULL;
fNearestInterval=vecLens.GetLens();
}
}
if(fNearestInterval!=LENS_NEAR_HOUSE)
return;
}
if(PickMode==2)
{
fNearestInterval=LENS_NEAR_OBJECT;
for(cObject=0;cObject<m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_ObjectSceneNode.num;cObject++)
{
vector3 vecTargetObjectPos(
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_ObjectSceneNode[cObject]->m_TM._41,
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_ObjectSceneNode[cObject]->m_TM._42,
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_ObjectSceneNode[cObject]->m_TM._43);
vecLens=vecTargetObjectPos-vecPick;
if( vecLens.GetLens() <= fNearestInterval)
{
m_PickObjectScene=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_ObjectSceneNode[cObject];
m_PickHouseScene=NULL;
m_pPickSector = &(m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()]);
fNearestInterval=vecLens.GetLens();
}
}
// object<63><74> picking<6E>Ǿ<EFBFBD><C7BE>ٸ<EFBFBD> sound object <20><><EFBFBD><EFBFBD> üũ
if( m_PickObjectScene )
{
if( strcmp( m_PickObjectScene->m_strObjectName, "Sound.R3S" ) == 0 )
{
CSectorSoundMap & sndMap = CSectorSoundMap::GetInstance();
vector3 loc = m_PickObjectScene->m_TM.GetLoc();
sndMap.PickAmbience( loc.x, loc.y, loc.z );
}
if( strcmp( m_PickObjectScene->m_strObjectName, "Cube.R3S" ) == 0 )
{
CBGMController & BGMC = CBGMController::GetInstance();
vector3 loc = m_PickObjectScene->m_TM.GetLoc();
BGMC.SelectClosestPoint( loc.x, loc.y, loc.z, 10.0f );
}
}
if(fNearestInterval!=LENS_NEAR_OBJECT)
return;
}
/*if(PickMode == 7) {
fNearestInterval=LENS_NEAR_OBJECT;
for(int i=0;i<m_EffectNum;i++) {
CX3DEffect *PickEffect = m_EffectManager.m_lstEffect[i];
vector3 *vecTargetObjectPos = PickEffect->GetCenter();
vecLens= (*vecTargetObjectPos) - vecPick;
if( vecLens.GetLens() <= fNearestInterval)
{
m_PickEffect = m_EffectManager.m_lstEffect[i];
m_PickHouseScene=NULL;
fNearestInterval=vecLens.GetLens();
m_bPickEffect = TRUE;
}
}
if(fNearestInterval!=LENS_NEAR_OBJECT)
return;
}//PickMode == 7*/
}
}
}
//m_PickEffect = NULL;
m_PickHouseScene=NULL;
m_PickLightScene=NULL;
m_PickObjectScene=NULL;
m_pPickSector = NULL;
}
void CSceneManager::PickObjectMove(float fMx, float fMy, float fMz,float fAngle,float fAddy,int MoveMode)
{
if(m_PickLightScene)
{
CInHouseObjectMap *InHouseMap=m_MapStorage.FindInHouseMap(m_PickHouseScene->m_strOutName,
m_PickHouseScene->m_strMedName,
m_PickHouseScene->m_strInName,
m_PickHouseScene->m_strBSPName);
if(InHouseMap==NULL)
return;
/*
if(MoveMode==1)
{
matrix AddAngleY;
AddAngleY.YRotation(fAngle);
m_PickLightScene->m_TM=AddAngleY*m_PickLightScene->m_TM;
for(int cLight=0;cLight<InHouseMap->m_LightID.num;cLight++)
{
if(m_PickLightScene->m_LightID==InHouseMap->m_LightID[cLight])
{
InHouseMap->m_matLightList[cLight]=m_PickLightScene->m_TM;
}
}
return;
}
if(MoveMode==2)
{
m_PickLightScene->m_TM._42+=fAddy;
for(int cLight=0;cLight<InHouseMap->m_LightID.num;cLight++)
{
if(m_PickLightScene->m_LightID==InHouseMap->m_LightID[cLight])
{
InHouseMap->m_matLightList[cLight]=m_PickLightScene->m_TM;
}
}
return;
}
*/
if(MoveMode==3)
{
if(KeyPressed(VK_LEFT)) m_PickLightScene->m_TM._41+=1.0f;
if(KeyPressed(VK_RIGHT)) m_PickLightScene->m_TM._41-=1.0f;
if(KeyPressed(VK_UP)) m_PickLightScene->m_TM._43+=1.0f;
if(KeyPressed(VK_DOWN)) m_PickLightScene->m_TM._43-=1.0f;
if(KeyPressed(VK_INSERT)) m_PickLightScene->m_TM._42+=1.0f;
if(KeyPressed(VK_DELETE)) m_PickLightScene->m_TM._42-=1.0f;
for(int cLight=0;cLight<InHouseMap->m_LightID.num;cLight++)
{
if(m_PickLightScene->m_LightID==InHouseMap->m_LightID[cLight])
{
InHouseMap->m_matLightList[cLight]=m_PickLightScene->m_TM;
}
}
return;
}
/*
matrix matTM,matInvTM;
matTM.Translation(vector3(fMx,fMy,fMz));
matInvTM.Inverse(m_PickHouseScene->m_AccumulateTM);
matTM=matTM*matInvTM;
m_PickLightScene->m_TM._41=matTM._41;
m_PickLightScene->m_TM._42=matTM._42;
m_PickLightScene->m_TM._43=matTM._43;
m_bIsPickObjectMoving=MOVE_LIGHT;
for(int cLight=0;cLight<InHouseMap->m_LightID.num;cLight++)
{
if(m_PickLightScene->m_LightID==InHouseMap->m_LightID[cLight])
{
InHouseMap->m_matLightList[cLight]=m_PickLightScene->m_TM;
}
}
*/
return;
}
if(m_PickObjectScene)
{
if(m_PickHouseScene)
{
CInHouseObjectMap *InHouseMap=m_MapStorage.FindInHouseMap(m_PickHouseScene->m_strOutName,
m_PickHouseScene->m_strMedName,
m_PickHouseScene->m_strInName,
m_PickHouseScene->m_strBSPName);
if(InHouseMap==NULL)
return;
if(MoveMode==1)
{
matrix AddAngleY;
AddAngleY.YRotation(fAngle);
if(KeyPressed(VK_LEFT)) fAngle=0.2f;
if(KeyPressed(VK_RIGHT)) fAngle=-0.2f;
m_PickObjectScene->m_TM=AddAngleY*m_PickObjectScene->m_TM;
for(int cObject=0;cObject<InHouseMap->m_ObjectID.num;cObject++)
{
if(m_PickObjectScene->m_ObjectID==InHouseMap->m_ObjectID[cObject])
{
InHouseMap->m_matObjectList[cObject]=m_PickObjectScene->m_TM;
}
}
return;
}
/*
if(MoveMode==2)
{
m_PickObjectScene->m_TM._42+=fAddy;
for(int cObject=0;cObject<InHouseMap->m_ObjectID.num;cObject++)
{
if(m_PickObjectScene->m_ObjectID==InHouseMap->m_ObjectID[cObject])
{
InHouseMap->m_matObjectList[cObject]=m_PickObjectScene->m_TM;
}
}
return;
}
*/
if(MoveMode==3)
{
if(KeyPressed(VK_LEFT)) m_PickObjectScene->m_TM._41+=1.0f;
if(KeyPressed(VK_RIGHT)) m_PickObjectScene->m_TM._41-=1.0f;
if(KeyPressed(VK_UP)) m_PickObjectScene->m_TM._43+=1.0f;
if(KeyPressed(VK_DOWN)) m_PickObjectScene->m_TM._43-=1.0f;
if(KeyPressed(VK_INSERT)) m_PickObjectScene->m_TM._42+=1.0f;
if(KeyPressed(VK_DELETE)) m_PickObjectScene->m_TM._42-=1.0f;
for(int cObject=0;cObject<InHouseMap->m_ObjectID.num;cObject++)
{
if(m_PickObjectScene->m_ObjectID==InHouseMap->m_ObjectID[cObject])
{
InHouseMap->m_matObjectList[cObject]=m_PickObjectScene->m_TM;
}
}
return;
}
/*
matrix matTM,matInvTM;
matTM.Translation(vector3(fMx,fMy,fMz));
matInvTM.Inverse(m_PickHouseScene->m_AccumulateTM);
matTM=matTM*matInvTM;
m_bIsPickObjectMoving=MOVE_OBJECT;
m_PickObjectScene->m_TM._41=matTM._41;
m_PickObjectScene->m_TM._42=matTM._42;
m_PickObjectScene->m_TM._43=matTM._43;
for(int cObject=0;cObject<InHouseMap->m_ObjectID.num;cObject++)
{
if(m_PickObjectScene->m_ObjectID==InHouseMap->m_ObjectID[cObject])
{
InHouseMap->m_matObjectList[cObject]=m_PickObjectScene->m_TM;
}
}
*/
return;
}
/* else if(m_bPickEffect)
{
if(m_PickEffect == NULL)
return;
/* if(MoveMode == 3)
{
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView();
PickMakeRay(point.x,point.y,m_BaseGraphicLayer.m_lScreenSx,m_BaseGraphicLayer.m_lScreenSy);
vector3 vecPos=m_SceneManager->PickPointTerrain();
}
}*/
else
{
if(m_RBspSceneManager.m_pCurrentBspScene != NULL)
{
RBspScene::RBspR3S *pPick = NULL;
vector3 vecR3SObject = vector3(m_PickObjectScene->m_TM._41,
m_PickObjectScene->m_TM._42,
m_PickObjectScene->m_TM._43);
int iLeaf = m_RBspSceneManager.m_pCurrentBspScene->FindWorldLeaf(D3DXVECTOR3(vecR3SObject.x,vecR3SObject.y,vecR3SObject.z));
pPick = m_RBspSceneManager.m_pCurrentBspScene->m_pLeafExs[iLeaf].m_pPickR3SObject;
if(m_PickObjectScene != NULL && pPick != NULL)
{
if(MoveMode==1)
{
matrix AddAngleY;
AddAngleY.YRotation(fAngle);
m_PickObjectScene->m_TM=AddAngleY*m_PickObjectScene->m_TM;
//x<><78> ȸ<><C8B8>
if(KeyPressed('7'))
{
matrix AddAngleX;
AddAngleX.XRotation(0.05f);
m_PickObjectScene->m_TM=AddAngleX*m_PickObjectScene->m_TM;
}
if(KeyPressed('8'))
{
matrix AddAngleX;
AddAngleX.XRotation(-0.05f);
m_PickObjectScene->m_TM=AddAngleX*m_PickObjectScene->m_TM;
}
//z<><7A> ȸ<><C8B8>
if(KeyPressed('9'))
{
matrix AddAngleZ;
AddAngleZ.ZRotation(0.05f);
m_PickObjectScene->m_TM=AddAngleZ*m_PickObjectScene->m_TM;
}
if(KeyPressed('0'))
{
matrix AddAngleZ;
AddAngleZ.ZRotation(-0.05f);
m_PickObjectScene->m_TM=AddAngleZ*m_PickObjectScene->m_TM;
}
// ȸ<><C8B8> <20><><EFBFBD>º<EFBFBD><C2BA><EFBFBD>
if(KeyPressed('1'))
{
matrix AddAngle;
AddAngle.MakeIdent();
AddAngle._41=m_PickObjectScene->m_TM._41;
AddAngle._42=m_PickObjectScene->m_TM._42;
AddAngle._43=m_PickObjectScene->m_TM._43;
m_PickObjectScene->m_TM=AddAngle;
}
pPick->m_matTm = m_PickObjectScene->m_TM;
m_PickObjectScene->m_AccumulateTM=m_PickObjectScene->m_TM;
CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->GenerateR3SObject();
return;
}//<2F><><EFBFBD><EFBFBD> <20>̵<EFBFBD>
if(MoveMode==2)
{
m_PickObjectScene->m_TM._42+=fAddy;
pPick->m_matTm = m_PickObjectScene->m_TM;
pPick->m_vecPos.x = pPick->m_matTm._41;
pPick->m_vecPos.y = pPick->m_matTm._42;
pPick->m_vecPos.z = pPick->m_matTm._43;
m_PickObjectScene->m_AccumulateTM=m_PickObjectScene->m_TM;
CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->GenerateR3SObject();
return;
}// x-z<><7A> <20>̵<EFBFBD>
if(MoveMode==3)
{
if(KeyPressed(VK_LEFT)) m_PickObjectScene->m_TM._41+=1.0f;
if(KeyPressed(VK_RIGHT)) m_PickObjectScene->m_TM._41-=1.0f;
if(KeyPressed(VK_UP)) m_PickObjectScene->m_TM._43+=1.0f;
if(KeyPressed(VK_DOWN)) m_PickObjectScene->m_TM._43-=1.0f;
pPick->m_matTm = m_PickObjectScene->m_TM;
pPick->m_vecPos.x = pPick->m_matTm._41;
pPick->m_vecPos.y = pPick->m_matTm._42;
pPick->m_vecPos.z = pPick->m_matTm._43;
m_PickObjectScene->m_AccumulateTM=m_PickObjectScene->m_TM;
CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->GenerateR3SObject();
return;
}
///////
matrix matTM,matInvTM;
vector3 *vec3Camera = m_ViewCamera->GetPosition();
D3DXVECTOR3 vecBspStart = D3DXVECTOR3(vec3Camera->x,vec3Camera->y,vec3Camera->z);
D3DXVECTOR3 vecBspEnd = D3DXVECTOR3(fMx,fMy,fMz);
// axis <20><>ȯ
D3DXVECTOR3 vecPos = vecBspStart;
D3DXMATRIX matTmp;
D3DXMATRIX matInv;
D3DXMatrixIdentity(&matTmp);
matTmp._41 = m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.x;
matTmp._42 = m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.y;
matTmp._43 = m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.z;
D3DXMatrixInverse(&matInv,NULL,&matTmp);
D3DXMatrixIdentity(&matTmp);
matTmp._41 = vecPos.x;
matTmp._42 = vecPos.y;
matTmp._43 = vecPos.z;
D3DXMatrixMultiply(&matTmp,&matTmp,&matInv);
vecPos.x = matTmp._41;
vecPos.y = matTmp._42;
vecPos.z = matTmp._43;
vecBspStart = vecPos;
////
vecPos = vecBspEnd;
D3DXMatrixIdentity(&matTmp);
matTmp._41 = m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.x;
matTmp._42 = m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.y;
matTmp._43 = m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.z;
D3DXMatrixInverse(&matInv,NULL,&matTmp);
D3DXMatrixIdentity(&matTmp);
matTmp._41 = vecPos.x;
matTmp._42 = vecPos.y;
matTmp._43 = vecPos.z;
D3DXMatrixMultiply(&matTmp,&matTmp,&matInv);
vecPos.x = matTmp._41;
vecPos.y = matTmp._42;
vecPos.z = matTmp._43;
vecBspEnd = vecPos;
///
/// collision check
D3DXVECTOR3 vecBspLast = m_RBspSceneManager.m_pCurrentBspScene->CollisionPoint(vecBspStart,vecBspEnd,5.0f);
/// world axis <20><> <20><>ȯ
vecPos = vecBspLast;
D3DXMatrixIdentity(&matTmp);
matTmp._41 = m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.x;
matTmp._42 = m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.y;
matTmp._43 = m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.z;
matInv = matTmp;
D3DXMatrixIdentity(&matTmp);
matTmp._41 = vecPos.x;
matTmp._42 = vecPos.y;
matTmp._43 = vecPos.z;
D3DXMatrixMultiply(&matTmp,&matTmp,&matInv);
vecPos.x = matTmp._41;
vecPos.y = matTmp._42;
vecPos.z = matTmp._43;
vecBspLast = vecPos;
///////
if(vecBspLast.y <= m_PickObjectScene->m_TM._42)
matTM.Translation(vector3(vecBspLast.x,m_PickObjectScene->m_TM._42,vecBspLast.z));
else
matTM.Translation(vector3(vecBspLast.x,vecBspLast.y,vecBspLast.z));
m_bIsPickObjectMoving=MOVE_OBJECT;
m_PickObjectScene->m_TM._41=matTM._41;
m_PickObjectScene->m_TM._42=matTM._42;
m_PickObjectScene->m_TM._43=matTM._43;
/////
pPick->m_matTm = m_PickObjectScene->m_TM;
pPick->m_vecPos.x = pPick->m_matTm._41;
pPick->m_vecPos.y = pPick->m_matTm._42;
pPick->m_vecPos.z = pPick->m_matTm._43;
m_PickObjectScene->m_AccumulateTM=m_PickObjectScene->m_TM;
CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->GenerateR3SObject();
return;
}
}
else
{
// object mesh informain <20>б<EFBFBD>
CSectorMeshMap *pMapMesh=m_MapStorage.FindMeshMap(m_PickObjectScene->m_TM._41,m_PickObjectScene->m_TM._43);
if(pMapMesh==NULL)
return;
/*
int nIndex=-1;
CSectorSoundMap *pSoundMap=NULL;
if(strcmp(m_PickObjectScene->m_strObjectName,"Sound.R3S")==0)
{
pSoundMap=m_MapStorage.FindSoundMap(m_PickObjectScene->m_TM._41,m_PickObjectScene->m_TM._43);
float fLens=10.0f;
vector3 vecLens;
for(int i=0;i<pSoundMap->m_SoundPosList.num;i++)
{
vecLens=m_PickObjectScene->m_TM.GetLoc()-pSoundMap->m_SoundPosList[i];
if(fLens>=vecLens.GetLens())
{
fLens=vecLens.GetLens();
nIndex=i;
}
}
if(nIndex==-1)
return;
}
*/
//y<><79> ȸ<><C8B8>
if(MoveMode==1)
{
matrix AddAngleY;
AddAngleY.YRotation(fAngle);
m_PickObjectScene->m_TM=AddAngleY*m_PickObjectScene->m_TM;
//x<><78> ȸ<><C8B8>
if(KeyPressed('7'))
{
matrix AddAngleX;
AddAngleX.XRotation(0.05f);
m_PickObjectScene->m_TM=AddAngleX*m_PickObjectScene->m_TM;
}
if(KeyPressed('8'))
{
matrix AddAngleX;
AddAngleX.XRotation(-0.05f);
m_PickObjectScene->m_TM=AddAngleX*m_PickObjectScene->m_TM;
}
//z<><7A> ȸ<><C8B8>
if(KeyPressed('9'))
{
matrix AddAngleZ;
AddAngleZ.ZRotation(0.05f);
m_PickObjectScene->m_TM=AddAngleZ*m_PickObjectScene->m_TM;
}
if(KeyPressed('0'))
{
matrix AddAngleZ;
AddAngleZ.ZRotation(-0.05f);
m_PickObjectScene->m_TM=AddAngleZ*m_PickObjectScene->m_TM;
}
// ȸ<><C8B8> <20><><EFBFBD>º<EFBFBD><C2BA><EFBFBD>
if(KeyPressed('1'))
{
matrix AddAngle;
AddAngle.MakeIdent();
AddAngle._41=m_PickObjectScene->m_TM._41;
AddAngle._42=m_PickObjectScene->m_TM._42;
AddAngle._43=m_PickObjectScene->m_TM._43;
m_PickObjectScene->m_TM=AddAngle;
}
for(int cObject=0;cObject<pMapMesh->m_ObjectSceneID.num;cObject++)
{
if(pMapMesh->m_ObjectSceneID[cObject]==m_PickObjectScene->m_ObjectID)
{
pMapMesh->m_TM[cObject]=m_PickObjectScene->m_TM;
}
}
m_PickObjectScene->m_AccumulateTM=m_PickObjectScene->m_TM;
/*
if(pSoundMap && nIndex!=-1)
{
pSoundMap->m_SoundPosList[nIndex]=m_PickObjectScene->m_TM.GetLoc();
vector3 vecPos=m_PickObjectScene->m_TM.GetLoc();
for(int i=0;i<LSIZEX*LSIZEY;i++)
{
if(m_HeightField.m_SectorScene[i].m_MapSound==pSoundMap)
{
m_HeightField.m_SectorScene[i].m_SoundObjectNode[nIndex]->SetPosition(vecPos);
break;
}
}
}*/
if( strcmp( m_PickObjectScene->m_strObjectName, "Sound.R3S" ) == 0 )
{
CSectorSoundMap & sndMap = CSectorSoundMap::GetInstance();
vector3 loc = m_PickObjectScene->m_TM.GetLoc();
sndMap.MoveAmbience( loc.x, loc.y, loc.z );
}
if( strcmp( m_PickObjectScene->m_strObjectName, "Cube.R3S" ) == 0 )
{
CBGMController & BGMC = CBGMController::GetInstance();
vector3 loc = m_PickObjectScene->m_TM.GetLoc();
BGMC.MovePoint( loc.x, loc.y, loc.z );
}
return;
}//<2F><><EFBFBD><EFBFBD> <20>̵<EFBFBD>
if(MoveMode==2)
{
m_PickObjectScene->m_TM._42+=fAddy;
for(int cObject=0;cObject<pMapMesh->m_ObjectSceneID.num;cObject++)
{
if(pMapMesh->m_ObjectSceneID[cObject]==m_PickObjectScene->m_ObjectID)
{
pMapMesh->m_TM[cObject]=m_PickObjectScene->m_TM;
}
}
m_PickObjectScene->m_AccumulateTM=m_PickObjectScene->m_TM;
/*
if(pSoundMap && nIndex!=-1)
{
pSoundMap->m_SoundPosList[nIndex]=m_PickObjectScene->m_TM.GetLoc();
vector3 vecPos=m_PickObjectScene->m_TM.GetLoc();
for(int i=0;i<LSIZEX*LSIZEY;i++)
{
if(m_HeightField.m_SectorScene[i].m_MapSound==pSoundMap)
{
m_HeightField.m_SectorScene[i].m_SoundObjectNode[nIndex]->SetPosition(vecPos);
break;
}
}
}
*/
if( strcmp( m_PickObjectScene->m_strObjectName, "Sound.R3S" ) == 0 )
{
CSectorSoundMap & sndMap = CSectorSoundMap::GetInstance();
vector3 loc = m_PickObjectScene->m_TM.GetLoc();
sndMap.MoveAmbience( loc.x, loc.y, loc.z );
}
if( strcmp( m_PickObjectScene->m_strObjectName, "Cube.R3S" ) == 0 )
{
CBGMController & BGMC = CBGMController::GetInstance();
vector3 loc = m_PickObjectScene->m_TM.GetLoc();
BGMC.MovePoint( loc.x, loc.y, loc.z );
}
return;
}// x-z<><7A> <20>̵<EFBFBD>
if(MoveMode==3)
{
if(KeyPressed(VK_LEFT)) m_PickObjectScene->m_TM._41+=1.0f;
if(KeyPressed(VK_RIGHT)) m_PickObjectScene->m_TM._41-=1.0f;
if(KeyPressed(VK_UP)) m_PickObjectScene->m_TM._43+=1.0f;
if(KeyPressed(VK_DOWN)) m_PickObjectScene->m_TM._43-=1.0f;
for(int cObject=0;cObject<pMapMesh->m_ObjectSceneID.num;cObject++)
{
if(pMapMesh->m_ObjectSceneID[cObject]==m_PickObjectScene->m_ObjectID)
{
pMapMesh->m_TM[cObject]=m_PickObjectScene->m_TM;
}
}
m_PickObjectScene->m_AccumulateTM=m_PickObjectScene->m_TM;
/*
if(pSoundMap && nIndex!=-1)
{
pSoundMap->m_SoundPosList[nIndex]=m_PickObjectScene->m_TM.GetLoc();
vector3 vecPos=m_PickObjectScene->m_TM.GetLoc();
for(int i=0;i<LSIZEX*LSIZEY;i++)
{
if(m_HeightField.m_SectorScene[i].m_MapSound==pSoundMap)
{
m_HeightField.m_SectorScene[i].m_SoundObjectNode[nIndex]->SetPosition(vecPos);
break;
}
}
}
*/
if( strcmp( m_PickObjectScene->m_strObjectName, "Sound.R3S" ) == 0 )
{
CSectorSoundMap & sndMap = CSectorSoundMap::GetInstance();
vector3 loc = m_PickObjectScene->m_TM.GetLoc();
sndMap.MoveAmbience( loc.x, loc.y, loc.z );
}
if( strcmp( m_PickObjectScene->m_strObjectName, "Cube.R3S" ) == 0 )
{
CBGMController & BGMC = CBGMController::GetInstance();
vector3 loc = m_PickObjectScene->m_TM.GetLoc();
BGMC.MovePoint( loc.x, loc.y, loc.z );
}
return;
}
int indexx=(int)(m_PickObjectScene->m_AccumulateTM._41/SECTORSIZE);
int indexy=(int)(m_PickObjectScene->m_AccumulateTM._43/SECTORSIZE);
int newindexx=(int)(fMx/SECTORSIZE);
int newindexy=(int)(fMz/SECTORSIZE);
if(indexx!=newindexx || indexy!=newindexy)
return;
matrix matTM,matInvTM;
matTM.Translation(vector3(fMx,fMy,fMz));
m_bIsPickObjectMoving=MOVE_OBJECT;
m_PickObjectScene->m_TM._41=matTM._41;
m_PickObjectScene->m_TM._42=matTM._42;
m_PickObjectScene->m_TM._43=matTM._43;
for(int cObject=0;cObject<pMapMesh->m_ObjectSceneID.num;cObject++)
{
if(pMapMesh->m_ObjectSceneID[cObject]==m_PickObjectScene->m_ObjectID)
{
pMapMesh->m_TM[cObject]=m_PickObjectScene->m_TM;
}
}
m_PickObjectScene->m_AccumulateTM=m_PickObjectScene->m_TM;
/*
if(pSoundMap && nIndex!=-1)
{
pSoundMap->m_SoundPosList[nIndex]=m_PickObjectScene->m_TM.GetLoc();
vector3 vecPos=m_PickObjectScene->m_TM.GetLoc();
for(int i=0;i<LSIZEX*LSIZEY;i++)
{
if(m_HeightField.m_SectorScene[i].m_MapSound==pSoundMap)
{
m_HeightField.m_SectorScene[i].m_SoundObjectNode[nIndex]->SetPosition(vecPos);
break;
}
}
}*/
if( strcmp( m_PickObjectScene->m_strObjectName, "Sound.R3S" ) == 0 )
{
CSectorSoundMap & sndMap = CSectorSoundMap::GetInstance();
vector3 loc = m_PickObjectScene->m_TM.GetLoc();
sndMap.MoveAmbience( loc.x, loc.y, loc.z );
}
if( strcmp( m_PickObjectScene->m_strObjectName, "Cube.R3S" ) == 0 )
{
CBGMController & BGMC = CBGMController::GetInstance();
vector3 loc = m_PickObjectScene->m_TM.GetLoc();
BGMC.MovePoint( loc.x, loc.y, loc.z );
}
return;
}
///////dfgdfgsdrgserg
}
}
if(m_PickHouseScene)
{
if(MoveMode==1)
{
float fSaveX,fSaveY,fSaveZ;
CSectorHouseMap *SectorHouseMap=m_MapStorage.FindHouseMap(m_PickHouseScene->m_AccumulateTM._41,
m_PickHouseScene->m_AccumulateTM._43);
if(SectorHouseMap)
{
fSaveX=m_PickHouseScene->m_AccumulateTM._41;
fSaveY=m_PickHouseScene->m_AccumulateTM._42;
fSaveZ=m_PickHouseScene->m_AccumulateTM._43;
m_PickHouseScene->m_AccumulateTM._41=0.0f;
m_PickHouseScene->m_AccumulateTM._42=0.0f;
m_PickHouseScene->m_AccumulateTM._43=0.0f;
matrix AddAngleY;
AddAngleY.YRotation(fAngle);
m_PickHouseScene->m_AccumulateTM=m_PickHouseScene->m_AccumulateTM*AddAngleY;
m_PickHouseScene->m_AccumulateTM._41=fSaveX;
m_PickHouseScene->m_AccumulateTM._42=fSaveY;
m_PickHouseScene->m_AccumulateTM._43=fSaveZ;
for(int cObject=0;cObject<SectorHouseMap->m_TM.num;cObject++)
{
if( SectorHouseMap->m_HouseSceneID[cObject] == m_PickHouseScene->m_HouseSceneID )
{
SectorHouseMap->m_TM[cObject]=m_PickHouseScene->m_AccumulateTM;
}
}
}
return;
}
if(MoveMode==2)
{
CSectorHouseMap *SectorHouseMap=m_MapStorage.FindHouseMap(m_PickHouseScene->m_AccumulateTM._41,
m_PickHouseScene->m_AccumulateTM._43);
if(SectorHouseMap)
{
for(int cObject=0;cObject<SectorHouseMap->m_TM.num;cObject++)
{
if( SectorHouseMap->m_HouseSceneID[cObject] == m_PickHouseScene->m_HouseSceneID )
{
m_PickHouseScene->m_AccumulateTM._42+=fAddy;
SectorHouseMap->m_TM[cObject]=m_PickHouseScene->m_AccumulateTM;
}
}
}
return;
}
if(MoveMode==3)
{
CSectorHouseMap *SectorHouseMap=m_MapStorage.FindHouseMap(m_PickHouseScene->m_AccumulateTM._41,
m_PickHouseScene->m_AccumulateTM._43);
if(SectorHouseMap)
{
for(int cObject=0;cObject<SectorHouseMap->m_TM.num;cObject++)
{
if( SectorHouseMap->m_HouseSceneID[cObject] == m_PickHouseScene->m_HouseSceneID )
{
if(KeyPressed(VK_LEFT)) m_PickHouseScene->m_AccumulateTM._41+=1.0f;
if(KeyPressed(VK_RIGHT)) m_PickHouseScene->m_AccumulateTM._41-=1.0f;
if(KeyPressed(VK_UP)) m_PickHouseScene->m_AccumulateTM._43+=1.0f;
if(KeyPressed(VK_DOWN)) m_PickHouseScene->m_AccumulateTM._43-=1.0f;
SectorHouseMap->m_TM[cObject]=m_PickHouseScene->m_AccumulateTM;
}
}
}
return;
}
int indexx=(int)(m_PickHouseScene->m_AccumulateTM._41/SECTORSIZE);
int indexy=(int)(m_PickHouseScene->m_AccumulateTM._43/SECTORSIZE);
int newindexx=(int)(fMx/SECTORSIZE);
int newindexy=(int)(fMz/SECTORSIZE);
CSectorHouseMap *SectorHouseMap=m_MapStorage.FindHouseMap(m_PickHouseScene->m_AccumulateTM._41,
m_PickHouseScene->m_AccumulateTM._43);
if(SectorHouseMap && newindexx==indexx && newindexy==indexy)
{
for(int cObject=0;cObject<SectorHouseMap->m_TM.num;cObject++)
{
if( SectorHouseMap->m_HouseSceneID[cObject] == m_PickHouseScene->m_HouseSceneID )
{
SectorHouseMap->m_TM[cObject]._41=fMx;
SectorHouseMap->m_TM[cObject]._42=fMy;
SectorHouseMap->m_TM[cObject]._43=fMz;
}
m_PickHouseScene->m_AccumulateTM._41=fMx;
m_PickHouseScene->m_AccumulateTM._42=fMy;
m_PickHouseScene->m_AccumulateTM._43=fMz;
}
}
m_bIsPickObjectMoving=MOVE_HOUSE;
}
}
void CSceneManager::CalculateLightmap(int LightmapMode)
{
if(m_PickHouseScene)
{
matrix mat;
mat=m_PickHouseScene->m_AccumulateTM;
D3DXMATRIX d3dmat;
d3dmat._11 = mat._11;
d3dmat._12 = mat._12;
d3dmat._13 = mat._13;
d3dmat._14 = mat._14;
d3dmat._21 = mat._21;
d3dmat._22 = mat._22;
d3dmat._23 = mat._23;
d3dmat._24 = mat._24;
d3dmat._31 = mat._31;
d3dmat._32 = mat._32;
d3dmat._33 = mat._33;
d3dmat._34 = mat._34;
d3dmat._41 = mat._41;
d3dmat._42 = mat._42;
d3dmat._43 = mat._43;
d3dmat._44 = mat._44;
int indexx=(int)(d3dmat._41/SECTORSIZE);
int indexy=(int)(d3dmat._43/SECTORSIZE);
CSectorLightManager *pLightManager = NULL;
for(int ix=0;ix<m_HeightField.GetLSizeX();ix++)
{
for(int iy=0;iy<m_HeightField.GetLSizeY();iy++)
{
if((m_HeightField.m_SectorScene[ix+iy*(m_HeightField.GetLSizeX())].m_SectorLightManager.m_IndexX == indexx) &&
(m_HeightField.m_SectorScene[ix+iy*(m_HeightField.GetLSizeX())].m_SectorLightManager.m_IndexY == indexy))
pLightManager = &(m_HeightField.m_SectorScene[ix+iy*(m_HeightField.GetLSizeX())].m_SectorLightManager);
}
}
vector3 vecMin;
vector3 vecMax;
m_PickHouseScene->m_HouseObject->CalcBox(vecMin,vecMax);
if(pLightManager == NULL) {
// MessageBox(NULL,"Light <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.","error",MB_OK);
// return;
}
else
{
pLightManager->SelectLight(D3DXVECTOR3(vecMin.x,vecMin.y,vecMin.z),D3DXVECTOR3(vecMax.x,vecMax.y,vecMax.z),d3dmat);
}
/* D3DXMATRIX box;
// Min
D3DXMatrixIdentity(&box);
box._41 = vecMin.x;
box._42 = vecMin.y;
box._43 = vecMin.z;
D3DXMatrixMultiply(&box,&box,&d3dmat);
vecMin.x = box._41;
vecMin.y = box._42;
vecMin.z = box._43;
// max
D3DXMatrixIdentity(&box);
box._41 = vecMax.x;
box._42 = vecMax.y;
box._43 = vecMax.z;
D3DXMatrixMultiply(&box,&box,&d3dmat);
vecMax.x = box._41;
vecMax.y = box._42;
vecMax.z = box._43;
*/
if(LightmapMode == 2) // <20><><EFBFBD><EFBFBD> lightmap generator
{
if(pLightManager)
m_PickHouseScene->m_HouseObject->GenerateCaldronPointLightmap(mat,m_PickHouseScene->m_AccumulateTM,pLightManager->m_pSelectLights,pLightManager->m_iSelectLights);
else
m_PickHouseScene->m_HouseObject->GenerateCaldronPointLightmap(mat,m_PickHouseScene->m_AccumulateTM,NULL,0);
if(m_PickHouseScene->m_HouseObject->m_pInHouseObject)
{
m_PickHouseScene->m_HouseObject->m_pInHouseObject->MeshReload();
char strTextureName[256];
sprintf(strTextureName,"%s",m_PickHouseScene->m_strInName);
m_PickHouseScene->m_HouseObject->m_isHaveInLightmap = true;
m_PickHouseScene->m_HouseObject->m_InLightmap.Unload();
m_PickHouseScene->m_HouseObject->m_InLightmap.SetPath(LIGHTMAPTEXTUREPATH);
m_PickHouseScene->m_HouseObject->m_InLightmap.LoadNotCache(strTextureName);
m_PickHouseScene->m_HouseObject->m_nIndices.num=0;
}
/* switch(MessageBox(NULL,"lightmap <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>ҿ<EFBFBD><D2BF><EFBFBD> No <20>Ͻÿ<CFBD>. <20><><EFBFBD><EFBFBD>Ʈ <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD> <20><><EFBFBD><EFBFBD>)?","<22><><EFBFBD><EFBFBD>",MB_YESNO))
{
case IDNO:
m_PickHouseScene->m_HouseObject->GenerateNewLightmap(0,mat,m_PickHouseScene->m_AccumulateTM,pLightManager->m_pSelectLights,pLightManager->m_iSelectLights);
break;
case IDYES:
m_PickHouseScene->m_HouseObject->GenerateNewLightmap(1,mat,m_PickHouseScene->m_AccumulateTM,pLightManager->m_pSelectLights,pLightManager->m_iSelectLights);
break;
}
*/
/*
CConvertTexture ConvertTexture;
ConvertTexture.m_pddTexture=m_PickHouseScene->m_HouseObject->m_BackupLightmap.GetTexture();
ConvertTexture.m_dwHeight=m_PickHouseScene->m_HouseObject->m_BackupLightmap.m_dwHeight;
ConvertTexture.m_dwWidth=m_PickHouseScene->m_HouseObject->m_BackupLightmap.m_dwWidth;
ConvertTexture.GenerateMipMaps(true);
ConvertTexture.m_pddTexture=ConvertTexture.m_pddNewTexture;
ConvertTexture.m_pddNewTexture=NULL;
ConvertTexture.Compress(D3DFMT_DXT3);
char strDDSName[MAX_NAMEBUFFER];
char strNewName[MAX_NAMEBUFFER];
memset(strNewName,0,sizeof(char) * MAX_NAMEBUFFER);
strcpy(strNewName,m_PickHouseScene->m_strOutName);
char *ptr = strrchr(strNewName,'.');
*(ptr++) = '_';
*(ptr++) = 'N';
*(ptr++) = '.';
*(ptr++) = 'D';
*(ptr++) = 'D';
*(ptr++) = 'S';
sprintf(strDDSName,"%s\\%s",LIGHTMAPTEXTUREPATH,strNewName);
ConvertTexture.SaveDDS(strDDSName);
if(m_PickHouseScene->m_HouseObject->m_pOutHouseObject)
{
char HouseMeshObjectPath[MAX_NAMEBUFFER] = {0};
FILE *fp = NULL;
sprintf(HouseMeshObjectPath,"%s%s",HOUSEOBJECTPATH,m_PickHouseScene->m_strOutName);
int iLength = strlen(HouseMeshObjectPath);
HouseMeshObjectPath[iLength - 1] = '\0';
HouseMeshObjectPath[iLength - 2] = 'v';
HouseMeshObjectPath[iLength - 3] = 'u';
fp = fopen(HouseMeshObjectPath,"wb");
m_PickHouseScene->m_HouseObject->m_pOutHouseObject->AllLockBuffer();
fwrite((int *)&(m_PickHouseScene->m_HouseObject->m_pOutHouseObject->m_pVertexBuffer.num),sizeof(int),1,fp);
for(int i=0;i<m_PickHouseScene->m_HouseObject->m_pOutHouseObject->m_pVertexBuffer.num;i++)
{
int iNum = m_PickHouseScene->m_HouseObject->m_pOutHouseObject->m_nVertex[i];
fwrite((int *)&(iNum),sizeof(int),1,fp);
fwrite((m_PickHouseScene->m_HouseObject->m_pBackupVertex[i]),sizeof(MultiVertex)*(m_PickHouseScene->m_HouseObject->m_pOutHouseObject->m_nVertex[i]),1,fp);
}
m_PickHouseScene->m_HouseObject->m_pOutHouseObject->AllUnlockBuffer();
m_PickHouseScene->m_HouseObject->m_bConvertNight = false;
m_PickHouseScene->m_HouseObject->m_bNightUv = true;
m_PickHouseScene->m_HouseObject->m_bNightMap = true;
fclose(fp);
}*/
/*if(m_PickHouseScene->m_HouseObject->m_pMedHouseObject)
{
sprintf(HouseMeshObjectPath,"%s%s",HOUSEOBJECTPATH,m_PickHouseScene->m_strMedName);
m_PickHouseScene->m_HouseObject->m_pMedHouseObject->Save(HouseMeshObjectPath);
}
if(m_PickHouseScene->m_HouseObject->m_pInHouseObject)
{
sprintf(HouseMeshObjectPath,"%s%s",HOUSEOBJECTPATH,m_PickHouseScene->m_strInName);
m_PickHouseScene->m_HouseObject->m_pInHouseObject->Save(HouseMeshObjectPath);
}*/
}
else {
mat._43=mat._42=mat._41=0.0f;
if(pLightManager)
m_PickHouseScene->m_HouseObject->GenerateCaldronLightmap(mat,m_PickHouseScene->m_AccumulateTM,pLightManager->m_pSelectLights,pLightManager->m_iSelectLights);
else
m_PickHouseScene->m_HouseObject->GenerateCaldronLightmap(mat,m_PickHouseScene->m_AccumulateTM,NULL,0);
if(m_PickHouseScene->m_HouseObject->m_pOutHouseObject)
{
m_PickHouseScene->m_HouseObject->m_pOutHouseObject->MeshReload();
char strTextureName[256];
sprintf(strTextureName,"%s",m_PickHouseScene->m_strOutName);
m_PickHouseScene->m_HouseObject->m_isHaveLightmap = true;
m_PickHouseScene->m_HouseObject->m_Lightmap.Unload();
m_PickHouseScene->m_HouseObject->m_Lightmap.SetPath(LIGHTMAPTEXTUREPATH);
m_PickHouseScene->m_HouseObject->m_Lightmap.LoadNotCache(strTextureName);
m_PickHouseScene->m_HouseObject->m_nIndices.num=0;
}
if(m_PickHouseScene->m_HouseObject->m_pMedHouseObject)
{
m_PickHouseScene->m_HouseObject->m_pMedHouseObject->MeshReload();
}
/*m_PickHouseScene->m_HouseObject->GenerateLightmap(mat,m_PickHouseScene->m_AccumulateTM,LightmapMode);
char HouseMeshObjectPath[MAX_NAMEBUFFER];
if(m_PickHouseScene->m_HouseObject->m_pOutHouseObject)
{
sprintf(HouseMeshObjectPath,"%s%s",HOUSEOBJECTPATH,m_PickHouseScene->m_strOutName);
m_PickHouseScene->m_HouseObject->m_pOutHouseObject->Save(HouseMeshObjectPath);
}
if(m_PickHouseScene->m_HouseObject->m_pMedHouseObject)
{
sprintf(HouseMeshObjectPath,"%s%s",HOUSEOBJECTPATH,m_PickHouseScene->m_strMedName);
m_PickHouseScene->m_HouseObject->m_pMedHouseObject->Save(HouseMeshObjectPath);
}
if(m_PickHouseScene->m_HouseObject->m_pInHouseObject)
{
sprintf(HouseMeshObjectPath,"%s%s",HOUSEOBJECTPATH,m_PickHouseScene->m_strInName);
m_PickHouseScene->m_HouseObject->m_pInHouseObject->Save(HouseMeshObjectPath);
}
CConvertTexture ConvertTexture;
ConvertTexture.m_pddTexture=m_PickHouseScene->m_HouseObject->m_Lightmap.GetTexture();
ConvertTexture.m_dwHeight=m_PickHouseScene->m_HouseObject->m_Lightmap.m_dwHeight;
ConvertTexture.m_dwWidth=m_PickHouseScene->m_HouseObject->m_Lightmap.m_dwWidth;
ConvertTexture.GenerateMipMaps(true);
ConvertTexture.m_pddTexture=ConvertTexture.m_pddNewTexture;
ConvertTexture.m_pddNewTexture=NULL;
ConvertTexture.Compress(D3DFMT_DXT3);
char strDDSName[MAX_NAMEBUFFER];
sprintf(strDDSName,"%s\\%s",LIGHTMAPTEXTUREPATH,m_PickHouseScene->m_strOutName);
strDDSName[strlen(strDDSName)-1]='S';
strDDSName[strlen(strDDSName)-2]='D';
strDDSName[strlen(strDDSName)-3]='D';
ConvertTexture.SaveDDS(strDDSName);
*/
}
/*
CConvertTexture ConvertTexture;
ConvertTexture.Init(m_pd3dDevice);
ConvertTexture.m_ptexOrig=m_PickHouseScene->m_HouseObject->m_Lightmap.GetTexture();
ConvertTexture.m_dwHeight=m_PickHouseScene->m_HouseObject->m_Lightmap.m_dwHeight;
ConvertTexture.m_dwWidth=m_PickHouseScene->m_HouseObject->m_Lightmap.m_dwWidth;
ConvertTexture.Compress(D3DFMT_DXT3);
ConvertTexture.GenerateMipMaps();
char strDDSName[MAX_NAMEBUFFER];
sprintf(strDDSName,"%s\\%s",LIGHTMAPTEXTUREPATH,m_PickHouseScene->m_strOutName);
strDDSName[strlen(strDDSName)-1]='S';
strDDSName[strlen(strDDSName)-2]='D';
strDDSName[strlen(strDDSName)-3]='D';
ConvertTexture.SaveDDS(ConvertTexture.m_ptexNew,strDDSName);
*/
}
}
void CSceneManager::CalculateOctree()
{
if(m_PickHouseScene)
{
m_PickHouseScene->m_HouseObject->GenerateOctree();
FILE *fp;
char strOctreeFilename[MAX_NAMEBUFFER];
sprintf(strOctreeFilename,"%s\\%s",OCTREEPATH,m_PickHouseScene->m_strOutName);
strOctreeFilename[strlen(strOctreeFilename)-1]='T';
strOctreeFilename[strlen(strOctreeFilename)-2]='C';
strOctreeFilename[strlen(strOctreeFilename)-3]='O';
fp=fopen(strOctreeFilename,"wb");
//m_PickHouseScene->m_HouseObject->m_pOctree->m_pOctree->Save(fp);
m_PickHouseScene->m_HouseObject->m_pOctree->Save(fp);
fclose(fp);
}
}
void CSceneManager::DeleteAllData()
{
// m_HeightField.Destroy();
//=============
// Glare Test
//=============
m_GlareManager->Destroy();
for(int ix=0;ix<m_HeightField.GetLSizeX();ix++)
{
for(int iy=0;iy<m_HeightField.GetLSizeX();iy++)
{
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].UnloadAllData();
}
}
m_MapStorage.DeleteAllData();
}
CSectorScene* CSceneManager::PickTerrain(float fXp, float fYp, float fZp)
{
int ix,iy;
for(ix=0;ix<m_HeightField.GetLSizeX();ix++)
{
for(iy=0;iy<m_HeightField.GetLSizeX();iy++)
{
if( m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._41 <= fXp &&
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._41 + SECTORSIZE > fXp &&
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._43 <= fZp &&
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._43 + SECTORSIZE > fZp)
{
return &m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()];
}
}
}
return NULL;
}
void CSceneManager::DeletePickingObject()
{
if(m_PickObjectScene)
{
if(m_PickHouseScene)
{
int HouseSceneID=m_PickHouseScene->m_HouseSceneID;
m_MapStorage.DelInHouseObject(m_PickHouseScene->m_strOutName,
m_PickHouseScene->m_strMedName,
m_PickHouseScene->m_strInName,
m_PickObjectScene->m_ObjectID);
int delindexx=m_PickHouseScene->m_AccumulateTM._41/SECTORSIZE;
int delindexy=m_PickHouseScene->m_AccumulateTM._43/SECTORSIZE;
for(int i=0;i<m_PickHouseScene->m_HouseObject->m_ObjectList.num;i++)
{
if( m_PickHouseScene->m_HouseObject->m_ObjectList[i]->m_ObjectID==
m_PickObjectScene->m_ObjectID )
{
delete m_PickHouseScene->m_HouseObject->m_ObjectList[i];
m_PickHouseScene->m_HouseObject->m_ObjectList.DelIndex(i);
}
}
/*
m_PickHouseScene=NULL;
for(int cSector=0;cSector<LSIZEX*LSIZEY;cSector++)
{
sectorindexx=m_HeightField.m_SectorScene[cSector].m_AccumulateTM._41/SECTORSIZE;
sectorindexy=m_HeightField.m_SectorScene[cSector].m_AccumulateTM._43/SECTORSIZE;
if( delindexx == sectorindexx && delindexy == sectorindexy)
{
m_HeightField.m_SectorScene[cSector].GenerateHouseObject();
for(int cHouse=0;cHouse<m_HeightField.m_SectorScene[cSector].m_HouseObjectNode.num;cHouse++)
{
if(HouseSceneID==m_HeightField.m_SectorScene[cSector].m_HouseObjectNode[cHouse]->m_HouseSceneID)
{
m_PickHouseScene=m_HeightField.m_SectorScene[cSector].m_HouseObjectNode[cHouse];
}
}
}
}
m_PickObjectScene=NULL;
*/
m_PickObjectScene=NULL;
}
else
{
if(m_RBspSceneManager.m_pCurrentBspScene == NULL)
{
/*
CSectorSoundMap *pSoundMap=NULL;
int nIndex=-1;
if(strcmp(m_PickObjectScene->m_strObjectName,"Sound.R3S")==0)
{
pSoundMap=m_MapStorage.FindSoundMap(m_PickObjectScene->m_TM._41,m_PickObjectScene->m_TM._43);
float fLens=10.0f;
vector3 vecLens;
for(int i=0;i<pSoundMap->m_SoundPosList.num;i++)
{
vecLens=m_PickObjectScene->m_TM.GetLoc()-pSoundMap->m_SoundPosList[i];
if(fLens>=vecLens.GetLens())
{
fLens=vecLens.GetLens();
nIndex=i;
}
}
if(nIndex==-1)
return;
}
if(pSoundMap && nIndex!=-1)
{
pSoundMap->m_SoundPosList[nIndex]=m_PickObjectScene->m_TM.GetLoc();
pSoundMap->m_SoundPosList.DelIndex(nIndex);
pSoundMap->m_SoundMinRangeList.DelIndex(nIndex);
pSoundMap->m_SoundMaxRangeList.DelIndex(nIndex);
delete [] pSoundMap->m_strSoundFilenameList[nIndex];
pSoundMap->m_strSoundFilenameList.DelIndex(nIndex);
vector3 vecPos=m_PickObjectScene->m_TM.GetLoc();
for(int i=0;i<LSIZEX*LSIZEY;i++)
{
if(m_HeightField.m_SectorScene[i].m_MapSound==pSoundMap)
{
delete m_HeightField.m_SectorScene[i].m_SoundObjectNode[nIndex];
m_HeightField.m_SectorScene[i].m_SoundObjectNode.DelIndex(nIndex);
break;
}
}
}
*/
if( strcmp( m_PickObjectScene->m_strObjectName, "Sound.R3S" ) == 0 )
{
CSectorSoundMap & sndMap = CSectorSoundMap::GetInstance();
vector3 loc = m_PickObjectScene->m_TM.GetLoc();
sndMap.DeleteAmbience( loc.x, loc.y, loc.z );
}
if( strcmp( m_PickObjectScene->m_strObjectName, "Cube.R3S" ) == 0 )
{
try
{
CBGMController & BGMC = CBGMController::GetInstance();
vector3 loc = m_PickObjectScene->m_TM.GetLoc();
BGMC.DeletePoint();
}
catch( exception & e )
{
MessageBox( NULL, e.what(), "Error!!", MB_OK );
return;
}
}
m_MapStorage.DelMeshMap(m_PickObjectScene->m_TM._41,m_PickObjectScene->m_TM._42,m_PickObjectScene->m_TM._43,
m_PickObjectScene->m_ObjectID);
int delindexx=m_PickObjectScene->m_TM._41/SECTORSIZE;
int delindexy=m_PickObjectScene->m_TM._43/SECTORSIZE;
m_HeightField.GenerateSectorSceneObjects( delindexx, delindexy );
m_PickObjectScene=NULL;
/*
CSectorMeshMap *pMapMesh=CMapStorage::FindMeshMap(m_PickObjectScene->m_TM._41,m_PickObjectScene->m_TM._43);
if(pMapMesh==NULL)
return;
if(MoveMode==1)
{
matrix AddAngleY;
AddAngleY.YRotation(fAngle);
m_PickObjectScene->m_TM=AddAngleY*m_PickObjectScene->m_TM;
for(int cObject=0;cObject<pMapMesh->m_ObjectSceneID.num;cObject++)
{
if(pMapMesh->m_ObjectSceneID[cObject]==m_PickObjectScene->m_ObjectID)
{
pMapMesh->m_TM[cObject]=m_PickObjectScene->m_TM;
}
}
return;
}
*/
} // if(m_RBspSceneManager.m_pCurrentBspScene == NULL)
else
{
RBspScene *pScene = m_RBspSceneManager.m_pCurrentBspScene;
D3DXVECTOR3 vecR3SCenter = D3DXVECTOR3(m_PickObjectScene->m_TM._41,
m_PickObjectScene->m_TM._42,
m_PickObjectScene->m_TM._43);
int iLeaf = pScene->FindWorldLeaf(vecR3SCenter);
pScene->m_pLeafExs[iLeaf].DeletePickR3SObject();
pScene->GenerateR3SObject();
m_PickObjectScene=NULL;
}
}
return;
}
if(m_PickLightScene)
{
if(m_PickHouseScene==NULL)
return;
int HouseSceneID=m_PickHouseScene->m_HouseSceneID;
m_MapStorage.DelInHouseLight(m_PickHouseScene->m_strOutName,
m_PickHouseScene->m_strMedName,
m_PickHouseScene->m_strInName,
m_PickLightScene->m_LightID);
for(int i=0;i<m_PickHouseScene->m_HouseObject->m_LightList.num;i++)
{
if( m_PickHouseScene->m_HouseObject->m_LightList[i]->m_LightID==
m_PickLightScene->m_LightID )
{
delete m_PickHouseScene->m_HouseObject->m_LightList[i];
m_PickHouseScene->m_HouseObject->m_LightList.DelIndex(i);
}
}
m_PickLightScene=NULL;
/*
int delindexx=m_PickHouseScene->m_AccumulateTM._41/SECTORSIZE;
int delindexy=m_PickHouseScene->m_AccumulateTM._43/SECTORSIZE;
int sectorindexx,sectorindexy;
for(int cSector=0;cSector<LSIZEX*LSIZEY;cSector++)
{
sectorindexx=m_HeightField.m_SectorScene[cSector].m_AccumulateTM._41/SECTORSIZE;
sectorindexy=m_HeightField.m_SectorScene[cSector].m_AccumulateTM._43/SECTORSIZE;
if( delindexx == sectorindexx && delindexy == sectorindexy)
{
m_HeightField.m_SectorScene[cSector].GenerateHouseObject();
for(int cHouse=0;cHouse<m_HeightField.m_SectorScene[cSector].m_HouseObjectNode.num;cHouse++)
{
if(HouseSceneID==m_HeightField.m_SectorScene[cSector].m_HouseObjectNode[cHouse]->m_HouseSceneID)
{
m_PickHouseScene=m_HeightField.m_SectorScene[cSector].m_HouseObjectNode[cHouse];
}
}
}
}
*/
return;
}
if(m_PickHouseScene)
{
int delindexx=m_PickHouseScene->m_AccumulateTM._41/SECTORSIZE;
int delindexy=m_PickHouseScene->m_AccumulateTM._43/SECTORSIZE;
m_MapStorage.DelHouseMap(m_PickHouseScene->m_AccumulateTM._41,
m_PickHouseScene->m_AccumulateTM._42,
m_PickHouseScene->m_AccumulateTM._43,
m_PickHouseScene->m_HouseSceneID);
m_PickHouseScene=NULL;
int sectorindexx,sectorindexy;
for(int cSector=0;cSector<m_HeightField.GetLSizeX()*m_HeightField.GetLSizeY();cSector++)
{
sectorindexx=m_HeightField.m_SectorScene[cSector].m_AccumulateTM._41/SECTORSIZE;
sectorindexy=m_HeightField.m_SectorScene[cSector].m_AccumulateTM._43/SECTORSIZE;
if( delindexx == sectorindexx && delindexy == sectorindexy)
{
m_HeightField.m_SectorScene[cSector].GenerateHouseObject();
}
}
return;
}
}
CZ3DGeneralChrModel* CSceneManager::AddCharacter( const char* szGCMDSName, const char* szFaceType, const char* szHairStyle )
{
return m_CharacterManager.AddCharacter(szGCMDSName, szFaceType, szHairStyle);
}
void CSceneManager::Undo()
{
matrix matUndoData=m_matUndo;
MakeUndoData();
if(m_PickLightScene)
{
m_PickLightScene->m_TM=matUndoData;
CInHouseObjectMap *InHouseMap=m_MapStorage.FindInHouseMap(m_PickHouseScene->m_strOutName,
m_PickHouseScene->m_strMedName,
m_PickHouseScene->m_strInName,
m_PickHouseScene->m_strBSPName);
for(int cLight=0;cLight<InHouseMap->m_LightID.num;cLight++)
{
if(m_PickLightScene->m_LightID==InHouseMap->m_LightID[cLight])
{
InHouseMap->m_matLightList[cLight]=m_PickLightScene->m_TM;
}
}
return;
}
if(m_PickObjectScene)
{
if(m_PickHouseScene)
{
m_PickObjectScene->m_TM=matUndoData;
CInHouseObjectMap *InHouseMap=m_MapStorage.FindInHouseMap(m_PickHouseScene->m_strOutName,
m_PickHouseScene->m_strMedName,
m_PickHouseScene->m_strInName,
m_PickHouseScene->m_strBSPName);
for(int cObject=0;cObject<InHouseMap->m_ObjectID.num;cObject++)
{
if(m_PickObjectScene->m_ObjectID==InHouseMap->m_ObjectID[cObject])
{
InHouseMap->m_matObjectList[cObject]=m_PickObjectScene->m_TM;
}
}
return;
}
else
{
m_PickObjectScene->m_TM=matUndoData;
CSectorMeshMap *pMapMesh=m_MapStorage.FindMeshMap(m_PickObjectScene->m_TM._41,m_PickObjectScene->m_TM._43);
if(pMapMesh==NULL)
return;
for(int cObject=0;cObject<pMapMesh->m_ObjectSceneID.num;cObject++)
{
if(pMapMesh->m_ObjectSceneID[cObject]==m_PickObjectScene->m_ObjectID)
{
pMapMesh->m_TM[cObject]=m_PickObjectScene->m_TM;
}
}
m_PickObjectScene->m_AccumulateTM=m_PickObjectScene->m_TM;
return;
}
}
if(m_PickHouseScene)
{
CSectorHouseMap *SectorHouseMap=m_MapStorage.FindHouseMap(m_PickHouseScene->m_AccumulateTM._41,
m_PickHouseScene->m_AccumulateTM._43);
m_PickHouseScene->m_AccumulateTM=matUndoData;
for(int cObject=0;cObject<SectorHouseMap->m_TM.num;cObject++)
{
if( SectorHouseMap->m_HouseSceneID[cObject] == m_PickHouseScene->m_HouseSceneID )
{
SectorHouseMap->m_TM[cObject]=matUndoData;
}
}
}
}
void CSceneManager::MakeUndoData()
{
if(m_PickLightScene)
{
m_matUndo=m_PickLightScene->m_TM;
}
if(m_PickObjectScene)
{
m_matUndo=m_PickObjectScene->m_TM;
}
if(m_PickHouseScene && m_PickLightScene==NULL && m_PickObjectScene==NULL)
{
m_matUndo=m_PickHouseScene->m_AccumulateTM;
}
}
void CSceneManager::Create(CInitValue initValue,char *strPath)
{
/*
CRenderOption::m_GrassRendering=1;
CRenderOption::m_GrassAnimationUseVertexShader=1;
CRenderOption::m_GrassRenderRange=9;
CRenderOption::m_RangeGrassRender=0
CRenderOption::m_FullSceneGlare=1;
CRenderOption::m_FullSceneAnti=0;
CRenderOption::m_FullSceneSpecularGlare=1;
CRenderOption::m_WaterBumpEnvRendering=1;
CRenderOption::m_TerrainMultiDetalTexture=1;
CRenderOption::m_TerrainRange=7;
CRenderOption::m_BuildingLightmap=1;
CRenderOption::m_TreeAnimation=1;
CRenderOption::m_CharacterPerPixelLighting=1;
CRenderOption::m_CharacterPerPixelSpecularLighting=1;
CRenderOption::m_CharacterSelfShadow=1;
CRenderOption::m_DepthOfField=0;
CRenderOption::m_CharacterProjectShadowTerrain=1;
CRenderOption::m_CharacterProjectShadowBuilding=1;
CRenderOption::m_ObjectLOD=4;
CRenderOption::m_TextureMethod=1;
CRenderOption::m_strBaseGraphicsDataPath[256];
CRenderOption::m_ObjectProjectShadow=1;
CRenderOption::m_TreeProjectShadow=1;
CRenderOption::m_AllObjectBump=1;
*/
CRenderOption::m_AllObjectBump=0;
CRenderOption::m_ObjectProjectShadow=0;
CRenderOption::m_TreeProjectShadow=0;
m_bEditor=false;
/*
m_DetailCharShadow=initValue.m_CharShadow;
m_DetailMapShadow=initValue.m_MapShadow;
m_DetailBuildShadow=initValue.m_BuildShadow;
m_DetailTerrain=initValue.m_TerrainDetail;
m_DetailChrMesh=initValue.m_CharDetail;
m_DetailViewRange=initValue.m_ViewRange;
m_DetailWaterReflection=initValue.m_WaterReflection;
m_DetailLensflare=initValue.m_Lensflare;
m_DetailTreeDetail=initValue.m_TreeDetail;
*/
DETAILGROUND=25;
switch(CRenderOption::m_ObjectLOD)
{
case 0:
MAX_HOUSEVIEWRANGE=16000.0f;
MAX_HOUSEDISAPPER=MAX_HOUSEVIEWRANGE-1000.0f;
MAX_OUTVIEWRANGE=15000.0f;
MAX_MEDVIEWRANGE=15000.0f;
MAX_INVIEWRANGE=3000.0f;
MAX_OBJECTVIEWRANBE=5000.0f;
MAX_OBJECTDISAPPER=MAX_OBJECTVIEWRANBE-400.0f;
LENS_REALPOLYTREE=5000.0f;
break;
case 1:
MAX_HOUSEVIEWRANGE=30000.0f;
MAX_HOUSEDISAPPER=MAX_HOUSEVIEWRANGE-2000.0f;
MAX_OUTVIEWRANGE=15000.0f;
MAX_MEDVIEWRANGE=15000.0f;
MAX_INVIEWRANGE=3000.0f;
MAX_OBJECTVIEWRANBE=5000.0f;
MAX_OBJECTDISAPPER=MAX_OBJECTVIEWRANBE-1000.0f;
LENS_REALPOLYTREE=8000.0f;
break;
case 2:
MAX_HOUSEVIEWRANGE=60000.0f;
MAX_HOUSEDISAPPER=MAX_HOUSEVIEWRANGE-3000.0f;
MAX_OUTVIEWRANGE=15000.0f;
MAX_MEDVIEWRANGE=15000.0f;
MAX_INVIEWRANGE=3000.0f;
MAX_OBJECTVIEWRANBE=5000.0f;
MAX_OBJECTDISAPPER=MAX_OBJECTVIEWRANBE-1000.0f;
LENS_REALPOLYTREE=10000.0f;
break;
case 3:
MAX_HOUSEVIEWRANGE=80000.0f;
MAX_HOUSEDISAPPER=MAX_HOUSEVIEWRANGE-4000.0f;
MAX_OUTVIEWRANGE=15000.0f;
MAX_MEDVIEWRANGE=15000.0f;
MAX_INVIEWRANGE=3000.0f;
MAX_OBJECTVIEWRANBE=10000.0f;
MAX_OBJECTDISAPPER=MAX_OBJECTVIEWRANBE-1000.0f;
LENS_REALPOLYTREE=12000.0f;
break;
}
//LogMessage(strPath);
/*
char strNsTexturePath[256];
sprintf(strNsTexturePath,"%s\\Texture\\Interface\\",strPath);
CTexture::SetPath(strNsTexturePath);
*/
if(CRenderOption::m_FullSceneGlare)
{
m_LightEffectManager.Create(m_ScreenSize);
}
CSceneStateMgr::_Init();
SetSceneManagerPath(strPath);
SHADOWSIZE=256;
//LogMessage("Perlin Noise Create");
CPerlinNoise::Init();
//LogMessage("HeightField Create");
//m_HeightField.Create(7,7,&m_MapStorage);
m_HeightField.Create(CRenderOption::m_TerrainRange,CRenderOption::m_TerrainRange,&m_MapStorage);
//LogMessage("WeatherManager Create");
m_CollisionDetection.m_HeightField=&m_HeightField;
//LogMessage("CharacterMan2ger Create");
m_InstanceObjectManager.Create(m_pd3dDevice);
m_WeatherManager.Load();
///////
char strTableName[256] = {0,};
char strBuffer[256] = {0,};
char *strPtr = NULL;
strcpy(strTableName,WEATHERPATH);
strPtr = strrchr(strTableName,'.');
strPtr++;
(*strPtr) = 't';
strPtr++;
(*strPtr) = 'a';
strPtr++;
(*strPtr) = 'b';
strPtr++;
(*strPtr) = 'l';
strPtr++;
(*strPtr) = 'e';
strPtr++;
(*strPtr) = 0;
FILE *fp = fopen(strTableName,"rt");
if(fp)
{
int *iPtr;
int iPtrNum;
char *str;
fgets(strBuffer,256,fp);
iPtrNum = atoi(strBuffer);
iPtr = new int[iPtrNum];
memset(strBuffer,0,sizeof(char) * 256);
fgets(strBuffer,256,fp);
int iNum;
for(iNum = 0; iNum < iPtrNum; iNum++)
{
if(iNum == 0)
str = strtok(strBuffer," \n");
else
str = strtok(NULL," \n");
iPtr[iNum] = atoi(str);
}
fclose(fp);
m_WeatherManager.LoadSubTable(iPtr,iPtrNum);
delete[] iPtr;
}
////////
m_MapStorage.SetLoadMode(1);
m_EffectManager.SetDevice(m_pd3dDevice);
//////
//CParticle::SetMatPosition(&m_ViewCamera->m_matPosition);
//SetSceneManagerPath("c:\\MP-Project");
strcpy(CRenderOption::m_strBaseGraphicsDataPath,"Zone1");
///strcpy(CRenderOption::m_strBaseGraphicsDataPath,"");
BaseGraphicsDataLoad(CRenderOption::m_strBaseGraphicsDataPath);
m_WeatherManager.Create();
m_CharacterManager.Create();
m_CharacterManager.SetHeightField(&m_HeightField);
///////////////////ũ<><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
if(m_bSnowFall) {
D3DXMATRIX tmpview;
m_pd3dDevice->GetTransform(D3DTS_VIEW,&tmpview);
D3DXMatrixInverse(&tmpview,NULL,&tmpview);
vector3 tmppos;
tmppos.x = tmpview._41;
tmppos.y = tmpview._42;
tmppos.z = tmpview._43;
/*m_SnowFall.SetWorldValue(0.0f,-2.0f,0.0f,8.0f,-3.0f,8.0f,"snow.dds");
//m_SnowFall.Init(GetDevice(),300,tmppos.x,tmppos.y,tmppos.z,800.0f,800.0f,tmppos.y + 100.0f);
m_SnowFall.Init(GetDevice(),500,tmppos.x,tmppos.y,tmppos.z,800.0f,800.0f,tmppos.y + 2000.0f);
*/
m_SnowFall.SetWorldValue(0.0f,-2.0f,0.0f,1.0f,-0.5f,1.0f,"snow.dds");
//m_SnowFall.Init(GetDevice(),300,tmppos.x,tmppos.y,tmppos.z,800.0f,800.0f,tmppos.y + 100.0f);
m_SnowFall.Init(GetDevice(),100,tmppos.x,tmppos.y,tmppos.z,800.0f,800.0f,tmppos.y + 2000.0f);
}
//////////////////
/**/
if(m_pWaterTexGenerator == NULL) {
m_pWaterTexGenerator = new WBWaterNormalTexGenerator;
m_pWaterTexGenerator->Init(GetDevice(),128,128,"Displacement.dds");
}
if(m_pEnvPlaneTex != NULL)
delete m_pEnvPlaneTex;
m_pEnvPlaneTex = new WBEnvPlaneTex;
m_pEnvPlaneTex->Init(GetDevice(),256,256);
if(m_pBlackGlare != NULL)
delete m_pBlackGlare;
m_pBlackGlare = new CTexture;
CTexture::SetPath(EFFECTTEXTUREPATH);
m_pBlackGlare->Load("spec_black.dds");
/* if(m_pEsfCasher)
delete m_pEsfCasher;
m_pEsfCasher = new CEffectCasher;
m_pEsfCasher->BuildHashTable(EFFECTSCRIPTPATH);
*/
if(CRenderOption::m_bRain) {
m_pRainParticle = new CRainParticle;
m_pRainParticle->Init(1000,"RainPar.dds");
m_pRainParticle->SetMaxLife(75.0f);
m_pRainParticle->SetColor(1.0f,1.0f,1.0f,1.0f,1.0f,1.0f);
m_pRainParticle->SetVisible(1.0f,0.3f);
m_pRainParticle->SetSize(0.1f,2.5f,0.1f,2.5f);
m_pRainParticle->SetBaseMass(1.25f);
m_pRainParticle->SetFraction(0.0f);
m_pRainParticle->SetGravity( 0.0f, 0.0001f, 0.0f );
m_pRainParticle->Explode(0.12f, 777 );
}
}
/*
CParticleSequence * CSceneManager::AddParticle(vector3 vecPos,vector3 vecTarget)
{
return m_ParticleManager.AddParticle(SMOKE_PARTICLE,vecPos,vecTarget);
//return m_Particle.
}
*/
void CSceneManager::DeleteCharacter(CZ3DGeneralChrModel *pDelChr)
{
m_CharacterManager.DeleteCharacter(pDelChr);
}
int CSceneManager::AddInstanceObject(char *strObjectName, vector3 vecPos)
{
return m_InstanceObjectManager.AddInstanceObject(strObjectName,vecPos);
}
void CSceneManager::DeleteInstanceObject(int InstanceObjectID)
{
m_InstanceObjectManager.DeleteInstanceObject(InstanceObjectID);
}
int CSceneManager::MouseOnCheckInstanceObject(int px, int py)
{
return m_InstanceObjectManager.MouseOnCheckInstanceObject(px,py);
}
void CSceneManager::SetIntanceObjectColor(int ID,color Color)
{
m_InstanceObjectManager.SetInstanceObjectColor(ID,Color);
}
void CSceneManager::SetAllInstanceObjectColor(color Color)
{
m_InstanceObjectManager.SetAllObjectColor(Color);
}
void CSceneManager::PickMakeRay(int dx, int dy,int ScreenX,int ScreenY)
{
matrix matProj,matView,matInv;
m_pd3dDevice->GetTransform(D3DTS_PROJECTION,matProj);
m_pd3dDevice->GetTransform(D3DTS_VIEW,matView);
vector3 v;
v.x= ( ( (2.0f*dx) / ScreenX) -1 ) / matProj._11;
v.y=-( ( (2.0f*dy) / ScreenY) -1 ) / matProj._22;
v.z= 1.0f;
matInv.Inverse(matView);
m_vecPickRayStart.x=matInv._41;
m_vecPickRayStart.y=matInv._42;
m_vecPickRayStart.z=matInv._43;
m_vecPickRayDir.x=v.x*matInv._11 + v.y*matInv._21 + v.z*matInv._31;
m_vecPickRayDir.y=v.x*matInv._12 + v.y*matInv._22 + v.z*matInv._32;
m_vecPickRayDir.z=v.x*matInv._13 + v.y*matInv._23 + v.z*matInv._33;
}
CSectorScene* CSceneManager::PickTerrain()
{
m_vecPickRayStart;
m_vecPickRayDir;
float fIntersection;
int ix,iy;
for(ix=0;ix<m_HeightField.GetLSizeX();ix++)
{
for(iy=0;iy<m_HeightField.GetLSizeY();iy++)
{
vector3 vecSectorPoly[3];
vecSectorPoly[0].x=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._41;
vecSectorPoly[0].z=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._43;
vecSectorPoly[0].y=0.0f;
vecSectorPoly[1].x=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._41+SECTORSIZE;
vecSectorPoly[1].z=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._43;
vecSectorPoly[1].y=0.0f;
vecSectorPoly[2].x=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._41;
vecSectorPoly[2].z=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._43+SECTORSIZE;
vecSectorPoly[2].y=0.0f;
if(CIntersection::PolygonRay(m_vecPickRayStart,m_vecPickRayStart+m_vecPickRayDir*100000.0f,vecSectorPoly,fIntersection)==1)
{
return &m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()];
}
vecSectorPoly[0].x=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._41+SECTORSIZE;
vecSectorPoly[0].z=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._43;
vecSectorPoly[0].y=0.0f;
vecSectorPoly[1].x=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._41;
vecSectorPoly[1].z=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._43+SECTORSIZE;
vecSectorPoly[1].y=0.0f;
vecSectorPoly[2].x=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._41+SECTORSIZE;
vecSectorPoly[2].z=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._43+SECTORSIZE;
vecSectorPoly[2].y=0.0f;
if(CIntersection::PolygonRay(m_vecPickRayStart,m_vecPickRayStart+m_vecPickRayDir*100000.0f,vecSectorPoly,fIntersection)==1)
{
return &m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()];
}
}
}
return NULL;
/*
int ix,iy;
for(ix=0;ix<LSIZEX;ix++)
{
for(iy=0;iy<LSIZEY;iy++)
{
if( m_HeightField.m_SectorScene[ix+iy*LSIZEX].m_AccumulateTM._41 <= fXp &&
m_HeightField.m_SectorScene[ix+iy*LSIZEX].m_AccumulateTM._41 + SECTORSIZE > fXp &&
m_HeightField.m_SectorScene[ix+iy*LSIZEX].m_AccumulateTM._43 <= fZp &&
m_HeightField.m_SectorScene[ix+iy*LSIZEX].m_AccumulateTM._43 + SECTORSIZE > fZp)
{
return &m_HeightField.m_SectorScene[ix+iy*LSIZEX];
}
}
}
*/
//m_vecPickRayStart=;
//m_vecPickRayEnd=;
}
int CSceneManager::GetCharacterCount()
{
//return m_CharacterManager.m_CharacterScreenPositionList.num;
return m_CharacterManager.m_CharacterList.num;
}
POINT CSceneManager::GetChacterScreenPos(int nCount)
{
//return m_CharacterManager.m_CharacterScreenPositionList[nCount];
return m_CharacterManager.m_CharacterList[nCount].m_ptScreenPosition;
}
vector3 CSceneManager::GetCharacterPos(int nCount)
{
vector3 vecPos;
m_CharacterManager.m_CharacterList[nCount].m_pChrmodel->GetPosition(vecPos.x,vecPos.y,vecPos.z);
return vecPos;
}
vector3 CSceneManager::PickPointTerrain()
{
CSectorScene *pSelectSector=PickTerrain();
if(pSelectSector==NULL)
return vector3(0.0f,0.0f,0.0f);
SectorVertex *pEditSectorVertex;
pSelectSector->m_pROAMVertex->Lock(0,0,(BYTE**)&pEditSectorVertex,0);
vector3 vecTerrainPos,vecLens;
vector3 vecMousePos;
vector3 vecStart=m_vecPickRayStart;
vector3 vecDir=m_vecPickRayDir;
float fIntersection;
vector3 vecIntersectionPoint;
vecIntersectionPoint.x=-1.0f;
vector3 vecCollisionVertex[3];
matrix matTerrainTM,matTM;
matTerrainTM=pSelectSector->m_AccumulateTM;
matTM.Translation(vecStart);
matTerrainTM.Inverse(matTerrainTM);
matTM=matTM*matTerrainTM;
vecStart=matTM.GetLoc();
float fLens=100000000.0f;
bool bFound=false;
for(int cIndices=0;cIndices<pSelectSector->m_UsedIndices/3;cIndices++)
{
vecCollisionVertex[0]=pSelectSector->m_pDrawVertex[pSelectSector->m_pDrawIndices[cIndices*3+0]].v;
vecCollisionVertex[1]=pSelectSector->m_pDrawVertex[pSelectSector->m_pDrawIndices[cIndices*3+1]].v;
vecCollisionVertex[2]=pSelectSector->m_pDrawVertex[pSelectSector->m_pDrawIndices[cIndices*3+2]].v;
if(CIntersection::PolygonRay(vecStart,vecStart+100000.0f*vecDir,vecCollisionVertex,fIntersection)==1)
{
if(fLens>fIntersection)
{
vecIntersectionPoint=vecStart+vecDir*fIntersection;
fLens=fIntersection;
bFound=true;
}
}
}
vecIntersectionPoint.x+=pSelectSector->m_AccumulateTM._41;
vecIntersectionPoint.z+=pSelectSector->m_AccumulateTM._43;
pSelectSector->m_pROAMVertex->Unlock();
if(!bFound)
return vector3(0.0f,0.0f,0.0f);
return vecIntersectionPoint;
}
void CSceneManager::CharacterSoundPlay(CZ3DGeneralChrModel *pChrmodel, char *strSoundFile)
{
m_CharacterManager.CharacterSoundPlay(pChrmodel,strSoundFile);
}
void CSceneManager::CharacterHeightFix()
{
m_CharacterManager.HeightFiledOnChrFixPos();
}
void CSceneManager::LoadMap(char *strFilename)
{
//m_MapStorage.Load(strFilename);
//m_MapStorage.Load(strFilename);
m_MapStorage.Load(strFilename);
m_HeightField.m_NowPositionX=-100000000;
m_HeightField.m_NowPositionY=-100000000;
m_HeightField.m_NowTessellatePosX=-100000000;
m_HeightField.m_NowTessellatePosY=-100000000;
}
void CSceneManager::AllObjectCalcLens()
{
m_HeightField.AllObjectCalcLens();
}
int CSceneManager::GetCharacterEvent(CZ3DGeneralChrModel *pChrmodel,DWORD Event)
{
return m_CharacterManager.GetCharacterEvent(pChrmodel,Event);
}
void CSceneManager::AddDelayTimer(CZ3DGeneralChrModel *pChr, int nDelay)
{
m_CharacterManager.AddDelayTimer(pChr,nDelay);
}
void CSceneManager::AddChrLight(CZ3DGeneralChrModel *pChrmodel,vector3 vecPos, DWORD dwColor, float fLens, DWORD dwTime)
{
m_CharacterManager.AddChrLight(pChrmodel,vecPos,dwColor,fLens,dwTime);
}
void CSceneManager::PickingObjectReload()
{
if(m_PickHouseScene && m_PickObjectScene==NULL)
{
if(m_PickHouseScene->m_HouseObject->m_pOutHouseObject)
MeshObjectReload(m_PickHouseScene->m_HouseObject->m_pOutHouseObject);
if(m_PickHouseScene->m_HouseObject->m_pLodHouseObject)
MeshObjectReload(m_PickHouseScene->m_HouseObject->m_pLodHouseObject);
if(m_PickHouseScene->m_HouseObject->m_pMedHouseObject)
MeshObjectReload(m_PickHouseScene->m_HouseObject->m_pMedHouseObject);
if(m_PickHouseScene->m_HouseObject->m_pInHouseObject)
MeshObjectReload(m_PickHouseScene->m_HouseObject->m_pInHouseObject);
}
else if(m_PickObjectScene)
{
MeshObjectReload(m_PickObjectScene->m_pObject);
}
//CSceneManager::m_PickObjectScene;
}
void CSceneManager::MeshObjectReload(CMeshObject *pMesh)
{
CTexture::SetPath(OBJECTTEXTUREPATH);
char strReload[256];
for(int i=0;i<pMesh->m_pMat.num;i++)
{
if(strstr(pMesh->m_pMat[i]->m_strName,"_Reload")==NULL)
{
sprintf(strReload,"%s%s",pMesh->m_pMat[i]->m_strName," _Reload");
strcpy(pMesh->m_pMat[i]->m_strName,strReload);
}
else
{
pMesh->m_pMat[i]->m_pddTexture->Release();
}
sscanf(pMesh->m_pMat[i]->m_strName,"%s _Reload",strReload);
strcpy(pMesh->m_pMat[i]->m_strName,strReload);
pMesh->m_pMat[i]->ReadDDSTexture(pMesh->m_pMat[i]->m_pddTexture,1);
sprintf(strReload,"%s%s",pMesh->m_pMat[i]->m_strName," _Reload");
strcpy(pMesh->m_pMat[i]->m_strName,strReload);
}
pMesh->MeshReload();
}
void CSceneManager::DeleteAllEffect(){
m_EffectManager.DeleteAllEffect();
m_EffectManager.DeleteAllWorldScript();
}
void CSceneManager::DeleteAllWorldEffect() {
m_EffectManager.DeleteAllWorldScript();
}
XEFFECT CSceneManager::AddEffect(CX3DEffect *lpNewEffect)
{
m_EffectNum++;
lpNewEffect->SetEffectStart(true);
return m_EffectManager.AddEffect(lpNewEffect);
}
CEffScript *CSceneManager:: AddEffectScript (CEffScript *lpnewScript) {
return m_EffectManager.AddEffScript(lpnewScript);
}
void CSceneManager:: AddInterfaceScript (CEffScript *lpnewScript) {
m_EffectManager.AddInterfaceScript(lpnewScript);
}
void CSceneManager:: AddWorldEffect(CEffScript *lpnewScript) {
m_EffectManager.AddWorldEffScript(lpnewScript);
}
void CSceneManager::DeleteEffect(XEFFECT hEffect)
{
m_EffectNum--;
m_EffectManager.DeleteEffect(hEffect);
}
BOOL CSceneManager::EffectIsLive(XEFFECT hEffect)
{
return m_EffectManager.IsLive(hEffect);
}
void CSceneManager::DeleteEffect(CX3DEffect *del)
{
for(int i=0;i<m_EffectNum;i++) {
if(m_EffectManager.m_lstEffect[i] == del) {
DeleteEffect(i);
m_EffectNum--;
break;
}
}
}
void CSceneManager::UnPicking()
{
m_PickEffect = NULL;
m_PickHouseScene=NULL;
m_PickLightScene=NULL;
m_PickObjectScene=NULL;
m_pPickSector = NULL;
}
void CSceneManager::UnPickEffect() {
if(m_PickEffect) {
m_PickEffect->pick_index = -1;
m_PickEffect = NULL;
}
}
void CSceneManager::PickEffect(float fMx,float fMy,float fMz) {
vector3 vecPos;
float length = 0.0f;
float line_length = 0.0f;
float min = 0.0f;
float pick_range = 50.0f;
float e_dot = 0.0f;
int min_index = -1;
vector3 tmp;
// <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
vector3 e_Closet;
vector3 e_RayStart = m_vecPickRayStart;
vector3 e_RayEnd = e_RayStart + m_vecPickRayDir * pick_range;
vector3 e_vector1,e_vector2,e_vector3;
vector3 test_vector;
m_PickEffect = m_MapStorage.FindEffectMap(fMx,fMz);
if(m_PickEffect) {
for(int i= 0 ;i<m_PickEffect->m_vecEffectPos.num;i++) {
tmp = m_PickEffect->m_vecEffectPos[i];
e_vector1 = tmp - e_RayStart;
e_vector2 = e_RayEnd - e_RayStart;
line_length = e_vector2.GetLens();
e_vector2.Normalize();
e_dot = e_vector1 * e_vector2;
if(e_dot <=0)
e_Closet = e_RayStart;
else if(e_dot >= line_length)
e_Closet = e_RayEnd;
// <20>Ÿ<EFBFBD>
else {
e_vector3 = e_vector2 * e_dot;
e_Closet = e_vector1 + e_vector3;
}
//<2F><><EFBFBD>̿<EFBFBD><CCBF><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> vector
test_vector = tmp - e_Closet;
length = test_vector.GetLens();
if(i == 0) {
min = length;
min_index = i;
}
else if(min >= length) {
min_index = i;
min = length;
}
}//for
if(min_index >=0) {
m_PickEffect->pick_index = min_index;
}
}
// vecPos.x = fMx;
// vecPos.y = fMy;
// vecPos.z = fMz;
/*
if(m_PickEffect) {
for(int i= 0 ;i<m_PickEffect->m_vecEffectPos.num;i++) {
tmp = vecPos - m_PickEffect->m_vecEffectPos[i];
length = tmp.GetLens();
if(i == 0)
min = length;
if(min >= length)
min_index = i;
}//for
}
if(min_index >=0) {
m_PickEffect->pick_index = min_index;
}
*/
}
void CSceneManager::PickLandscapeEffect(float fPx,float fPy,float fPz,int PickMode)
{
vector3 vecPos;
vecPos.x = fPx;
vecPos.y = fPy;
vecPos.z = fPz;
if(PickMode == 0) { // vfog
float length = 0.0f;
float min = 0.0f;
int min_index = -1;
vector3 tmp;
m_PickLandscape = m_MapStorage.FindLandscapeEffect(fPx,fPz);
if(m_PickLandscape) {
for(int i = 0;i<m_PickLandscape->m_LandscapeEffect.num;i++) {
tmp = vecPos - m_PickLandscape->m_LandscapeEffect[i].m_vecCenterPos;
m_PickLandscape->m_LandscapeEffect[i].m_IntParam[1] = false;
length = tmp.GetLens();
if(i == 0)
min = length;
if(min >= length)
min_index = i;
}
}
if(min_index>=0) { // find closet landeffect
m_PickLandscape->m_LandscapeEffect[min_index].m_IntParam[1] = true;
}
}
else if(PickMode == 1) {// boid
float length = 0.0f;
float min = 0.0f;
int min_index = -1;
vector3 tmp;
m_PickLandscape = m_MapStorage.FindLandscapeEffect(fPx,fPz);
if(m_PickLandscape) {
for(int i = 0;i<m_PickLandscape->m_LandscapeEffect.num;i++) {
tmp = vecPos - m_PickLandscape->m_LandscapeEffect[i].m_vecCenterPos;
m_PickLandscape->m_LandscapeEffect[i].m_IntParam[1] = false;
length = tmp.GetLens();
if(i == 0)
min = length;
if(min >= length)
min_index = i;
}
}
if(min_index>=0) { // find closet landeffect
m_PickLandscape->m_LandscapeEffect[min_index].m_IntParam[1] = true;
}
}
else if(PickMode == 2) { //mesh
float length = 0.0f;
float min = 0.0f;
int min_index = -1;
vector3 tmp;
m_PickLandscape = m_MapStorage.FindLandscapeEffect(fPx,fPz);
if(m_PickLandscape) {
for(int i = 0;i<m_PickLandscape->m_LandscapeEffect.num;i++) {
tmp = vecPos - m_PickLandscape->m_LandscapeEffect[i].m_vecCenterPos;
m_PickLandscape->m_LandscapeEffect[i].m_IntParam[2] = false;
length = tmp.GetLens();
if(i == 0)
min = length;
if(min >= length)
min_index = i;
}
}
if(min_index>=0) { // find closet landeffect
m_PickLandscape->m_LandscapeEffect[min_index].m_IntParam[2] = true;
}
}
else if(PickMode == 3) {// wave
float length = 0.0f;
float min = 0.0f;
int min_index = -1;
vector3 tmp;
m_PickLandscape = m_MapStorage.FindLandscapeEffect(fPx,fPz);
if(m_PickLandscape) {
for(int i = 0;i<m_PickLandscape->m_LandscapeEffect.num;i++) {
tmp = vecPos - m_PickLandscape->m_LandscapeEffect[i].m_vecCenterPos;
m_PickLandscape->m_LandscapeEffect[i].m_IntParam[0] = false;
length = tmp.GetLens();
if(i == 0)
min = length;
if(min >= length)
min_index = i;
}
}
if(min_index>=0) { // find closet landeffect
m_PickLandscape->m_LandscapeEffect[min_index].m_IntParam[0] = true;
}
}
}
void CSceneManager::DeletePickingLandscapeEffect() {
CSectorScene *pSector;
if(m_PickLandscape != NULL) {
for(int i = 0;i<m_PickLandscape->m_LandscapeEffect.num;i++) {
if(m_PickLandscape->m_LandscapeEffect[i].m_nEffectMethod == 1) {
// vol-fog
if(m_PickLandscape->m_LandscapeEffect[i].m_IntParam[1] == 1) {
m_PickLandscape->m_LandscapeEffect.DelIndex(i);
break;
}
}
else if(m_PickLandscape->m_LandscapeEffect[i].m_nEffectMethod == 2) {
// boid
if(m_PickLandscape->m_LandscapeEffect[i].m_IntParam[1] == 1) {
m_PickLandscape->m_LandscapeEffect.DelIndex(i);
break;
}
}
else if(m_PickLandscape->m_LandscapeEffect[i].m_nEffectMethod == 3) {
//mesh ani
if(m_PickLandscape->m_LandscapeEffect[i].m_IntParam[2] == 1) {
m_PickLandscape->m_LandscapeEffect.DelIndex(i);
break;
}
}
else if(m_PickLandscape->m_LandscapeEffect[i].m_nEffectMethod == 4) {
// wave
if(m_PickLandscape->m_LandscapeEffect[i].m_IntParam[0] == 1) {
m_PickLandscape->m_LandscapeEffect.DelIndex(i);
break;
}
}
}
if(m_PickLandscape->m_LandscapeEffect.num== 0) {
m_MapStorage.DeleteLandscapeEffect(m_PickLandscape);
}
m_PickLandscape = NULL;
pSector=PickTerrain();
pSector->GenerateLandscapeEffect();
}
}
void CSceneManager::DeletePickEffect() {
CSectorScene *pSector;
vector3 *pvecPos = GetCamera()->GetPosition();
vector3 vecPos = (*pvecPos);
pSector=PickTerrain(vecPos.x,vecPos.y,vecPos.z);
if(m_PickEffect != NULL) {
m_PickEffect->m_vecEffectPos.DelIndex(m_PickEffect->pick_index);
m_PickEffect->m_strEffectName.DelIndex(m_PickEffect->pick_index);
m_PickEffect->pick_index = -1;
m_PickEffect = NULL;
pSector->GenerateEffect();
}
}
vector3 CSceneManager::GetPickBspCenter()
{
if(m_RBspSceneManager.m_pCurrentBspScene != NULL)
{
return (m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos);
}
return vector3(0.0f,0.0f,0.0f);
}
void CSceneManager::UnPickRBspScene()
{
m_PickObjectScene = NULL;
if(m_RBspSceneManager.m_pCurrentBspScene != NULL)
{
RBspScene *pScene = m_RBspSceneManager.m_pCurrentBspScene;
int i;
for( i = 0; i < pScene->m_iLeafsNum; i++)
{
pScene->m_pLeafExs[i].UnPickEventEffect();
pScene->m_pLeafExs[i].UnPickEventObject();
pScene->m_pLeafExs[i].UnPickEventSound();
pScene->m_pLeafExs[i].UnPickLight();
pScene->m_pLeafExs[i].UnPickTrigger();
pScene->m_pLeafExs[i].UnPickR3SObject();
}
}
}
void CSceneManager::PickRBspObject(float x,float y,float z,int iPickValue)
{
if(m_RBspSceneManager.m_pCurrentBspScene != NULL)
{
D3DXVECTOR3 vecPos = D3DXVECTOR3(x,y,z);
/*
D3DXVECTOR3 vecLocal = vecPos;
D3DXMATRIX matTmp;
D3DXMATRIX matInv;
D3DXMatrixIdentity(&matTmp);
matTmp._41 = CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.x;
matTmp._42 = CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.y;
matTmp._43 = CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.z;
D3DXMatrixInverse(&matInv,NULL,&matTmp);
D3DXMatrixIdentity(&matTmp);
matTmp._41 = vecLocal.x;
matTmp._42 = vecLocal.y;
matTmp._43 = vecLocal.z;
D3DXMatrixMultiply(&matTmp,&matTmp,&matInv);
vecLocal.x = matTmp._41;
vecLocal.y = matTmp._42;
vecLocal.z = matTmp._43;
int iLeaf = m_RBspSceneManager.m_pCurrentBspScene->FindLeafNode(vecLocal);
*/
int iLeaf = m_RBspSceneManager.m_pCurrentBspScene->m_iRBspLeafIndex;
int i;
int iPickIndex = -1;
float fPickLength = 0.0f;
RBspScene::RBspLeafEx *pLeaf = &(m_RBspSceneManager.m_pCurrentBspScene->m_pLeafExs[iLeaf]);
if(iPickValue == 0) // Object
{
for( i= 0; i < pLeaf->m_iEventNum[0]; i++)
{
D3DXVECTOR3 vecTmp;
float fTmp;
vecTmp = (pLeaf->m_lstObject[i]->m_vecCenter) - vecPos;
fTmp = D3DXVec3Length(&vecTmp);
if( i == 0)
{
fPickLength = fTmp;
iPickIndex = i;
}
else if(fTmp < fPickLength)
{
fPickLength = fTmp;
iPickIndex = i;
}
}
pLeaf->m_pPickEventObject = pLeaf->m_lstObject[iPickIndex];
pLeaf->m_pPickEventEffect = NULL;
pLeaf->m_pPickEventSound = NULL;
pLeaf->m_pPickLight = NULL;
pLeaf->m_pPickTrigger = NULL;
}
else if(iPickValue == 1) // Effect
{
for( i= 0; i < pLeaf->m_iEventNum[1]; i++)
{
D3DXVECTOR3 vecTmp;
float fTmp;
vecTmp = (pLeaf->m_lstEffect[i]->m_vecCenter) - vecPos;
fTmp = D3DXVec3Length(&vecTmp);
if( i == 0)
{
fPickLength = fTmp;
iPickIndex = i;
}
else if(fTmp < fPickLength)
{
fPickLength = fTmp;
iPickIndex = i;
}
}
pLeaf->m_pPickEventEffect = pLeaf->m_lstEffect[iPickIndex];
pLeaf->m_pPickEventObject = NULL;
pLeaf->m_pPickLight = NULL;
pLeaf->m_pPickEventSound = NULL;
pLeaf->m_pPickTrigger = NULL;
}
else if(iPickValue == 2) // Light
{
for( i= 0; i < pLeaf->m_iLightNum; i++)
{
D3DXVECTOR3 vecTmp;
float fTmp;
vecTmp = (pLeaf->m_lstLight[i].m_vecLight) - vecPos;
fTmp = D3DXVec3Length(&vecTmp);
if( i == 0)
{
fPickLength = fTmp;
iPickIndex = i;
}
else if(fTmp < fPickLength)
{
fPickLength = fTmp;
iPickIndex = i;
}
}
pLeaf->m_pPickLight = &(pLeaf->m_lstLight[iPickIndex]);
pLeaf->m_pPickEventEffect = NULL;
pLeaf->m_pPickEventObject = NULL;
pLeaf->m_pPickEventSound = NULL;
pLeaf->m_pPickTrigger = NULL;
}
}
}
void CSceneManager::PickRBspObjectMove(float fMx,float fMy,float fMz,float fAngle,float fAddy,int iValue,int MoveMode)
{
if(m_RBspSceneManager.m_pCurrentBspScene != NULL)
{
int iLeaf = m_RBspSceneManager.m_pCurrentBspScene->m_iRBspLeafIndex;
RBspScene::RBspLeafEx *pLeaf = &(m_RBspSceneManager.m_pCurrentBspScene->m_pLeafExs[iLeaf]);
if(iValue == 0) // Object
{
RBspScene::RBspEventObject *pObject = pLeaf->m_pPickEventObject;
if(pObject != NULL) {
if(MoveMode == 0) {// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
pObject->m_vecCenter.x = fMx;
pObject->m_vecCenter.z = fMz;
}
else if(MoveMode == 1) {// y <20><> <20>̵<EFBFBD>
pObject->m_vecCenter.y += fAddy;
}
}
}
else if(iValue == 1) // Effect
{
RBspScene::RBspEventEffect *pEffect = pLeaf->m_pPickEventEffect;
if(pEffect != NULL) {
if(MoveMode == 0) {// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
pEffect->m_vecCenter.x = fMx;
pEffect->m_vecCenter.z = fMz;
}
else if(MoveMode == 1) {// y <20><> <20>̵<EFBFBD>
pEffect->m_vecCenter.y += fAddy;
}
}
}
else if(iValue == 2) // Light
{
RBspScene::RBspLight *pLight = pLeaf->m_pPickLight;
if(pLight != NULL) {
if(MoveMode == 0) {// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
pLight->m_vecLight.x = fMx;
pLight->m_vecLight.z = fMz;
}
else if(MoveMode == 1) {// y <20><> <20>̵<EFBFBD>
pLight->m_vecLight.y += fAddy;
}
}
}
}
}
// Bsp Scene Move
void CSceneManager::PickBspMove(float fMx,float fMy,float fMz,float fAngle,float fAddy,int MoveMode)
{
if(m_RBspSceneManager.m_pCurrentBspScene != NULL)
{
if(MoveMode == 0) {// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
float fx = fMx - m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.x;
float fz = fMz - m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.z;
m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.x = fMx;
m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.z = fMz;
m_RBspSceneManager.m_pCurrentBspScene->UpdateLeafBox(fx,0.0f,fz);
}
else if(MoveMode == 1) {// y <20><> <20>̵<EFBFBD>
m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.y+=fAddy;
m_RBspSceneManager.m_pCurrentBspScene->UpdateLeafBox(0.0f,fAddy,0.0f);
}
/* m_RBspSceneManager.m_pCurrentBspScene->SetZeroPosition(m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.x,
m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.y,
m_RBspSceneManager.m_pCurrentBspScene->m_vecZeroPos.z);
*/
}
else if(m_RBspSceneManager.m_iPickIndex != -1)
{
int iPick = m_RBspSceneManager.m_iPickIndex;
if(MoveMode == 0) {// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
float fx = fMx - m_RBspSceneManager.m_lstBspScene[iPick]->m_vecZeroPos.x;
float fz = fMz - m_RBspSceneManager.m_lstBspScene[iPick]->m_vecZeroPos.z;
m_RBspSceneManager.m_lstBspScene[iPick]->m_vecZeroPos.x = fMx;
m_RBspSceneManager.m_lstBspScene[iPick]->m_vecZeroPos.z = fMz;
m_RBspSceneManager.m_lstBspScene[iPick]->UpdateLeafBox(fx,0.0f,fz);
}
else if(MoveMode == 1) {// y <20><> <20>̵<EFBFBD>
m_RBspSceneManager.m_lstBspScene[iPick]->m_vecZeroPos.y += fAddy;
m_RBspSceneManager.m_lstBspScene[iPick]->UpdateLeafBox(0.0f,fAddy,0.0f);
}
/* m_RBspSceneManager.m_lstBspScene[iPick]->SetZeroPosition(m_RBspSceneManager.m_lstBspScene[iPick]->m_vecZeroPos.x,
m_RBspSceneManager.m_lstBspScene[iPick]->m_vecZeroPos.y,
m_RBspSceneManager.m_lstBspScene[iPick]->m_vecZeroPos.z,true);
*/
}
else
{
m_RBspSceneManager.m_lstBspScene[0]->SetZeroPosition(fMx,fMy,fMz);
}
}
void CSceneManager::PickEffectMove(float fMx,float fMy,float fMz,float fAngle,float fAddy,int MoveMode){
CSectorScene *pSector;
m_vecPickRayDir.x = 0.0f;
m_vecPickRayDir.y = -1.0f;
m_vecPickRayDir.z = 0.0f;
vector3 *pvecPos = GetCamera()->GetPosition();
vector3 vecPos = (*pvecPos);
pSector=PickTerrain(vecPos.x,vecPos.y,vecPos.z);
if(m_PickEffect) {
if(MoveMode == 0) {// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
m_PickEffect->m_vecEffectPos[m_PickEffect->pick_index].x = fMx;
//m_PickEffect->m_vecEffectPos.x = fMx;
m_PickEffect->m_vecEffectPos[m_PickEffect->pick_index].z = fMz;
}
else if(MoveMode == 1) {// y <20><> <20>̵<EFBFBD>
m_PickEffect->m_vecEffectPos[m_PickEffect->pick_index].y+=fAddy;
}
pSector->GenerateEffect();
}
}
void CSceneManager::PickEffectRot(float x,float y,float z,int MoveMode) {
static float xrot = 0.0f;
static float yrot = 0.0f;
static float zrot = 0.0f;
CSectorScene *pSector;
m_vecPickRayDir.x = 0.0f;
m_vecPickRayDir.y = -1.0f;
m_vecPickRayDir.z = 0.0f;
vector3 *pvecPos = GetCamera()->GetPosition();
vector3 vecPos = (*pvecPos);
pSector=PickTerrain(vecPos.x,vecPos.y,vecPos.z);
if(m_PickEffect) {
if(MoveMode == 0) {// x<><78> rot
m_PickEffect->m_vecEffectRot[m_PickEffect->pick_index].x +=x;
if(m_PickEffect->m_vecEffectRot[m_PickEffect->pick_index].x >= 360.0f) {
m_PickEffect->m_vecEffectRot[m_PickEffect->pick_index].x = m_PickEffect->m_vecEffectRot[m_PickEffect->pick_index].x - 360.0f;
}
}
else if(MoveMode == 1) {// y <20><> rot
m_PickEffect->m_vecEffectRot[m_PickEffect->pick_index].y +=y;
if(m_PickEffect->m_vecEffectRot[m_PickEffect->pick_index].y >= 360.0f) {
m_PickEffect->m_vecEffectRot[m_PickEffect->pick_index].y = m_PickEffect->m_vecEffectRot[m_PickEffect->pick_index].y - 360.0f;
}
}
else if(MoveMode == 2) { //z <20><> rot
m_PickEffect->m_vecEffectRot[m_PickEffect->pick_index].z +=z;
if(m_PickEffect->m_vecEffectRot[m_PickEffect->pick_index].z >= 360.0f) {
m_PickEffect->m_vecEffectRot[m_PickEffect->pick_index].z = m_PickEffect->m_vecEffectRot[m_PickEffect->pick_index].z - 360.0f;
}
}
pSector->GenerateEffect();
}
}
void CSceneManager::PickLandscapeEffectMove(float fMx,float fMy,float fMz,float fAngle,float fAddy,int MoveMode){
int i;
CSectorScene *pSector;
pSector=PickTerrain();
if(m_PickLandscape) {
for(i=0;i<m_PickLandscape->m_LandscapeEffect.num;i++) {
switch(m_PickLandscape->m_LandscapeEffect[i].m_nEffectMethod) {
case 1:
if(m_PickLandscape->m_LandscapeEffect[i].m_IntParam[1] == 1) {
if(MoveMode == 0) { // x,z move
m_PickLandscape->m_LandscapeEffect[i].m_vecCenterPos.x =fMx;
//m_PickLandscape->m_LandscapeEffect[i].m_vecCenterPos.y =fMy;
m_PickLandscape->m_LandscapeEffect[i].m_vecCenterPos.z =fMz;
}
else if(MoveMode == 1) {// y axis move
m_PickLandscape->m_LandscapeEffect[i].m_vecCenterPos.y +=fAddy;
}
pSector->GenerateLandscapeEffect();
}
break;
case 3:
if(m_PickLandscape->m_LandscapeEffect[i].m_IntParam[2] == 1) {
if(MoveMode == 0) { // x,z move
m_PickLandscape->m_LandscapeEffect[i].m_vecCenterPos.x =fMx;
m_PickLandscape->m_LandscapeEffect[i].m_vecCenterPos.y =fMy;
m_PickLandscape->m_LandscapeEffect[i].m_vecCenterPos.z =fMz;
}
else if(MoveMode == 1) {// y axis move
m_PickLandscape->m_LandscapeEffect[i].m_vecCenterPos.y +=fAddy;
}
else if(MoveMode == 2) {//x axis rot
m_PickLandscape->m_LandscapeEffect[i].m_Param[4] +=fAngle;
if(m_PickLandscape->m_LandscapeEffect[i].m_Param[4] >360.0f)
m_PickLandscape->m_LandscapeEffect[i].m_Param[4] = 0.0f;
pSector->GenerateLandscapeEffect();
}
else if(MoveMode == 3) {//y axis rot
m_PickLandscape->m_LandscapeEffect[i].m_Param[5] +=fAngle;
if(m_PickLandscape->m_LandscapeEffect[i].m_Param[5] >360.0f)
m_PickLandscape->m_LandscapeEffect[i].m_Param[5] = 0.0f;
pSector->GenerateLandscapeEffect();
}
else if(MoveMode == 4) {//z axis rot
m_PickLandscape->m_LandscapeEffect[i].m_Param[6] +=fAngle;
if(m_PickLandscape->m_LandscapeEffect[i].m_Param[6] >360.0f)
m_PickLandscape->m_LandscapeEffect[i].m_Param[6] = 0.0f;
pSector->GenerateLandscapeEffect();
}
}
break;
}//switch
}//for
}//if
}
void CSceneManager::CharacterMovementVector(CZ3DGeneralChrModel *pChrmodel, vector3 vecMove,float fAccelate)
{
m_CharacterManager.CharacterMovementVector(pChrmodel,vecMove,fAccelate);
}
vector3 CSceneManager::GetCharacterMovementVector(CZ3DGeneralChrModel *pChrmodel)
{
return m_CharacterManager.GetCharacterMovementVector(pChrmodel);
}
void CSceneManager::CharacterRandomPos(CZ3DGeneralChrModel *pChrmodel,int nTimer, vector3 vecRand)
{
m_CharacterManager.CharacterRandomPos(pChrmodel,nTimer,vecRand);
}
void CSceneManager::RenderGlareTexture()
{
m_pd3dDevice->EndScene();
LPDIRECT3DSURFACE8 m_pTempRenderSurface;
LPDIRECT3DSURFACE8 m_pTempRenderZBuffer;
m_pd3dDevice->GetRenderTarget(&m_pTempRenderSurface);
m_pd3dDevice->GetDepthStencilSurface(&m_pTempRenderZBuffer);
m_pd3dDevice->SetRenderTarget(m_GlareTexture.GetSurface(),m_pTempRenderZBuffer);
CSceneStateMgr::_SetD3DRenderState( D3DRS_LIGHTING,FALSE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE,FALSE);
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZWRITEENABLE,FALSE);
////////////////////////////////////////////
m_pd3dDevice->BeginScene();
m_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,0xff000000,1.0f,0);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1,D3DTA_TEXTURE);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG2,D3DTA_DIFFUSE);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP,D3DTOP_SELECTARG2);
TLVertex pVertex[8];
float fTextureSize=128.0f;
pVertex[0].v.x=0.0f;
pVertex[1].v.x=0.0f;
pVertex[2].v.x=fTextureSize;
pVertex[3].v.x=fTextureSize;
pVertex[1].v.y=0.0f;
pVertex[3].v.y=0.0f;
pVertex[0].v.y=fTextureSize;
pVertex[2].v.y=fTextureSize;
pVertex[0].tu=0.0f;
pVertex[1].tu=0.0f;
pVertex[3].tu=1.0f;
pVertex[2].tu=1.0f;
pVertex[1].tv=0.0f;
pVertex[3].tv=0.0f;
pVertex[0].tv=1.0f;
pVertex[2].tv=1.0f;
for(int i=0;i<4;i++)
{
pVertex[i].w=0.1f;
pVertex[i].v.z=0.1f;
pVertex[i].Diffuse.c=0xff0000ff;
pVertex[i].Specular.c=0xffffffff;
}
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
m_pd3dDevice->SetTexture(1,NULL);
m_pd3dDevice->SetVertexShader(TLVERTEXFVF);
//m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
//m_CharacterManager.Render(m_pd3dDevice);
m_WeatherManager.m_SkyScene.RenderForGlare(m_pd3dDevice);
//CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
for(int cGlareNode=0;cGlareNode<m_GlareList.num;cGlareNode++)
{
if(m_GlareList[cGlareNode].m_bCubeEnv)
{
CSceneStateMgr::_SetD3DTextureStageState( 1, D3DTSS_TEXCOORDINDEX,D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR|1);
CSceneStateMgr::_SetD3DTextureStageState( 1,D3DTSS_TEXTURETRANSFORMFLAGS,D3DTTFF_COUNT3);
CSceneStateMgr::_SetD3DRenderState(D3DRS_NORMALIZENORMALS,TRUE);
CSceneStateMgr::_SetD3DRenderState(D3DRS_LOCALVIEWER,TRUE);
m_pd3dDevice->SetTexture(1,m_DiffuseLightCubeTexture.GetTexture());
//m_pd3dDevice->SetTexture(1,m_LightCubeTexture);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP,D3DTOP_SELECTARG1);
CSceneStateMgr::_SetD3DTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
CSceneStateMgr::_SetD3DTextureStageState( 1, D3DTSS_COLOROP,D3DTOP_SELECTARG1);
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP);
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP);
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_ADDRESSW, D3DTADDRESS_CLAMP);
m_pd3dDevice->SetTransform(D3DTS_WORLD,m_GlareList[cGlareNode].m_matPosition);
m_GlareList[cGlareNode].m_pMeshObject->Render(m_pd3dDevice);
CSceneStateMgr::_SetD3DTextureStageState( 1, D3DTSS_TEXCOORDINDEX,1);
CSceneStateMgr::_SetD3DTextureStageState(1 ,D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_DISABLE);
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_ADDRESSW, D3DTADDRESS_WRAP);
CSceneStateMgr::_SetD3DRenderState(D3DRS_NORMALIZENORMALS,FALSE);
CSceneStateMgr::_SetD3DRenderState(D3DRS_LOCALVIEWER,FALSE);
}
else
{
}
}
m_GlareList.num=0;
CSceneStateMgr::_SetD3DRenderState( D3DRS_LIGHTING,FALSE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHATESTENABLE,FALSE);
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
for(int ix=0;ix<m_HeightField.GetLSizeX();ix++)
{
for(int iy=0;iy<m_HeightField.GetLSizeY();iy++)
{
if( m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_MapWater)
{
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].RenderWater(m_pd3dDevice,true);
}
}
}
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
CSceneStateMgr::_SetD3DRenderState( D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
CSceneStateMgr::_SetD3DRenderState( D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
//m_CharacterManager.RenderGlare(m_pd3dDevice);
/*
pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,TRUE);
pd3dDevice->SetRenderState( D3DRS_ALPHAREF,0xee);
*/
//CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
//m_WeatherManager.Render(m_pd3dDevice);
m_pd3dDevice->EndScene();
/////////////////////////////////////////////////
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZWRITEENABLE,TRUE);
m_pd3dDevice->SetRenderTarget(m_pTempRenderSurface,m_pTempRenderZBuffer);
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
m_pTempRenderSurface->Release();
m_pTempRenderZBuffer->Release();
m_pd3dDevice->BeginScene();
}
void CSceneManager::RenderFullSceneTextureBegin()
{
m_pd3dDevice->GetRenderTarget(&m_pTempRenderSurface);
m_pd3dDevice->GetDepthStencilSurface(&m_pTempRenderZBuffer);
m_pd3dDevice->SetRenderTarget(m_FullSceneTexture.GetSurface(),m_FullSceneTexture.GetZBuffer());
m_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,m_WeatherManager.m_GF3ClareColor.c,1.0f,0);
}
void CSceneManager::RenderFullSceneTextureEnd()
{
if(m_FullSceneAnti)
return;
m_pd3dDevice->SetRenderTarget(m_pTempRenderSurface,m_pTempRenderZBuffer);
m_pTempRenderSurface->Release();
m_pTempRenderZBuffer->Release();
TLVertex pVertex[4];
pVertex[0].v.x=0.0f;
pVertex[1].v.x=0.0f;
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
pVertex[1].v.y=0.0f;
pVertex[3].v.y=0.0f;
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
static float fasdf=0.0f;
pVertex[0].tu=0.0f;
pVertex[1].tu=0.0f;
pVertex[3].tu=1.0f;
pVertex[2].tu=1.0f;
pVertex[1].tv=0.0f;
pVertex[3].tv=0.0f;
pVertex[0].tv=1.0f;
pVertex[2].tv=1.0f;
for(int i=0;i<4;i++)
{
pVertex[i].w=0.1f;
pVertex[i].v.z=0.1f;
pVertex[i].Diffuse.c=0xffffffff;
pVertex[i].Specular.c=0xffffffff;
}
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
CSceneStateMgr::_SetD3DTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pd3dDevice->SetTexture(0,m_FullSceneTexture.GetTexture());
m_pd3dDevice->SetTexture(1,NULL);
m_pd3dDevice->SetVertexShader(TLVERTEXFVF);
m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
}
void CSceneManager::RenderFullSceneGlare()
{
m_GlareTexture.GenerateMipmap(m_pd3dDevice);
float fTextureSize=256.0f;
TLVertex pVertex[4];
pVertex[0].v.x=0.0f;
pVertex[1].v.x=0.0f;
pVertex[2].v.x=(float)fTextureSize;
pVertex[3].v.x=(float)fTextureSize;
pVertex[1].v.y=0.0f;
pVertex[3].v.y=0.0f;
pVertex[0].v.y=(float)fTextureSize;
pVertex[2].v.y=(float)fTextureSize;
static float fasdf=0.0f;
pVertex[0].tu=0.0f;
pVertex[1].tu=0.0f;
pVertex[3].tu=1.0f;
pVertex[2].tu=1.0f;
pVertex[1].tv=0.0f;
pVertex[3].tv=0.0f;
pVertex[0].tv=1.0f;
pVertex[2].tv=1.0f;
for(int i=0;i<4;i++)
{
pVertex[i].w=0.1f;
pVertex[i].v.z=0.1f;
pVertex[i].Diffuse.c=0xffffffff;
pVertex[i].Specular.c=0x0;
}
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
CSceneStateMgr::_SetD3DTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pd3dDevice->SetTexture(1,NULL);
m_pd3dDevice->SetVertexShader(TLVERTEXFVF);
CSceneStateMgr::_SetD3DRenderState( D3DRS_SRCBLEND,D3DBLEND_ONE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_DESTBLEND,D3DBLEND_ONE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
//CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE, FALSE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_LIGHTING,FALSE);
m_pd3dDevice->EndScene();
m_GlareCompositeTexture.Begin(m_pd3dDevice);
m_pd3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER|D3DCLEAR_TARGET,0x0,1.0f, 0);
m_pd3dDevice->BeginScene();
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHATESTENABLE,FALSE);
color VertexColor;
for(int cTexture=1;cTexture<m_GlareTexture.GetTextureCount();cTexture++)
//for(int cTexture=0;cTexture<1;cTexture++)
{
VertexColor.r=(unsigned char)(255.0f/((float)m_GlareTexture.GetTextureCount()-1));
//VertexColor.r=0x80;
//VertexColor.r=0xff;
VertexColor.a=VertexColor.b=VertexColor.g=VertexColor.r;
VertexColor.a=255;
////////
pVertex[0].Diffuse.c=pVertex[1].Diffuse.c=pVertex[2].Diffuse.c=pVertex[3].Diffuse.c
=VertexColor.c;
////////
m_pd3dDevice->SetTexture(0,m_GlareTexture.GetTexture(cTexture));
m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
}
m_pd3dDevice->EndScene();
m_GlareCompositeTexture.End(m_pd3dDevice);
m_pd3dDevice->BeginScene();
if(m_FullSceneAnti)
{
pVertex[2].v.x=(float)m_ScreenSize-3;
pVertex[3].v.x=(float)m_ScreenSize-3;
pVertex[0].v.y=(float)m_ScreenSize-3;
pVertex[2].v.y=(float)m_ScreenSize-3;
}
else
{
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx-3;
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx-3;
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy-3;
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy-3;
}
pVertex[0].Diffuse.c=pVertex[1].Diffuse.c=pVertex[2].Diffuse.c=pVertex[3].Diffuse.c
=0xffaaaaaa;
m_pd3dDevice->SetTexture(0,m_GlareCompositeTexture.GetTexture());
//m_pd3dDevice->SetTexture(0,m_GlareTexture.GetTexture(2));
m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
CSceneStateMgr::_SetD3DRenderState( D3DRS_SRCBLEND,D3DBLEND_ONE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_DESTBLEND,D3DBLEND_ONE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
pVertex[0].Diffuse.c=pVertex[1].Diffuse.c=pVertex[2].Diffuse.c=pVertex[3].Diffuse.c
=0xffffffff;
m_pd3dDevice->SetTexture(0,m_SpecularGlareTexture.GetTexture());
//m_pd3dDevice->SetTexture(0,m_GlareTexture.GetTexture(2));
m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
//m_SmoothGlareTexture.GenerateGlareTexture(m_pd3dDevice,m_SpecularGlareTexture.GetTexture(),);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
pVertex[0].Diffuse.c=pVertex[1].Diffuse.c=pVertex[2].Diffuse.c=pVertex[3].Diffuse.c
=0xff555555;
m_pd3dDevice->SetTexture(0,m_SmoothGlareTexture.GetTexture());
//m_pd3dDevice->SetTexture(0,m_GlareTexture.GetTexture(2));
m_pd3dDevice->SetTexture(1,NULL);
m_pd3dDevice->SetVertexShader(TLVERTEXFVF);
m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
/*
for(int ix=0;ix<30;ix++)
{
for(int iy=0;iy<1;iy++)
{
pVertex[0].v.x=0.0f+ix-15.0f;
pVertex[1].v.x=0.0f+ix-15.0f;
pVertex[2].v.x=(float)fTextureSize+ix-15.0f;
pVertex[3].v.x=(float)fTextureSize+ix-15.0f;
pVertex[1].v.y=0.0f+iy;
pVertex[3].v.y=0.0f+iy;
pVertex[0].v.y=(float)fTextureSize+iy;
pVertex[2].v.y=(float)fTextureSize+iy;
m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
}
}
*/
////////////////////////
//m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE,FALSE);
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
}
void CSceneManager::RenderFullSceneAnti()
{
if(!m_FullSceneAnti)
return;
m_pd3dDevice->SetRenderTarget(m_pTempRenderSurface,m_pTempRenderZBuffer);
m_pTempRenderSurface->Release();
m_pTempRenderZBuffer->Release();
TLVertex pVertex[4];
pVertex[0].v.x=0.0f;
pVertex[1].v.x=0.0f;
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
pVertex[1].v.y=0.0f;
pVertex[3].v.y=0.0f;
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
pVertex[0].tu=0.0f;
pVertex[1].tu=0.0f;
pVertex[3].tu=1.0f;
pVertex[2].tu=1.0f;
pVertex[1].tv=0.0f;
pVertex[3].tv=0.0f;
pVertex[0].tv=1.0f;
pVertex[2].tv=1.0f;
for(int i=0;i<4;i++)
{
pVertex[i].w=0.1f;
pVertex[i].v.z=0.1f;
pVertex[i].Diffuse.c=0xffffffff;
pVertex[i].Specular.c=0xffffffff;
}
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHATESTENABLE,FALSE);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
CSceneStateMgr::_SetD3DTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pd3dDevice->SetTexture(1,NULL);
m_pd3dDevice->SetVertexShader(TLVERTEXFVF);
CSceneStateMgr::_SetD3DRenderState( D3DRS_SRCBLEND,D3DBLEND_ONE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_DESTBLEND,D3DBLEND_ONE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
color VertexColor;
for(int cTexture=0;cTexture<9;cTexture++)
{
VertexColor.r=(unsigned char)(32.0f/(float)8.0f);
VertexColor.a=VertexColor.b=VertexColor.g=VertexColor.r;
VertexColor.a=255;
////////
pVertex[0].Diffuse.c=pVertex[1].Diffuse.c=pVertex[2].Diffuse.c=pVertex[3].Diffuse.c
=VertexColor.c;
////////
m_pd3dDevice->SetTexture(0,m_FullSceneTexture.GetTexture());
switch(cTexture)
{
case 0:
pVertex[0].Diffuse.c=pVertex[1].Diffuse.c=pVertex[2].Diffuse.c=pVertex[3].Diffuse.c
=0xffeeeeee;
pVertex[0].v.x=0.0f;
pVertex[1].v.x=0.0f;
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
pVertex[1].v.y=0.0f;
pVertex[3].v.y=0.0f;
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
break;
case 1:
pVertex[0].v.x=-1;
pVertex[1].v.x=-1;
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx-1;
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx-1;
pVertex[1].v.y=-1;
pVertex[3].v.y=-1;
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy-1;
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy-1;
break;
case 2:
pVertex[0].v.x=0;
pVertex[1].v.x=0;
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
pVertex[1].v.y=-1;
pVertex[3].v.y=-1;
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy-1;
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy-1;
break;
case 3:
pVertex[0].v.x=1;
pVertex[1].v.x=1;
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx+1;
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx+1;
pVertex[1].v.y=-1;
pVertex[3].v.y=-1;
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy-1;
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy-1;
break;
////////////
case 4:
pVertex[0].v.x=-1;
pVertex[1].v.x=-1;
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx-1;
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx-1;
pVertex[1].v.y=0;
pVertex[3].v.y=0;
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
break;
case 5:
pVertex[0].v.x=1;
pVertex[1].v.x=1;
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx+1;
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx+1;
pVertex[1].v.y=0;
pVertex[3].v.y=0;
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
break;
///
case 6:
pVertex[0].v.x=-1;
pVertex[1].v.x=-1;
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx-1;
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx-1;
pVertex[1].v.y=1;
pVertex[3].v.y=1;
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy+1;
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy+1;
break;
case 7:
pVertex[0].v.x=0;
pVertex[1].v.x=0;
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
pVertex[1].v.y=1;
pVertex[3].v.y=1;
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy+1;
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy+1;
break;
case 8:
pVertex[0].v.x=1;
pVertex[1].v.x=1;
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx+1;
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx+1;
pVertex[1].v.y=1;
pVertex[3].v.y=1;
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy+1;
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy+1;
break;
}
m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
}
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
/*
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
CSceneStateMgr::_SetD3DTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
*/
/*
m_pd3dDevice->SetTexture(0,m_FullSceneTexture.GetTexture());
m_pd3dDevice->SetTexture(1,NULL);
m_pd3dDevice->SetVertexShader(TLVERTEXFVF);
m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
*/
}
void CSceneManager::RenderSpecularGlareTexture()
{
m_pd3dDevice->EndScene();
LPDIRECT3DSURFACE8 m_pTempRenderSurface;
LPDIRECT3DSURFACE8 m_pTempRenderZBuffer;
m_pd3dDevice->GetRenderTarget(&m_pTempRenderSurface);
m_pd3dDevice->GetDepthStencilSurface(&m_pTempRenderZBuffer);
m_pd3dDevice->SetRenderTarget(m_SpecularGlareTexture.GetSurface(),m_pTempRenderZBuffer);
CSceneStateMgr::_SetD3DRenderState( D3DRS_LIGHTING,FALSE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE,FALSE);
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZWRITEENABLE,FALSE);
////////////////////////////////////////////
m_pd3dDevice->BeginScene();
m_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,0xff000000,1.0f,0);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1,D3DTA_TEXTURE);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG2,D3DTA_DIFFUSE);
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP,D3DTOP_SELECTARG2);
TLVertex pVertex[8];
float fTextureSize=128.0f;
pVertex[0].v.x=0.0f;
pVertex[1].v.x=0.0f;
pVertex[2].v.x=fTextureSize;
pVertex[3].v.x=fTextureSize;
pVertex[1].v.y=0.0f;
pVertex[3].v.y=0.0f;
pVertex[0].v.y=fTextureSize;
pVertex[2].v.y=fTextureSize;
pVertex[0].tu=0.0f;
pVertex[1].tu=0.0f;
pVertex[3].tu=1.0f;
pVertex[2].tu=1.0f;
pVertex[1].tv=0.0f;
pVertex[3].tv=0.0f;
pVertex[0].tv=1.0f;
pVertex[2].tv=1.0f;
for(int i=0;i<4;i++)
{
pVertex[i].w=0.1f;
pVertex[i].v.z=0.1f;
pVertex[i].Diffuse.c=0xff0000ff;
pVertex[i].Specular.c=0xffffffff;
}
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
m_pd3dDevice->SetTexture(1,NULL);
m_pd3dDevice->SetVertexShader(TLVERTEXFVF);
//m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
//m_CharacterManager.Render(m_pd3dDevice);
//CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
CSceneStateMgr::_SetD3DRenderState( D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
CSceneStateMgr::_SetD3DRenderState( D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
m_CharacterManager.RenderGlare(m_pd3dDevice);
/*
pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,TRUE);
pd3dDevice->SetRenderState( D3DRS_ALPHAREF,0xee);
*/
//CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
//m_WeatherManager.Render(m_pd3dDevice);
m_pd3dDevice->EndScene();
/////////////////////////////////////////////////
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZWRITEENABLE,TRUE);
m_pd3dDevice->SetRenderTarget(m_pTempRenderSurface,m_pTempRenderZBuffer);
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
m_pTempRenderSurface->Release();
m_pTempRenderZBuffer->Release();
m_pd3dDevice->BeginScene();
}
vector3 CSceneManager::PickMousePos(int nMx, int nMy)
{
//<2F>̰<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.. <20><><EFBFBD><EFBFBD><EFBFBD>Ͻñ<CFBD>..!!!!!!!!!!!!!!
PickMakeRay(nMx,nMy,BaseGraphicsLayer::m_lScreenSx,BaseGraphicsLayer::m_lScreenSy);
CSectorScene *pSector;
SectorVertex *pDrawVertex;
WORD *pDrawIndices;
vector3 vecStart,vecEnd;
vector3 vecDirection;
vecStart=m_vecPickRayStart;
vecDirection=m_vecPickRayDir;
vecDirection.Normalize();
vecEnd=vecStart+vecDirection*100000.0f;
vecStart=vecStart+vecDirection*100.0f;
vector3 vecTargetPosition;
float fInterval,fMinInterval=100000.0f;
vector3 vecPoly[3];
vecTargetPosition=vector3(-1000000000.0f,-100000000000.0f,-100000000.0f);
vector3 vecMaxBox,vecMinBox;
for(int ix=0;ix<m_HeightField.GetLSizeX();ix++)
{
for(int iy=0;iy<m_HeightField.GetLSizeY();iy++)
{
vecMinBox.x=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._41;
vecMaxBox.x=vecMinBox.x+SECTORSIZE;
vecMinBox.y=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_vecMinBox.y;
vecMaxBox.y=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_vecMaxBox.y;
vecMinBox.z=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._43;
vecMaxBox.z=vecMinBox.z+SECTORSIZE;
//if(m_SectorScene[ix+iy*m_LSizeX].isCulling())
if( CIntersection::PlaneAABBBox(CSceneManager::GetCamera()->m_vecFrustumTop,-CSceneManager::GetCamera()->m_vecFrustumNormal[0],vecMaxBox,vecMinBox) < 0.0f &&
CIntersection::PlaneAABBBox(CSceneManager::GetCamera()->m_vecFrustumBottom,-CSceneManager::GetCamera()->m_vecFrustumNormal[1],vecMaxBox,vecMinBox) < 0.0f &&
CIntersection::PlaneAABBBox(CSceneManager::GetCamera()->m_vecFrustumLeft,-CSceneManager::GetCamera()->m_vecFrustumNormal[2],vecMaxBox,vecMinBox) < 0.0f &&
CIntersection::PlaneAABBBox(CSceneManager::GetCamera()->m_vecFrustumRight,-CSceneManager::GetCamera()->m_vecFrustumNormal[3],vecMaxBox,vecMinBox) < 0.0f)
{
}
else
{
continue;
}
pSector=&m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()];
pSector->m_pROAMVertex;
pSector->m_pROAMIndices;
//m_UsedVertex,m_UsedIndices/3;
pSector->m_pROAMVertex->Lock(0,0,(BYTE**)&pDrawVertex,0);
pSector->m_pROAMIndices->Lock(0,(SECTORSX-1)*(SECTORSY-1)*ROAMBUFFERSIZE*sizeof(WORD),(BYTE**)&pDrawIndices,0);
for(int cPoly=0;cPoly<pSector->m_UsedIndices/3;cPoly++)
{
vecPoly[0]=pDrawVertex[pDrawIndices[cPoly*3+0]].v+pSector->m_AccumulateTM.GetLoc();
vecPoly[1]=pDrawVertex[pDrawIndices[cPoly*3+1]].v+pSector->m_AccumulateTM.GetLoc();
vecPoly[2]=pDrawVertex[pDrawIndices[cPoly*3+2]].v+pSector->m_AccumulateTM.GetLoc();
if(CIntersection::PolygonRay(vecStart,vecEnd,vecPoly,fInterval))
{
if(fInterval <= fMinInterval)
{
fMinInterval=fInterval;
vecTargetPosition=vecStart+vecDirection*fMinInterval;
}
}
}
pSector->m_pROAMVertex->Unlock();
pSector->m_pROAMIndices->Unlock();
}
}
///////////////////////////////
//Picking In Building
///////////////////////////////
List<vector3> vecPolyList;
for(ix=0;ix<m_HeightField.GetLSizeX();ix++)
{
for(int iy=0;iy<m_HeightField.GetLSizeY();iy++)
{
vecMinBox.x=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._41;
vecMaxBox.x=vecMinBox.x+SECTORSIZE;
vecMinBox.y=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_vecMinBox.y;
vecMaxBox.y=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_vecMaxBox.y;
vecMinBox.z=m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_AccumulateTM._43;
vecMaxBox.z=vecMinBox.z+SECTORSIZE;
//if(m_SectorScene[ix+iy*m_LSizeX].isCulling())
if( CIntersection::PlaneAABBBox(CSceneManager::GetCamera()->m_vecFrustumTop,-CSceneManager::GetCamera()->m_vecFrustumNormal[0],vecMaxBox,vecMinBox) < 0.0f &&
CIntersection::PlaneAABBBox(CSceneManager::GetCamera()->m_vecFrustumBottom,-CSceneManager::GetCamera()->m_vecFrustumNormal[1],vecMaxBox,vecMinBox) < 0.0f &&
CIntersection::PlaneAABBBox(CSceneManager::GetCamera()->m_vecFrustumLeft,-CSceneManager::GetCamera()->m_vecFrustumNormal[2],vecMaxBox,vecMinBox) < 0.0f &&
CIntersection::PlaneAABBBox(CSceneManager::GetCamera()->m_vecFrustumRight,-CSceneManager::GetCamera()->m_vecFrustumNormal[3],vecMaxBox,vecMinBox) < 0.0f)
{
}
else
{
continue;
}
//GetPickHousePoly(vector3 vecStart,vector3 vecEnd,List<vector3> &vecPolyList)
m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].GetPickHousePoly(vecStart,vecEnd,vecPolyList);
//GetInHouseShadowPoly(vecEnd,vecPolyList,vecStart);
}
}
if(m_CharacterManager.m_CharacterList.num==0)
return vecTargetPosition;
vector3 vecChrPos;
m_CharacterManager.m_CharacterList[0].m_pChrmodel->GetPosition(vecChrPos);
vecChrPos.y;
vector3 vecCheckPoly[3];
float fInterLens;
float fMaxInterLens=1000000000.0f;
vecDirection=vecEnd-vecStart;
vecDirection.Normalize();
vector3 vecPlaneNormal;
for(int cPoly=0;cPoly<vecPolyList.num;cPoly+=3)
{
vecCheckPoly[0]=vecPolyList[cPoly+0];
vecCheckPoly[1]=vecPolyList[cPoly+1];
vecCheckPoly[2]=vecPolyList[cPoly+2];
vecPlaneNormal=(vecCheckPoly[0]-vecCheckPoly[1])^(vecCheckPoly[2]-vecCheckPoly[1]);
vecPlaneNormal.Normalize();
if(fabsf(vecPlaneNormal.y) >= fabsf(vecPlaneNormal.x) && fabsf(vecPlaneNormal.y) >= fabsf(vecPlaneNormal.z))
{
if(CIntersection::PolygonRay(vecStart,vecEnd,vecCheckPoly,fInterLens))
{
vector3 vecTarPos=vecStart+fInterLens*vecDirection;
if(fabsf(vecChrPos.y-vecTarPos.y) < fMaxInterLens)
{
vecTargetPosition=vecStart+fInterLens*vecDirection;
fMaxInterLens=fabsf(vecChrPos.y-vecTarPos.y);
}
}
}
}
return vecTargetPosition;
}
CollisionType CSceneManager::GetCharacterCollisionType(CZ3DGeneralChrModel *pChrmodel)
{
return m_CharacterManager.GetCharacterCollisionType(pChrmodel);
}
void CSceneManager::BaseGraphicsDataLoad(char *strZoneName)
{
if(strcmp(strZoneName,"")==0)
{
if(CGrassScene::m_NormalTexture==NULL)
{
CTexture::SetPath(NATURETEXTUREPATH);
CGrassScene::m_NormalTexture=new CTexture();
CGrassScene::m_NormalTexture->Load("grass.dds");
}
CTexture::SetPath(TERRAINTEXTUREPATH);
/*
m_TerrainTexture[0].Load("hig0.dds");
m_TerrainTexture[1].Load("hig1.dds");
m_TerrainTexture[2].Load("hig2.dds");
m_TerrainTexture[3].Load("hig3.dds");
m_TerrainTexture[4].Load("med0.dds");
m_TerrainTexture[5].Load("med1.dds");
m_TerrainTexture[6].Load("med2.dds");
m_TerrainTexture[7].Load("med3.dds");
m_TerrainTexture[8].Load("low0.dds");
m_TerrainTexture[9].Load("low1.dds");
m_TerrainTexture[10].Load("low2.dds");
m_TerrainTexture[11].Load("low3.dds");
*/
CSectorScene::m_DetailTexture.Load("detail.dds");
if(CRenderOption::m_RangeGrassRender)
{
CTexture::SetPath(NATURETEXTUREPATH);
CSectorScene::m_LODGrassTexture.Load("LODGrass.dds");
CSectorScene::m_GrassRangeTexture=new CTexture();
CSectorScene::m_GrassRangeTexture->Load("GrassRange.dds");
}
CTexture::SetPath(NATURETEXTUREPATH);
CSkyScene::m_CloudTexture.Load("Clouds.dds");
// <20><><EFBFBD><EFBFBD> Rain <20>߰<EFBFBD>
CSkyScene::m_LightLayerTexture[0].Load("lightning.dds");
CSkyScene::m_LightLayerTexture[1].Load("lightning1.dds");
CSkyScene::m_LightLayerTexture[2].Load("lightning2.dds");
if(CTreeScene::m_NormalTreeMesh[0]==NULL)
{
CTexture::SetPath(OBJECTTEXTUREPATH);
CSceneManager::m_MeshObjectContainer.SetPath(TREEOBJECTPATH);
char strName[256];
for(int i=0;i<MAX_TREEKIND;i++)
{
sprintf(strName,"NormalTree%d.R3S",i+1);
CTreeScene::m_NormalTreeMesh[i]=CSceneManager::m_MeshObjectContainer.GetMeshObject(strName);
if(CRenderOption::m_TreeAnimation)
CTreeScene::m_NormalTreeMesh[i]->ConvertTree();
else
CTreeScene::m_NormalTreeMesh[i]->ConvertNormal();
if(i+1<10)
sprintf(strName,"tree0%d_lod_fr.R3S",i+1);
else
sprintf(strName,"tree%d_lod_fr.R3S",i+1);
CTreeScene::m_NormalTreeMeshLOD[i]=CSceneManager::m_MeshObjectContainer.GetMeshObject(strName);
if(CRenderOption::m_TreeAnimation)
CTreeScene::m_NormalTreeMeshLOD[i]->ConvertTree();
else
CTreeScene::m_NormalTreeMeshLOD[i]->ConvertNormal();
}
/*
CTreeScene::m_NormalTreeLeaves[0]=CSceneManager::m_MeshObjectContainer.GetMeshObject("leaves.R3S");
CTreeScene::m_NormalTreeLeaves[0]->ConvertTree();
CTreeScene::m_NormalTreeTrunk[0]=CSceneManager::m_MeshObjectContainer.GetMeshObject("trunk.R3S");
CTreeScene::m_NormalTreeTrunk[0]->ConvertTree();
*/
}
m_WeatherManager.Load();
///////
char strTableName[256] = {0,};
char strBuffer[256] = {0,};
char *strPtr = NULL;
strcpy(strTableName,WEATHERPATH);
strPtr = strrchr(strTableName,'.');
strPtr++;
(*strPtr) = 't';
strPtr++;
(*strPtr) = 'a';
strPtr++;
(*strPtr) = 'b';
strPtr++;
(*strPtr) = 'l';
strPtr++;
(*strPtr) = 'e';
strPtr++;
(*strPtr) = 0;
FILE *fp = fopen(strTableName,"rt");
if(fp)
{
int *iPtr;
int iPtrNum;
char *str;
fgets(strBuffer,256,fp);
iPtrNum = atoi(strBuffer);
iPtr = new int[iPtrNum];
memset(strBuffer,0,sizeof(char) * 256);
fgets(strBuffer,256,fp);
int iNum;
for(iNum = 0; iNum < iPtrNum; iNum++)
{
if(iNum == 0)
str = strtok(strBuffer," \n");
else
str = strtok(NULL," \n");
iPtr[iNum] = atoi(str);
}
fclose(fp);
m_WeatherManager.LoadSubTable(iPtr,iPtrNum);
delete[] iPtr;
}
//////
}
else
{
// 03.03.04 <20><> <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> culling <20>ٸ<EFBFBD><D9B8><EFBFBD> <20><><EFBFBD>ش<EFBFBD> (Zone5)
// Init Zone Value
char strSetPath[256] = {0};
m_ZoneInfoData.m_bZoneInfo = false;
memset(m_ZoneInfoData.m_fZoneInfo,0,sizeof(float) * 30);
memset(m_ZoneInfoData.m_iZoneInfo,0,sizeof(int) * 30);
if(CRenderOption::LoadZoneInfo(&m_ZoneInfoData))
{
// Int 0 : weather time
// 1 : House Cull
// 2 : Object Cull
// 3 : Effect Cull
// 4 : Path Setting
// float 0 1 2 ->map min size
// 3 4 5 ->map max size
// 6 7 ->map Y Bound
SetWeatherTime(m_ZoneInfoData.m_iZoneInfo[0]);
m_HeightField.SetHouseCulling((m_ZoneInfoData.m_iZoneInfo[1]) ? true : false);
m_HeightField.SetObjectCulling((m_ZoneInfoData.m_iZoneInfo[2]) ? true : false);
m_HeightField.SetEffectCulling((m_ZoneInfoData.m_iZoneInfo[3]) ? true : false);
// Map Size Setting
SetMapSize(vector3(m_ZoneInfoData.m_fZoneInfo[0],m_ZoneInfoData.m_fZoneInfo[1],m_ZoneInfoData.m_fZoneInfo[2]),
vector3(m_ZoneInfoData.m_fZoneInfo[3],m_ZoneInfoData.m_fZoneInfo[4],m_ZoneInfoData.m_fZoneInfo[5]));
// Zone Y Bound
m_CollisionDetection.SetZoneBound(m_ZoneInfoData.m_fZoneInfo[6],m_ZoneInfoData.m_fZoneInfo[7]);
if(m_ZoneInfoData.m_iZoneInfo[4] != 0) {
sprintf(strSetPath,"Zone%d",m_ZoneInfoData.m_iZoneInfo[4]);
}
}
else {
m_HeightField.SetHouseCulling(true);
m_HeightField.SetObjectCulling(true);
m_HeightField.SetEffectCulling(true);
m_CollisionDetection.SetZoneBound(-123.0f,-123.0f);
}
if(strlen(strSetPath) > 1) { // <20><> path Setting
sprintf(WEATHERPATH,"%s\\WeatherColorTable_%s.dat",m_SceneManagerPath,strZoneName);
sprintf(TREEOBJECTPATH,"%s\\Objects\\NatureObject\\%s\\",m_SceneManagerPath,strSetPath);
sprintf(MAPDATAPATH,"%s\\MapData\\%s",m_SceneManagerPath,strZoneName);
if(CRenderOption::m_TextureMethod)
{
sprintf(NATURETEXTUREPATH,"%s\\Texture\\NatureObject\\%s",m_SceneManagerPath,strSetPath);
sprintf(WIDETEXTUREPATH,"%s\\Texture\\WideTexture\\%s",m_SceneManagerPath,strZoneName);
sprintf(TERRAINTEXTUREPATH,"%s\\Texture\\Terrain\\%s",m_SceneManagerPath,strSetPath);
sprintf(UNSHADOWWIDETEXTUREPATH,"%s\\Texture\\UnShadowWideTexture\\%s",m_SceneManagerPath,strSetPath);
}
else
{
sprintf(NATURETEXTUREPATH,"%s\\LowTexture\\NatureObject\\%s",m_SceneManagerPath,strSetPath);
sprintf(WIDETEXTUREPATH,"%s\\LowTexture\\WideTexture\\%s",m_SceneManagerPath,strZoneName);
sprintf(TERRAINTEXTUREPATH,"%s\\LowTexture\\Terrain\\%s",m_SceneManagerPath,strSetPath);
sprintf(UNSHADOWWIDETEXTUREPATH,"%s\\Texture\\UnShadowWideTexture\\%s",m_SceneManagerPath,strSetPath);
}
}
else {
sprintf(WEATHERPATH,"%s\\WeatherColorTable_%s.dat",m_SceneManagerPath,strZoneName);
sprintf(TREEOBJECTPATH,"%s\\Objects\\NatureObject\\%s\\",m_SceneManagerPath,strZoneName);
sprintf(MAPDATAPATH,"%s\\MapData\\%s",m_SceneManagerPath,strZoneName);
if(strstr(strZoneName,"Zone8") != NULL) // Zone 8 Setting
MAX_OBJECTVIEWRANBE *= 2.0f;
if(CRenderOption::m_TextureMethod)
{
sprintf(NATURETEXTUREPATH,"%s\\Texture\\NatureObject\\%s",m_SceneManagerPath,strZoneName);
sprintf(WIDETEXTUREPATH,"%s\\Texture\\WideTexture\\%s",m_SceneManagerPath,strZoneName);
sprintf(UNSHADOWWIDETEXTUREPATH,"%s\\Texture\\UnShadowWideTexture\\%s",m_SceneManagerPath,strZoneName);
sprintf(TERRAINTEXTUREPATH,"%s\\Texture\\Terrain\\%s",m_SceneManagerPath,strZoneName);
}
else
{
sprintf(NATURETEXTUREPATH,"%s\\LowTexture\\NatureObject\\%s",m_SceneManagerPath,strZoneName);
sprintf(WIDETEXTUREPATH,"%s\\LowTexture\\WideTexture\\%s",m_SceneManagerPath,strZoneName);
sprintf(TERRAINTEXTUREPATH,"%s\\LowTexture\\Terrain\\%s",m_SceneManagerPath,strZoneName);
sprintf(UNSHADOWWIDETEXTUREPATH,"%s\\Texture\\UnShadowWideTexture\\%s",m_SceneManagerPath,strZoneName);
}
}
m_WeatherManager.Load();
///////
char strTableName[256] = {0,};
char strBuffer[256] = {0,};
char *strPtr = NULL;
strcpy(strTableName,WEATHERPATH);
strPtr = strrchr(strTableName,'.');
strPtr++;
(*strPtr) = 't';
strPtr++;
(*strPtr) = 'a';
strPtr++;
(*strPtr) = 'b';
strPtr++;
(*strPtr) = 'l';
strPtr++;
(*strPtr) = 'e';
strPtr++;
(*strPtr) = 0;
FILE *fp = fopen(strTableName,"rt");
if(fp)
{
int *iPtr;
int iPtrNum;
char *str;
fgets(strBuffer,256,fp);
iPtrNum = atoi(strBuffer);
iPtr = new int[iPtrNum];
memset(strBuffer,0,sizeof(char) * 256);
fgets(strBuffer,256,fp);
int iNum;
for(iNum = 0; iNum < iPtrNum; iNum++)
{
if(iNum == 0)
str = strtok(strBuffer," \n");
else
str = strtok(NULL," \n");
iPtr[iNum] = atoi(str);
}
fclose(fp);
m_WeatherManager.LoadSubTable(iPtr,iPtrNum);
delete[] iPtr;
}
//////
CTexture::SetPath(TERRAINTEXTUREPATH);
/*
m_TerrainTexture[0].Load("hig0.dds");
m_TerrainTexture[1].Load("hig1.dds");
m_TerrainTexture[2].Load("hig2.dds");
m_TerrainTexture[3].Load("hig3.dds");
m_TerrainTexture[4].Load("med0.dds");
m_TerrainTexture[5].Load("med1.dds");
m_TerrainTexture[6].Load("med2.dds");
m_TerrainTexture[7].Load("med3.dds");
m_TerrainTexture[8].Load("low0.dds");
m_TerrainTexture[9].Load("low1.dds");
m_TerrainTexture[10].Load("low2.dds");
m_TerrainTexture[11].Load("low3.dds");
*/
CSectorScene::m_DetailTexture.Load("detail.dds");
if(CRenderOption::m_GrassRendering)
{
if(CGrassScene::m_NormalTexture==NULL)
{
CTexture::SetPath(NATURETEXTUREPATH);
CGrassScene::m_NormalTexture=new CTexture();
CGrassScene::m_NormalTexture->Load("grass.dds");
}
}
if(CRenderOption::m_RangeGrassRender)
{
CTexture::SetPath(NATURETEXTUREPATH);
CSectorScene::m_LODGrassTexture.Load("LODGrass.dds");
CSectorScene::m_GrassRangeTexture=new CTexture();
CSectorScene::m_GrassRangeTexture->Load("GrassRange.dds");
}
CTexture::SetPath(NATURETEXTUREPATH);
CSkyScene::m_CloudTexture.Load("Clouds.dds");
// Rain <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
CSkyScene::m_LightLayerTexture[0].Load("lightning.dds");
CSkyScene::m_LightLayerTexture[1].Load("lightning1.dds");
CSkyScene::m_LightLayerTexture[2].Load("lightning2.dds");
if(CTreeScene::m_NormalTreeMesh[0]==NULL)
{
CTexture::SetPath(OBJECTTEXTUREPATH);
CSceneManager::m_MeshObjectContainer.SetPath(TREEOBJECTPATH);
char strName[256];
for(int i=0;i<MAX_TREEKIND;i++)
{
sprintf(strName,"NormalTree%d.R3S",i+1);
CTreeScene::m_NormalTreeMesh[i]=CSceneManager::m_MeshObjectContainer.GetMeshObject(strName);
if(CRenderOption::m_TreeAnimation)
CTreeScene::m_NormalTreeMesh[i]->ConvertTree();
else
CTreeScene::m_NormalTreeMesh[i]->ConvertNormal();
if(i+1<10)
sprintf(strName,"tree0%d_lod_fr.R3S",i+1);
else
sprintf(strName,"tree%d_lod_fr.R3S",i+1);
CTreeScene::m_NormalTreeMeshLOD[i]=CSceneManager::m_MeshObjectContainer.GetMeshObject(strName);
if(CRenderOption::m_TreeAnimation)
CTreeScene::m_NormalTreeMeshLOD[i]->ConvertTree();
else
CTreeScene::m_NormalTreeMeshLOD[i]->ConvertNormal();
}
}
/*
CTreeScene::m_NormalTreeLeaves[0]=CSceneManager::m_MeshObjectContainer.GetMeshObject("leaves.R3S");
CTreeScene::m_NormalTreeLeaves[0]->ConvertTree();
CTreeScene::m_NormalTreeTrunk[0]=CSceneManager::m_MeshObjectContainer.GetMeshObject("trunk.R3S");
CTreeScene::m_NormalTreeTrunk[0]->ConvertTree();
*/
char strWaterTextureName[256];
CTexture::SetPath(NATURETEXTUREPATH);
for(int i=0;i<MAX_WATERTEXTURE;i++)
{
sprintf(strWaterTextureName,"water%4d.dds",i);
int strLens=strlen(strWaterTextureName);
for(int cStr=0;cStr<strLens;cStr++)
{
if(strWaterTextureName[cStr]==' ')
strWaterTextureName[cStr]='0';
}
CWaterScene::m_WaterTexture[i].Load(strWaterTextureName);
}
}
}
void CSceneManager::BaseGraphicsDataUnload()
{
CSectorScene::m_DetailTexture.Unload();
if(CRenderOption::m_GrassRendering)
{
delete CGrassScene::m_NormalTexture;
CGrassScene::m_NormalTexture=NULL;
}
if(CTreeScene::m_NormalTreeMesh[0]!=NULL)
{
char strName[256];
for(int i=0;i<MAX_TREEKIND;i++)
{
sprintf(strName,"NormalTree%d.R3S",i+1);
m_MeshObjectContainer.DeleteMeshObject(strName);
CTreeScene::m_NormalTreeMesh[i]=NULL;
if(i+1<10)
sprintf(strName,"tree0%d_lod_fr.R3S",i+1);
else
sprintf(strName,"tree%d_lod_fr.R3S",i+1);
m_MeshObjectContainer.DeleteMeshObject(strName);
CTreeScene::m_NormalTreeMeshLOD[i]=NULL;
}
}
}
void CSceneManager::SetSceneManagerPath(char *strSceneManagerPath)
{
strcpy(m_SceneManagerPath,strSceneManagerPath);
sprintf(ROOTPATH,"%s\\",strSceneManagerPath);
sprintf(CHARACTERDATAPATH,"%s\\Character\\Data\\",strSceneManagerPath);//char CHARACTERDATAPATH[256]="c:\\MP-Project\\Character\\Data\\";
sprintf(CHARACTERTEXTUREDATAPATH,"%s\\Character\\Data\\tex\\",strSceneManagerPath);//char CHARACTERTEXTUREDATAPATH[256]="c:\\MP-Project\\Character\\Data\\tex\\";
sprintf(CHARACTERMESHTEX,"%s\\Character\\Data\\meshtex.htable",strSceneManagerPath);//char CHARACTERMESHTEX[256]="c:\\MP-Project\\Character\\Data\\meshtex.htable";
sprintf(CHARACTERANIPACK,"%s\\Character\\Data\\ani\\APack.ntable",strSceneManagerPath);//char CHARACTERANIPACK[256]="c:\\MP-Project\\Character\\Data\\ani\\APack.ntable";
sprintf(CHARACTERLODMESH,"%s\\Character\\Data\\mesh\\LODMesh.ntable",strSceneManagerPath);//char CHARACTERLODMESH[256]="c:\\MP-Project\\Character\\Data\\mesh\\LODMesh.ntable";
sprintf(CHARACTERTEXPIECE,"%s\\Character\\Data\\tex\\Texpiece.ntable",strSceneManagerPath);//char CHARACTERTEXPIECE[256]="c:\\MP-Project\\Character\\Data\\tex\\Texpiece.ntable";
sprintf(CHARACTERATTACHMENTMESH,"%s\\Character\\Data\\Amesh\\amesh.ntable",strSceneManagerPath);//char CHARACTERATTACHMENTMESH[256]="c:\\MP-Project\\Character\\Data\\Amesh\\amesh.ntable";
sprintf(CHARACTERTEXTURE,"%s\\Character\\Data\\Texture\\texture.ntable",strSceneManagerPath);//char CHARACTERTEXTURE[256]="c:\\MP-Project\\Character\\Data\\Texture\\texture.ntable";
sprintf(HOUSEOBJECTPATH,"%s\\Objects\\House\\",strSceneManagerPath);//char HOUSEOBJECTPATH[256]="c:\\MP-Project\\Objects\\House\\";
sprintf(LIGHTOBJECTPATH,"%s\\Objects\\Object\\",strSceneManagerPath);//char LIGHTOBJECTPATH[256]="c:\\MP-Project\\Objects\\Object\\";
sprintf(TREEOBJECTPATH,"%s\\Objects\\NatureObject\\",strSceneManagerPath);//char TREEOBJECTPATH[256]="c:\\MP-Project\\Objects\\NatureObject\\";
sprintf(OBJECTPATH,"%s\\Objects\\Object\\",strSceneManagerPath);//char OBJECTPATH[256]="c:\\MP-Project\\Objects\\Object\\";
sprintf(INSTANCEOBJECTPATH,"%s\\Objects\\Instance\\",strSceneManagerPath);//ect\\Objects\Instance\\;
if(CRenderOption::m_TextureMethod==1)
{
sprintf(CHARACTERTEXTURE,"%s\\Character\\Data\\Texture\\texture.ntable",strSceneManagerPath);//char CHARACTERTEXTURE[256]="c:\\MP-Project\\Character\\Data\\Texture\\texture.ntable";
sprintf(TERRAINTEXTUREPATH,"%s\\Texture\\Terrain",strSceneManagerPath);//char TERRAINTEXTUREPATH[256]="c:\\MP-project\\Texture\\Terrain";
sprintf(OBJECTTEXTUREPATH,"%s\\Texture\\Object",strSceneManagerPath);//char OBJECTTEXTUREPATH[256]="c:\\MP-Project\\Texture\\Object";
sprintf(NATURETEXTUREPATH,"%s\\Texture\\NatureObject",strSceneManagerPath);//char NATURETEXTUREPATH[256]="c:\\MP-project\\Texture\\NatureObject";
sprintf(WIDETEXTUREPATH,"%s\\Texture\\WideTexture",strSceneManagerPath);//char WIDETEXTUREPATH[256]="C:\\MP-Project\\Texture\\WideTexture";
sprintf(INTERFACETEXTUREPATH,"%s\\Texture\\Interface",strSceneManagerPath);//char INTERFACETEXTUREPATH[256]="c:\\MP-Project\\Texture\\Interface";
sprintf(FXTEXTUREPATH,"%s\\Texture\\FX",strSceneManagerPath);//char FXTEXTUREPATH[256]="c:\\MP-Project\\Texture\\FX";
sprintf(LIGHTMAPTEXTUREPATH,"%s\\Texture\\Lightmap",strSceneManagerPath);//char LIGHTMAPTEXTUREPATH[256]="c:\\MP-Project\\Texture\\Lightmap";
sprintf( EFFECTTEXTUREPATH, "%s\\Texture\\Effect\\",strSceneManagerPath );
}
else
{
sprintf(CHARACTERTEXTURE,"%s\\Character\\Data\\LowTexture\\texture.ntable",strSceneManagerPath);//char CHARACTERTEXTURE[256]="c:\\MP-Project\\Character\\Data\\Texture\\texture.ntable";
sprintf(TERRAINTEXTUREPATH,"%s\\LowTexture\\Terrain",strSceneManagerPath);//char TERRAINTEXTUREPATH[256]="c:\\MP-project\\Texture\\Terrain";
sprintf(OBJECTTEXTUREPATH,"%s\\LowTexture\\Object",strSceneManagerPath);//char OBJECTTEXTUREPATH[256]="c:\\MP-Project\\Texture\\Object";
sprintf(NATURETEXTUREPATH,"%s\\LowTexture\\NatureObject",strSceneManagerPath);//char NATURETEXTUREPATH[256]="c:\\MP-project\\Texture\\NatureObject";
sprintf(WIDETEXTUREPATH,"%s\\LowTexture\\WideTexture",strSceneManagerPath);//char WIDETEXTUREPATH[256]="C:\\MP-Project\\Texture\\WideTexture";
sprintf(INTERFACETEXTUREPATH,"%s\\LowTexture\\Interface",strSceneManagerPath);//char INTERFACETEXTUREPATH[256]="c:\\MP-Project\\Texture\\Interface";
sprintf(FXTEXTUREPATH,"%s\\LowTexture\\FX",strSceneManagerPath);//char FXTEXTUREPATH[256]="c:\\MP-Project\\Texture\\FX";
sprintf(LIGHTMAPTEXTUREPATH,"%s\\LowTexture\\Lightmap",strSceneManagerPath);//char LIGHTMAPTEXTUREPATH[256]="c:\\MP-Project\\Texture\\Lightmap";
sprintf( EFFECTTEXTUREPATH, "%s\\LowTexture\\Effect\\",strSceneManagerPath );
}
sprintf(TERRAINVERTEXSHADEROATH,"%s\\VertexShader\\LayerFog\\LayerFogTerrain.vsh",strSceneManagerPath);//char TERRAINVERTEXSHADEROATH[256]="c:\\MP-Project\\VertexShader\\LayerFog\\LayerFogTerrain.vsh";
sprintf(WEATHERPATH,"%s\\WeatherColorTable.dat",strSceneManagerPath);//char WEATHERPATH[256]="c:\\MP-Project\\WeatherColorTable.dat";
sprintf(OCTREEPATH,"%s\\Octree",strSceneManagerPath);//char OCTREEPATH[256]="c:\\MP-Project\\Octree";
sprintf(SOUNDFILEPATH,"%s\\Sound\\",strSceneManagerPath);//char SOUNDFILEPATH[256]="c:\\MP-Project\\Sound\\";
sprintf( EFFECTPATH, "%s\\Effect\\", strSceneManagerPath );
sprintf( EFFECTSOUNDSPATH,"%s\\Sound\\Effect\\Ssnd\\",strSceneManagerPath);
sprintf( EFFECTSOUNDMPATH,"%s\\Sound\\Effect\\Msnd\\",strSceneManagerPath);
// effect texture path
sprintf( EFFECTSCRIPTPATH,"%s\\Effect\\Esf\\",strSceneManagerPath);
//mesh morph
sprintf( OBJECTGEMPATH, "%s\\Objects\\Gem\\",strSceneManagerPath );
}
void CSceneManager::CharacterFirstAccelate(CZ3DGeneralChrModel *pChrmodel, bool bFirstAccelate)
{
m_CharacterManager.CharacterFirstAccelate(pChrmodel,bFirstAccelate);
}
CZ3DGeneralChrModel* CSceneManager::PickingCharacter(int MouseX, int MouseY)
{
PickMakeRay(MouseX,MouseY,BaseGraphicsLayer::m_lScreenSx,BaseGraphicsLayer::m_lScreenSy);
vector3 vecChrPos;
float fRad=50.0f;
float fNearestInterval=100.0f;
CZ3DGeneralChrModel *pResult=NULL;
vector3 vecMousePos;
vecMousePos.x=MouseX;
vecMousePos.y=MouseY;
vecMousePos.z=0.0f;
vector3 vecLens;
vector3 vecViewPos=*CSceneManager::GetCamera()->GetPosition();
for(int cChr=0;cChr<m_CharacterManager.m_CharacterList.num;cChr++)
{
m_CharacterManager.m_CharacterList[cChr].m_pChrmodel->GetPosition(vecChrPos);
vecChrPos.y+=100.0f;
vector3 vecResult;
float fW;
if(BaseGraphicsLayer::TransformVector(vecChrPos,vecResult,fW))
{
if(vecResult.z<0.0f || vecResult.z>1.0f)
continue;
vecLens=vecViewPos-vecChrPos;
float fInterCamera=vecLens.GetLens();
float fZRate=-(fInterCamera/10000.0f)+1;
vecResult.z=0.0f;
vecLens=vecMousePos-vecResult;
float fTemp=vecLens.GetLens();
if(fTemp <= fRad*fZRate)
{
pResult=m_CharacterManager.m_CharacterList[cChr].m_pChrmodel;
}
/*
float fTransRad=fRad/vecResult.z;
float fTemp=vecResult.z;
vecResult.z=0.0f;
vecLens=vecMousePos-vecResult;
if(vecLens.GetLens() <= fTransRad)
{
pResult=m_CharacterManager.m_CharacterList[cChr].m_pChrmodel;
}
*/
/*
vecResult.z=0.0f;
vecLens=vecMousePos-vecResult;
if(vecLens.GetLens()<=fNearestInterval)
{
pResult=m_CharacterManager.m_CharacterList[cChr].m_pChrmodel;
fNearestInterval=vecLens.GetLens();
}
*/
}
/*
vecChrPos.y+=150.0f;
vector3 vecInter=m_vecPickRayStart-vecChrPos;
float fC=(vecInter*vecInter)-fRad;
float fB=m_vecPickRayDir*(m_vecPickRayStart-vecChrPos);
if(fB*fB-fC>=0.0f)
{
if(vecInter.GetLens()<=fNearestInterval)
{
pResult=m_CharacterManager.m_CharacterList[cChr].m_pChrmodel;
fNearestInterval=vecInter.GetLens();
}
}
*/
}
return pResult;
/*
vector3 vecInter=m_vecPickRayStart-vecObjectPos;
float fC=(vecInter*vecInter)-fRad;
float fB=m_vecPickRayDir*(m_vecPickRayStart-vecObjectPos);
vecObjectPos=m_vecPickRayStart-vecObjectPos;
if(fB*fB-fC>=0.0f)
{
if(vecObjectPos.GetLens() <= fNearestInterval)
{
if(PickMode==2)
{
m_pBspScene->m_HouseObject->m_pBspObject->m_SelectLight=cLight;
fNearestInterval=vecObjectPos.GetLens();
}
}
}
*/
}
void CSceneManager::CharacterCollisionAble(CZ3DGeneralChrModel *pChrmodel, bool bCollisionDetectionAble)
{
m_CharacterManager.CharacterCollisionAble(pChrmodel,bCollisionDetectionAble);
}
void CSceneManager::CharacterGravityAble(CZ3DGeneralChrModel *pChrmodel, bool bGravityAble)
{
m_CharacterManager.CharacterGravityAble(pChrmodel,bGravityAble);
}
void CSceneManager::ResetTerrain()
{
}
void CSceneManager::SetMapSize(vector3 vecMinSize, vector3 vecMaxSize)
{
m_CollisionDetection.m_vecMinMove=vecMinSize;
m_CollisionDetection.m_vecMaxMove=vecMaxSize;
}
void CSceneManager::CharacterCollisionDetectType(CZ3DGeneralChrModel *pChrmodel, int nType)
{
m_CharacterManager.CharacterCollisionDetectType(pChrmodel,nType);
}
CCharacterLightShadowManager::CCharacterDataNode CSceneManager::GetCharacterDataNode(CZ3DGeneralChrModel *pChrmodel)
{
return m_CharacterManager.GetCharacterDataNode(pChrmodel);
}
void CSceneManager::SetCharacterDataNode(CCharacterLightShadowManager::CCharacterDataNode SetNode)
{
m_CharacterManager.SetCharacterDataNode(SetNode);
}
void CSceneManager::PickSectorEffect(int b) { // 03.03.04 <20>߰<EFBFBD>
static int iPickSector = 0; // Effect Sectormap select
if(iPickSector < 0) // b<><62> 0 <20≯<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<≯<EFBFBD> <20><><EFBFBD><EFBFBD>
iPickSector = 0;
m_PickEffect = m_MapStorage.FindEffectMap(iPickSector);
if(!b)
iPickSector++;
else
iPickSector--;
}
void CSceneManager::PickEffect2(int b) { // 03.03.04 <20>߰<EFBFBD>
static int iPick = 0; // m_PickEffect <20><><EFBFBD><EFBFBD> effect <20><><EFBFBD><EFBFBD> <20><>ȸ<EFBFBD>Ѵ<EFBFBD>.
// b<><62> 0 <20≯<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<≯<EFBFBD> <20><><EFBFBD><EFBFBD>
if(iPick >= m_PickEffect->m_vecEffectPos.num)
iPick = 0;
else if(iPick < 0)
iPick = 0;
m_PickEffect->pick_index = iPick;
if(!b)
iPick++;
else
iPick--;
}
void CSceneManager::RenderInCubemap()
{
if(CRenderOption::m_WaterBumpEnvRendering)
{
D3DXMATRIX matOldProj,matOldView,matOldWorld;
D3DXMATRIX matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI * 0.5f, 1.0f, 50.0f,620000.0f);
D3DVIEWPORT8 Viewport;
D3DVIEWPORT8 CubeViewport;
CubeViewport.X = 0;
CubeViewport.Y = 0;
CubeViewport.Width = 256;
CubeViewport.Height = 256;
CubeViewport.MinZ = 0.0f;
CubeViewport.MaxZ = 1.0f;
m_pd3dDevice->GetViewport(&Viewport);
m_pd3dDevice->GetTransform(D3DTS_VIEW,&matOldView);
m_pd3dDevice->GetTransform(D3DTS_PROJECTION,&matOldProj);
m_pd3dDevice->GetTransform(D3DTS_WORLD,&matOldWorld);
vector3 vecCameraPos;
D3DXMATRIX matInvOldView;
D3DXMatrixInverse(&matInvOldView,NULL,&matOldView);
vecCameraPos.x = matInvOldView._41;
vecCameraPos.y = matInvOldView._42;
vecCameraPos.z = matInvOldView._43;
//// Get ViewDir
D3DXMATRIX matT,matResult;
D3DXVECTOR3 vecT(0.0f, 0.0f, 1.0f);
D3DXMatrixTranslation(&matT, vecT.x, vecT.y, vecT.z);
D3DXMatrixMultiply(&matResult, &matT, &matOldView);
vector3 *vecViewPos=CSceneManager::GetCamera()->GetPosition();
vector3 vecToward = CSceneManager::GetCamera()->GetViewTowardVector();
vecToward.Normalize();
////
D3DXMATRIX matViewDir( matOldView );
matViewDir._41 = 0.0f; matViewDir._42 = 0.0f; matViewDir._43 = 0.0f;
m_pRenderEnvMap->BeginCube( m_pWorldCubemap );
m_pd3dDevice->SetViewport(&CubeViewport);
for( UINT i = 0; i < 6; i++ )
{
m_pRenderEnvMap->Face( (D3DCUBEMAP_FACES) i );
// Set the view transform for this cubemap surface
D3DXMATRIX matView;
D3DXMATRIX matWorld;
D3DXMatrixIdentity(&matWorld);
vector3 vecDir;
matView = GetCubeMatrix( i ,vecDir);
//D3DXMatrixMultiply( &matView, &matViewDir, &matView );
D3DXMatrixInverse(&matView,NULL,&matView);
//vector3 *vecViewPos=CSceneManager::GetCamera()->GetPosition();
//matView._41 = vecViewPos->x;
//matView._42 = vecViewPos->y;
///matView._42 = 600.0f;
//matView._43 = vecViewPos->z;
matView._41 = vecCameraPos.x;
matView._42 = vecCameraPos.y;
matView._43 = vecCameraPos.z;
D3DXMatrixInverse(&matView,NULL,&matView);
m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_ZBUFFER|D3DCLEAR_TARGET, BaseGraphicsLayer::m_ClearColor.c, 1.0f, 0 );
m_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
m_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
m_pd3dDevice->SetTransform( D3DTS_WORLD,&matWorld);
if(i == 3) // Negative Y
continue;
else if(i != 2) // Positive Y always Render
{ // View Direction Check
float fDot = vecDir * vecToward;
if(fDot < 0)
continue;
}
m_WeatherManager.RenderEnv(m_pd3dDevice);
//m_WeatherManager.Render(m_pd3dDevice);
m_HeightField.RenderEnv(m_pd3dDevice);
// m_HeightField.Render(m_pd3dDevice,true);
// m_WeatherManager.SecondRender(m_pd3dDevice);
}
m_pRenderEnvMap->End();
//HRESULT hr = D3DXSaveTextureToFile("c:/testEnv.dds", D3DXIFF_DDS ,m_pWorldCubemap,NULL);
m_pd3dDevice->SetTransform( D3DTS_VIEW, &matOldView );
m_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matOldProj );
m_pd3dDevice->SetTransform(D3DTS_WORLD,&matOldWorld);
m_pd3dDevice->SetViewport(&Viewport);
}
}
D3DXMATRIX CSceneManager::GetCubeMatrix(int i,vector3 &vecDir)
{
D3DXVECTOR3 vEyePt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vLookDir;
D3DXVECTOR3 vUpDir;
switch( i )
{
case 0:
vLookDir = D3DXVECTOR3( 1.0f, 0.0f, 0.0f );
vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
break;
case 1:
vLookDir = D3DXVECTOR3(-1.0f, 0.0f, 0.0f );
vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
break;
case 2:
vLookDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
vUpDir = D3DXVECTOR3( 0.0f, 0.0f,-1.0f );
break;
case 3:
vLookDir = D3DXVECTOR3( 0.0f,-1.0f, 0.0f );
vUpDir = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
break;
case 4:
vLookDir = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
break;
case 5:
vLookDir = D3DXVECTOR3( 0.0f, 0.0f,-1.0f );
vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
break;
}
vecDir.x = vLookDir.x;
vecDir.y = vLookDir.y;
vecDir.z = vLookDir.z;
D3DXMATRIX matView;
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookDir, &vUpDir );
return matView;
}
bool CSceneManager::CheckRayCollision(const D3DXVECTOR3 &vecPos1,const D3DXVECTOR3 &vecPos2)
{
return m_HeightField.CheckRayCollision(vecPos1,vecPos2);
}