Files
Client/Engine/Zalla3D Scene Class/SceneManager.cpp
LGram16 e067522598 Initial commit: ROW Client source code
Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 16:24:34 +09:00

5692 lines
166 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 <Utility/Exception.h>
#include "ChristmasParticle.h"
#include "ChristmasParticleManager.h"
#include "FullSceneEffect.h"
#include "SoundMgr.h"
#include "BgmManager.h"
#include "AmbienceManager.h"
#include "ImposterScene.h"
#include "Z3DGlowHandler.h"
#include "GMMemory.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;
CLightContainer CSceneManager::m_LightObjectContainer;
CObjectContainer CSceneManager::m_ObjectContainer;
CWeatherManager CSceneManager::m_WeatherManager;
CInstanceObjectManager CSceneManager::m_InstanceObjectManager;
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;
// <20>ػ<EFBFBD><D8BB><EFBFBD>
long CSceneManager::m_ScreenWidth;
long CSceneManager::m_ScreenHeight;
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;
std::vector<vector3> CSceneManager::m_vecBspConvertList;
std::vector<CHouseObjectScene*> CSceneManager::m_pBspConvertList;
std::vector<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;
std::vector<CSceneManager::CGlareNode> CSceneManager::m_GlareList;
CRenderTexture CSceneManager::m_SpGlareTexture;
color CSceneManager::m_FullSceneFade;
char CSceneManager::m_SceneManagerPath[256];
//ũ<><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
CSnowFall CSceneManager::m_SnowFall;
CSnowFall CSceneManager::m_Rain;
CRenderOption::ZoneInfo CSceneManager::m_ZoneInfoData;
// RBSP
RBspSceneManager CSceneManager::m_RBspSceneManager;
bool CSceneManager::m_bRBspSceneIn = false;
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
bool CSceneManager::m_bCharSelect = false;
//// Sector Light
CSectorLight *CSceneManager::m_pPickSectorLight = NULL;
bool CSceneManager::m_bRenderSectorLight = false;
bool CSceneManager::m_SkillWeatherEffect = true;
D3DLIGHT8 CSceneManager::m_CharacterLight;
bool CSceneManager::m_bCharacterLight = true;
float CSceneManager::m_fGlowPlaneRange;
bool CSceneManager::m_bCharacterLightOp = true;
bool CSceneManager::m_bSectorLightFactor = false;
DWORD CSceneManager::m_dwSectorLightFactor = 0xffffffff;
CCameraScript *CSceneManager::m_pCameraScript = NULL;
CChristmasParticleManager *CSceneManager::m_pChristmasParticleManager = NULL;
CFullSceneEffect *CSceneManager::m_pFullSceneEffect =NULL;
float CSceneManager::m_fLife = 1.0f;
// <20>߰<EFBFBD>
Caldron::Scene::CD3DBufferPools *CSceneManager::ms_pBufferPools = NULL;
CEffectCacheMgr *CSceneManager::ms_pEffectCacheMgr = NULL;
Caldron::Base::CResourceLoader *CSceneManager::ms_pResourceLoader = NULL;
Caldron::Base::CBaseCacheMgr<CMeshObject> *CSceneManager::ms_pNewMeshContainer = NULL;
CMapStorage CSceneManager::m_MapStorage;
//dynamic cube water
IDirect3DCubeTexture8* CSceneManager::m_pWorldCubemap = NULL;
ID3DXRenderToEnvMap* CSceneManager::m_pRenderEnvMap = NULL;
//Event
CSceneEventMgr* CSceneManager::ms_pSceneEventMgr = NULL;
// <20><><EFBFBD>ξ<EFBFBD> <20><><EFBFBD><EFBFBD>.
bool CSceneManager::m_bInView = false; // true <20>϶<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
CHouseObjectScene *CSceneManager::m_pInViewHouseScene = NULL;
// Refactorying
CROSSM::CPool *CSceneManager::m_pPool = NULL;
CROSSM::CResource *CSceneManager::m_pResource = NULL;
CROSSM::CResourceLoader *CSceneManager::m_pRLoader = NULL;
unsigned char CSceneManager::m_cNationFlag = 0;
CSceneManager::CSceneManager()
{
m_bWireFrameMode = false;
//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_pCameraScript = NULL;
m_bChristmas = true;
m_pChristmasParticleManager = NULL;
m_pFullSceneEffect = NULL;
ms_pBufferPools = NULL;
ms_pEffectCacheMgr = NULL;
ms_pResourceLoader = NULL;
ms_pNewMeshContainer = NULL;
m_pWorldCubemap = NULL;
m_pRenderEnvMap = NULL;
m_bInView = false;
m_pInViewHouseScene = NULL;
// Refactorying
m_pPool = NULL;
m_pResource = NULL;
m_pRLoader = NULL;
m_fSkipMaxFrame = 10.0f;
m_iSkipCount = 0;
m_iSkipMaxNum = 5;
}
CSceneManager::~CSceneManager()
{
//CMapStorage::DeleteAllData();
if(m_pRLoader)
{
m_pRLoader->Clear();
SafeDelete(m_pRLoader);
m_pRLoader = NULL;
}
if(m_pResource) // Pool mgr <20><><EFBFBD>ٴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>տ<EFBFBD><D5BF><EFBFBD> release
{
m_pResource->ReleaseAllData();
SafeDelete(m_pResource);
m_pResource = NULL;
}
if(m_pPool)
{
m_pPool->ReleaseAllData();
SafeDelete(m_pPool);
m_pPool = NULL;
}
m_MapStorage.DeleteAllObject();
m_LightObjectContainer.DeleteAllObject();
m_ObjectContainer.DeleteAllObject();
m_MeshObjectContainer.DeleteAllObject();
m_HeightField.DeleteSectorNotCull();
if(CGrassScene::m_NormalTexture != NULL)
{
delete CGrassScene::m_NormalTexture;
CGrassScene::m_NormalTexture = NULL;
}
if(m_pCameraScript != NULL) {
delete m_pCameraScript;
m_pCameraScript = NULL;
}
if(m_pChristmasParticleManager != NULL) {
delete m_pChristmasParticleManager ;
m_pChristmasParticleManager = NULL;
}
if(m_pFullSceneEffect) {
delete m_pFullSceneEffect;
m_pFullSceneEffect = NULL;
}
//=======================
// Bgm & Ambience & Evnet
//=======================
CBgmManager::_Destroy();
CAmbienceManager::_Destroy();
SAFE_DELETE( ms_pSceneEventMgr );
CImposterScene::Shutdown();
// <20>߰<EFBFBD>
if(ms_pBufferPools)
{
delete ms_pBufferPools;
ms_pBufferPools = NULL;
}
if(ms_pEffectCacheMgr)
{
delete ms_pEffectCacheMgr;
ms_pEffectCacheMgr = NULL;
}
if(ms_pResourceLoader)
{
delete ms_pResourceLoader;
ms_pResourceLoader = NULL;
}
if(ms_pNewMeshContainer)
{
delete ms_pNewMeshContainer;
ms_pNewMeshContainer = NULL;
}
if(m_pWorldCubemap)
{
m_pWorldCubemap->Release();
}
m_pWorldCubemap = NULL;
if(m_pRenderEnvMap)
{
m_pRenderEnvMap->Release();
}
m_pRenderEnvMap = NULL;
}
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;
// <20>߰<EFBFBD> effect <20><><EFBFBD><EFBFBD>ȭ
if(ms_pBufferPools)
{
delete ms_pBufferPools;
}
if(ms_pEffectCacheMgr)
{
delete ms_pEffectCacheMgr;
}
if(ms_pResourceLoader)
{
delete ms_pResourceLoader;
}
if(ms_pNewMeshContainer)
{
delete ms_pNewMeshContainer;
}
if(!m_pPool)
{
m_pPool = new CROSSM::CPool;
m_pPool->Init();
}
if(!m_pResource)
{
m_pResource = new CROSSM::CResource;
m_pResource->Init();
}
if(!m_pRLoader)
{
m_pRLoader = new CROSSM::CResourceLoader;
m_pRLoader->StartLoader();
}
ms_pNewMeshContainer = new Caldron::Base::CBaseCacheMgr<CMeshObject>;
ms_pResourceLoader = new Caldron::Base::CResourceLoader;
ms_pResourceLoader->StartLoader();
ms_pBufferPools = new Caldron::Scene::CD3DBufferPools;
ms_pBufferPools->InitBuffer();
ms_pEffectCacheMgr = new CEffectCacheMgr;
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);
ms_pEffectCacheMgr->InitLoad();
//m_Boid.Create(100,0);
// CRenderTargetTexture::Create(m_pd3dDevice,SHADOWSIZE,SHADOWSIZE);
// LENS_REALPOLYTREE=12000.0f;
/*
// edith LOD <20>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̰<EFBFBD><CCB0><EFBFBD> m_TerrainRange<67><65> 7<>϶<EFBFBD><CFB6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ǹǷ<C7B9> <20>ʱⰪ 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
TERRAINLOD = 5000.0f;
if(CRenderOption::m_TerrainRange == 7)
TERRAINLOD = 10000.0f;
else if(CRenderOption::m_TerrainRange == 5)
TERRAINLOD = 7000.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_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");
SetSceneManagerPath("c:\\MP-Project");
//strcpy(CRenderOption::m_strBaseGraphicsDataPath,"Zone2");
strcpy(CRenderOption::m_strBaseGraphicsDataPath,"");
BaseGraphicsDataLoad(CRenderOption::m_strBaseGraphicsDataPath);
m_WeatherManager.Create();
m_CharacterManager.Create();
m_CharacterManager.SetHeightField(&m_HeightField);
if(m_pCameraScript == NULL) {
m_pCameraScript = new CCameraScript;
m_pCameraScript->LoadScript("stone.cst");
}
if(m_bChristmas) {
m_pChristmasParticleManager = new CChristmasParticleManager;
}
if(m_pFullSceneEffect) {
delete m_pFullSceneEffect;
m_pFullSceneEffect = NULL;
}
m_pFullSceneEffect = new CFullSceneEffect;
bool bSceneFilter = (CRenderOption::m_ScreenFilter > 0) ? true : false;
m_pFullSceneEffect->SetFullSceneEffectEnable(bSceneFilter);
m_pFullSceneEffect->Init(GetDevice());
///////////////
// Cubemap Generation
//////////////
if(CRenderOption::m_WaterBumpEnvRendering)
{
if(m_pRenderEnvMap == NULL)
{
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()
{
if (true == m_bWireFrameMode)
{
m_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
}
else
{
m_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
}
if(m_pFullSceneEffect) {
m_pFullSceneEffect->BeginRender(BaseGraphicsLayer::m_ClearColor.c);
}
if(m_pCameraScript != NULL) {
if(m_pCameraScript->ISPlay()) {
D3DXMATRIX tmp = m_pCameraScript->GetCurrentViewMat();
D3DXVECTOR3 vecCameraPos = m_pCameraScript->GetVecPos();
D3DXVECTOR3 vecCameraUp = m_pCameraScript->GetVecUp();
D3DXVECTOR3 vecCameraLook = m_pCameraScript->GetVecLook();
if((fabs(vecCameraPos.x) < 0.0000001f) &&
(fabs(vecCameraPos.y) < 0.0000001f) &&
(fabs(vecCameraPos.z) < 0.0000001f)) {
}
else {
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(!GetInView())
m_WeatherManager.Render(m_pd3dDevice);
else
{
// <20><> <20><><EFBFBD>η<EFBFBD> <20><><EFBFBD><EFBFBD><EEB0AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ذ<EFBFBD>
m_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,TRUE);
m_pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
}
D3DVIEWPORT8 m_pTempViewPort;
m_pd3dDevice->GetViewport(&m_pTempViewPort);
m_HeightField.Render(m_pd3dDevice);
//return; // 56/20 <20><>
// <20>浹ó<E6B5B9><C3B3> <20><>ƾ <20><>ü <20>׽<EFBFBD>Ʈ<EFBFBD><C6AE>. <20><EFBFBD><E6B5B9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD><EFB0A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
//m_octreeCollider.RenderCollidableNodeTriangles(m_pd3dDevice);
m_pd3dDevice->GetViewport(&m_pTempViewPort);
if(SHADOWSIZE!=0)
{
if(strcmp(CRenderOption::m_strBaseGraphicsDataPath, "Zone100"))
{
m_CharacterManager.HeightFieldShadowRender(m_pd3dDevice); // ij<><C4B3><EFBFBD>ͱ׸<CDB1><D7B8>ڸ<EFBFBD> RTT <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ѵ<EFBFBD>, <20>׸<EFBFBD><D7B8>ڰ<EFBFBD> <20><EFBFBD><E5B8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>׸<EFBFBD><D7B8>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD>
m_CharacterManager.HeightFieldCharacterLightRender(m_pd3dDevice); // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><C4B3><EFBFBD><EFBFBD> <20>ֺ<EFBFBD><D6BA><EFBFBD> ȯ<>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׷<EFBFBD><D7B7><EFBFBD><EFBFBD>°<EFBFBD>) <20>׸<EFBFBD>
}
}
m_InstanceObjectManager.Render(m_pd3dDevice); // <20><><EFBFBD>ٴڿ<D9B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
m_HeightField.RenderShadow(m_pd3dDevice); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>..)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׸<EFBFBD><D7B8>ڸ<EFBFBD> RTT <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ѵ<EFBFBD>,
// <20><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. RTT<54><54> <20><><EFBFBD>ʹ<EFBFBD> <20>ϳ<EFBFBD>.
// <20>׸<EFBFBD><D7B8><EFBFBD> <20><EFBFBD><E5B8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϴ<EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׸<EFBFBD><D7B8>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>׸<EFBFBD><D7B8>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߺ<EFBFBD><DFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20>ƴ<EFBFBD><C6B4><EFBFBD> <20>ǽɽ<C7BD><C9BD><EFBFBD><EFBFBD><EFBFBD>
//return; // 48/8 <20><>
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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..<2E><><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD>׸<EFBFBD><D7B8>°Źۿ<C5B9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
m_pd3dDevice->GetViewport(&m_pTempViewPort);
m_EffectManager.Render();
m_EffectManager.RenderScript();
m_HeightField.RenderMapEffect();
// ũ<><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
//if(m_bSnowFall) {
// //m_SnowFall.Render();
//}
//// Minotaurs <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׸<EFBFBD><D7B8><EFBFBD>
m_SnowFall.Render();
m_Rain.Render();
if(m_bChristmas) {
m_pChristmasParticleManager->Render();
}
// Minotaurs Glow
m_CharacterManager.RenderGlow(m_pd3dDevice);
CZ3DGlowHandler::_ProcessGlow();
//m_EffectManager.RenderWorldScript();
if(m_FullSceneFade.c!=0x0)
{
TLVertex pVertex[8];
if((m_pFullSceneEffect == NULL) || !m_pFullSceneEffect->GetEnable()) {
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;
}
else {
pVertex[0].v.x=0.0f;
pVertex[1].v.x=0.0f;
pVertex[2].v.x=(float)m_pFullSceneEffect->GetRenderWidth();
pVertex[3].v.x=(float)m_pFullSceneEffect->GetRenderWidth();
pVertex[1].v.y=0.0f;
pVertex[3].v.y=0.0f;
pVertex[0].v.y=(float)m_pFullSceneEffect->GetRenderHeight();
pVertex[2].v.y=(float)m_pFullSceneEffect->GetRenderHeight();
}
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;
}
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_ONE);
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_ONE);
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,TRUE);
m_pd3dDevice->SetTexture(0,NULL);
m_pd3dDevice->SetTexture(1,NULL);
m_pd3dDevice->SetVertexShader(TLVERTEXFVF);
m_pd3dDevice->SetRenderState( D3DRS_FOGENABLE,FALSE);
m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
}
CSceneNode CheckNode;
TLVertex pVertex[8];
float fTextureSize=256.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;
static float fasdf=0.0f;
pVertex[0].tu=0.0f+fasdf;
pVertex[1].tu=0.0f+fasdf;
pVertex[3].tu=1.0f+fasdf;
pVertex[2].tu=1.0f+fasdf;
pVertex[1].tv=0.0f+fasdf;
pVertex[3].tv=0.0f+fasdf;
pVertex[0].tv=1.0f+fasdf;
pVertex[2].tv=1.0f+fasdf;
static float fD=0.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;
}
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_ADDRESSW, D3DTADDRESS_CLAMP);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX,0);
m_pd3dDevice->SetTextureStageState(0 ,D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_DISABLE);
m_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS,FALSE);
m_pd3dDevice->SetRenderState(D3DRS_LOCALVIEWER,FALSE);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_TEXTURE);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
//m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,FALSE);
m_pd3dDevice->SetTexture(1,NULL);
m_pd3dDevice->SetVertexShader(TLVERTEXFVF);
//m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
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+256.0f;
pVertex[3].v.y=0.0f+256.0f;//
pVertex[0].v.y=fTextureSize+256.0f;
pVertex[2].v.y=fTextureSize+256.0f;
//m_pd3dDevice->SetTexture(0,CSceneManager::m_SpGlareTexture.GetTexture());
//m_pd3dDevice->SetTexture(0,m_SmoothGlareTexture.GetTexture());
//m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
if(m_pFullSceneEffect) {
m_pFullSceneEffect->EndRender();
m_pFullSceneEffect->Render();
}
m_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
// 20/5 <20><>
} // end of Render()
/*
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'))
{
m_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);
}
if(KeyPressed('O'))
{
m_pd3dDevice->SetRenderState(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)
{
//m_WeatherManager.m_CloudScene.Update(m_pd3dDevice,0.0f);
matrix *matViewPosition=GetCamera()->GetMatPosition();
vector3 vecViewPos=matViewPosition->GetLoc();
vector3 vecCamera = m_ViewCamera->GetViewTowardVector();
vector3 UpCamera = m_ViewCamera->GetViewUpVector();
vecCamera.Normalize();
UpCamera.Normalize();
/*--------------------------------------
// by ichabod
//CSectorSoundMap & sndMap = CSectorSoundMap::GetInstance();
CSectorSoundMap::GetInstance().UpdateListener( vecCamera.x, vecCamera.y, vecCamera.z
, UpCamera.x, UpCamera.y, UpCamera.z
, vecViewPos.x, vecViewPos.y, vecViewPos.z );
CSoundManager::GetInstance().Update();
*/
D3DVECTOR vListenerPos, vListenerUp, vListenerFront;
vListenerFront.x = vecCamera.x;
vListenerFront.y = vecCamera.y;
vListenerFront.z = vecCamera.z;
vListenerPos.x = vecViewPos.x;
vListenerPos.y = vecViewPos.y;
vListenerPos.z = vecViewPos.z;
vListenerUp.x = UpCamera.x;
vListenerUp.y = UpCamera.y;
vListenerUp.z = UpCamera.z;
CSoundMgr::_GetInstance()->GetListener()->SetPosition(vListenerPos);
CSoundMgr::_GetInstance()->GetListener()->SetOrientation( vListenerFront, vListenerUp );
m_CharacterManager.m_CharacterList[0].m_pChrmodel->GetPosition( vListenerPos.x, vListenerPos.y, vListenerPos.z );
// edith 2008.02.14 ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȭ<EFBFBD><C8AD><EFBFBD><EFBFBD> <20>ƴҶ<C6B4><D2B6><EFBFBD> BGMManager<65><72> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Ѵ<EFBFBD>.
CAmbienceManager::_GetInstance()->Update( D3DXVECTOR3(vListenerPos.x, vListenerPos.y, vListenerPos.z), fUpdateFrame, m_bCharSelect );
CBgmManager::_GetInstance()->Update( D3DXVECTOR3(vListenerPos.x, vListenerPos.y, vListenerPos.z), fUpdateFrame, m_bCharSelect);
ms_pSceneEventMgr->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);
*/
CSectorScene::m_fCloudMove+=fUpdateFrame*0.0001f;
CWaterScene::IncWaterTexture(((int)fUpdateFrame)/2.5f);
m_WeatherManager.Update((float)((int)fUpdateFrame));
m_HeightField.Update((float)((int)fUpdateFrame));
if(m_bChristmas) {
/* if( KeyPressed('Q') && !bPushed) {
CChristmasParticle *pChristmasParticle = NULL;
pChristmasParticle = new CChristmasParticle;
pChristmasParticle->Init(900,"CParticle.dds");
pChristmasParticle->SetMaxLife(75.0f);
pChristmasParticle->SetVisible(1.0f,0.0f);
pChristmasParticle->SetBaseMass(1.2f);
pChristmasParticle->SetFraction(0.0f);
pChristmasParticle->SetGravity( 0.0f, -0.1f, 0.0f );
pChristmasParticle->SetColor(1.0f,1.0f,1.0f,0.0f,0.0f,0.0f);
pChristmasParticle->SetSize(4.0f,4.0f,4.0f,4.0f);
m_pChristmasParticleManager->AddParticle(pChristmasParticle);
bPushed = true;
}
else {
bPushed = false;
}*/
m_pChristmasParticleManager->ProcessParticle();
}
//m_Boid.Update(fUpdateFrame);
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(ms_pResourceLoader)
{
ms_pResourceLoader->Process();
}
if(m_pResource)
{
m_pResource->Update();
}
if(m_pRLoader)
{
m_pRLoader->Process();
}
if(fUpdateFrame >= m_fSkipMaxFrame)
{
m_iSkipCount++;
if(m_iSkipCount == m_iSkipMaxNum)
{
m_iSkipCount = 0;
if(m_fSkipMaxFrame < 60.0f)
m_fSkipMaxFrame += 10.0f;
}
return;
}
m_iSkipCount = 0;
//////////////////////////////////////////////////////////////////////////
//
// by yundi 2004.12.14
//
// flush accumulated(unused) events
m_CharacterManager.FlushAccumulatedCharacterEvents();
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(int cUpdate=0;cUpdate<(int)fUpdateFrame;cUpdate++)
{
//Landscape effect
if(tmp_sector != NULL)
{
//tmp_sector->UpdateLandscapeEffect();
tmp_sector->UpdateEffect();
}
//effect
m_EffectManager.UpdateFrame();
if(m_pCameraScript != NULL)
m_pCameraScript->PlayScript(0,0,0);
////////////////////////////// Minotaurs <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
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();
///////////// <20><>
if(m_WeatherManager.GetWeatherCorlor() == 67 )
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,true);
else
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,false);
//m_SnowFall.Update(tmppos.x,tmppos.y,tmppos.z,800.0f,800.0f,tmppos.y + 100.0f);
////////////////////<2F><>
if(m_WeatherManager.GetWeatherCorlor() == 101 )
m_Rain.Update(tmppos.x + tmptoward.x * 700.0f,tmppos.y,tmppos.z + tmptoward.z * 700.0f,1000.0f,1000.0f,tmppos.y + 700.0f,true);
else
m_Rain.Update(tmppos.x + tmptoward.x * 700.0f,tmppos.y,tmppos.z + tmptoward.z * 700.0f,1000.0f,1000.0f,tmppos.y + 700.0f,false);
////////////////// Minotaurs Weather<65><72> <20><><EFBFBD><EFBFBD> <20><> <20><>;;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;;
//////////////ũ<><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);
}
///////////////////////////////////////////
*/
// int snum;/* = m_EffectManager.GetScriptNum();
/* for(int scnt = 0;scnt<snum;scnt++)
m_EffectManager.ProcessScript(scnt);*/
//snum = m_EffectManager.GetWScriptNum();
/* for(int scnt = 0;scnt<snum;scnt++)
m_EffectManager.ProcessWScript(scnt);
*/
}
if(m_pFullSceneEffect)
{
char SoundBuf[256] = {0};
static bool bStartSound = false;
if(m_fLife <= 0.3f)
{
if((m_fLife >= 0.0f) && bStartSound == false)
{
bStartSound = true;
sprintf(SoundBuf,"%s%s",EFFECTSOUNDMPATH,"heart.wav"); // <20><><EFBFBD><EFBFBD><EFBFBD>Ҹ<EFBFBD>
CSound* pSound;
CSoundMgr::_GetInstance()->GetSound( pSound, SoundBuf, 1 );
pSound->SetLooping( true );
pSound->Play();
}
m_pFullSceneEffect->SetFlag(FULLSCENE_SATURATION2,true);
if(m_fLife <= 0.2f)
{
m_pFullSceneEffect->SetFlag(FULLSCENE_MOTIONBLUR,true);
}
else
{
m_pFullSceneEffect->SetFlag(FULLSCENE_MOTIONBLUR,false);
}
if((bStartSound == true) && (m_fLife <= 0.0f))
{
sprintf(SoundBuf,"%s%s",EFFECTSOUNDMPATH,"heart.wav"); // <20><><EFBFBD><EFBFBD><EFBFBD>Ҹ<EFBFBD>
CSound* pSound;
CSoundMgr::_GetInstance()->GetSound( pSound, SoundBuf, 1 );
pSound->Stop();
bStartSound = false;
}
}
else if((m_pFullSceneEffect->GetFlag(FULLSCENE_SATURATION2)))
{
m_pFullSceneEffect->SetFlag(FULLSCENE_SATURATION2,false);
m_pFullSceneEffect->SetFlag(FULLSCENE_MOTIONBLUR,false);
// sound off
if(bStartSound)
{
sprintf(SoundBuf,"%s%s",EFFECTSOUNDMPATH,"heart.wav"); // <20><><EFBFBD><EFBFBD><EFBFBD>Ҹ<EFBFBD>
CSound* pSound;
CSoundMgr::_GetInstance()->GetSound( pSound, SoundBuf, 1 );
pSound->Stop();
bStartSound = false;
}
}
}
// 2005.05.10 yundi Octree<65><65> <20><><EFBFBD><EFBFBD> Lock Load <20>߰<EFBFBD>(<28><> <20>ε<EFBFBD><CEB5><EFBFBD>)
_UnlockImmediateResourceLoad(CROSSM::RESOURCE_OCTREESCENE);
m_CollisionDetection.UnlockDetection();
}
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(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;
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<(int)m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_HouseObjectNode.size();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_PickObjectScene=NULL;
fNearestInterval=vecLens.GetLens();
}
}
if(fNearestInterval!=LENS_NEAR_HOUSE)
return;
}
if(PickMode==2)
{
fNearestInterval=LENS_NEAR_OBJECT;
for(cObject=0;cObject<(int)m_HeightField.m_SectorScene[ix+iy*m_HeightField.GetLSizeX()].m_ObjectSceneNode.size();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;
fNearestInterval=vecLens.GetLens();
}
}
// object<63><74> picking<6E>Ǿ<EFBFBD><C7BE>ٸ<EFBFBD> sound object <20><><EFBFBD><EFBFBD> üũ
/*----------------------------------------------
// by ichabod
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;
}
void CSceneManager::PickObjectMove(float fMx, float fMy, float fMz,float fAngle,float fAddy,int MoveMode)
{
if(m_PickLightScene)
{
CInHouseObjectMap *InHouseMap=NULL;/*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<(int)InHouseMap->m_LightID.size();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);*/
CInHouseObjectMap *InHouseMap = NULL;
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<(int)InHouseMap->m_ObjectID.size();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<(int)InHouseMap->m_ObjectID.size();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
{
//object moving ó<><C3B3>
// 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<(int)pMapMesh->m_ObjectSceneID.size();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;
}
}
}*/
/*----------------------------------------------------
// by ichabod
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<(int)pMapMesh->m_ObjectSceneID.size();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;
}
}
}
*/
/*--------------------------------------------
// by ichabod
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<(int)pMapMesh->m_ObjectSceneID.size();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;
}
}
}
*/
/*--------------------------------------
// by ichabod
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<(int)pMapMesh->m_ObjectSceneID.size();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;
}
}
}*/
/*--------------------------------------
// by ichabod
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<(int)SectorHouseMap->m_TM.size();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<(int)SectorHouseMap->m_TM.size();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<(int)SectorHouseMap->m_TM.size();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<(int)SectorHouseMap->m_TM.size();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;
mat._43=mat._42=mat._41=0.0f;
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.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::DeleteAllObject()
{
m_InstanceObjectManager.DeleteAllObject();
}
void CSceneManager::InstanceObjectRotation(int InstanceObjectID,float fDist)
{
return m_InstanceObjectManager.InstanceObjectRotation(InstanceObjectID,fDist);
}
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();
m_GrassScene.UnloadData();
CSceneManager::ms_pResourceLoader->Clear();
m_MapStorage.DeleteAllObject();
CSceneManager::ms_pNewMeshContainer->DeleteAllData();
CSceneManager::m_MeshObjectContainer.DeleteAllObject();
CTexture::m_TextureContainer.DeleteAllDataPath(OBJECTTEXTUREPATH);
CTexture::m_TextureContainer.DeleteAllDataPath(TERRAINTEXTUREPATH);
CTexture::m_TextureContainer.DeleteAllDataPath(LIGHTMAPTEXTUREPATH);
CTexture::m_TextureContainer.DeleteAllDataPath(UNSHADOWWIDETEXTUREPATH);
CTexture::m_TextureContainer.DeleteAllDataPath(WIDETEXTUREPATH);
//char NATURETEXTUREPATH[256]="c:\\MP-project\\Texture\\NatureObject";
}
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;
/*
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
{
/*
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;
}
}
}
*/
/*--------------------------------------
// by ichabod
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;
}
*/
}
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);
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, int iValue, CZ3DGeneralChrModel **ppOld,bool bHouse,int iHouseType,D3DXVECTOR3 vecPos)
{
return m_CharacterManager.AddCharacter(szGCMDSName, szFaceType, szHairStyle, iValue, ppOld,bHouse,iHouseType,vecPos ) ;
}
CZ3DGeneralChrModel* CSceneManager::ReplaceCharacter( CZ3DGeneralChrModel* pChrOldModel, const char* szGCMDSName, vector3& vecPos )
{
return m_CharacterManager.ReplaceCharacter(pChrOldModel, szGCMDSName, vecPos );
}
CZ3DGeneralChrModel *CSceneManager::SwitchingModel( int iNum,CZ3DGeneralChrModel *pNew )
{
return m_CharacterManager.SwitchingModel( iNum, pNew ) ;
}
CCharacterLightShadowManager::CCharacterDataNode* CSceneManager::GetCharacterDataNodeEx( CZ3DGeneralChrModel *pModel )
{
return m_CharacterManager.GetCharacterDataNodeEx( pModel ) ;
}
CCharacterLightShadowManager::CCharacterDataNode CSceneManager::UndeleteListChr( CZ3DGeneralChrModel* pModel )
{
return m_CharacterManager.UndeleteListChr( pModel ) ;
}
void CSceneManager::UnallocListChr( CCharacterLightShadowManager::CCharacterDataNode pModel, BOOL bFirst )
{
m_CharacterManager.UnallocListChr( pModel, bFirst ) ;
}
void CSceneManager::DeleteElement( CZ3DGeneralChrModel* pDelChr )
{
m_CharacterManager.DeleteElement( pDelChr ) ;
}
void CSceneManager::Undo()
{
matrix matUndoData=m_matUndo;
MakeUndoData();
if(m_PickLightScene)
{
m_PickLightScene->m_TM=matUndoData;
return;
}
if(m_PickObjectScene)
{
if(m_PickHouseScene)
{
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<(int)pMapMesh->m_ObjectSceneID.size();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<(int)SectorHouseMap->m_TM.size();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;
/*
// edith LOD <20>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̰<EFBFBD><CCB0><EFBFBD> m_TerrainRange<67><65> 7<>϶<EFBFBD><CFB6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ǹǷ<C7B9> <20>ʱⰪ 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
TERRAINLOD = 5000.0f;
if(CRenderOption::m_TerrainRange == 7)
TERRAINLOD = 10000.0f;
else if(CRenderOption::m_TerrainRange == 5)
TERRAINLOD = 7000.0f;
*/
// edith Option LOD
switch(CRenderOption::m_ObjectLOD)
{
case 0:
MAX_HOUSEVIEWRANGE=10000.0f;
// MAX_HOUSEVIEWRANGE=16000.0f;
MAX_HOUSEDISAPPER=MAX_HOUSEVIEWRANGE-1000.0f;
MAX_OUTVIEWRANGE=15000.0f;
MAX_MEDVIEWRANGE=15000.0f;
MAX_INVIEWRANGE=4200.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=4200.0f;
MAX_OBJECTVIEWRANBE=5000.0f;
// MAX_OBJECTVIEWRANBE=7000.0f;
MAX_OBJECTDISAPPER=MAX_OBJECTVIEWRANBE-1000.0f;
LENS_REALPOLYTREE=6000.0f;
// LENS_REALPOLYTREE=10000.0f;
break;
case 2:
MAX_HOUSEVIEWRANGE=60000.0f;
MAX_HOUSEDISAPPER=MAX_HOUSEVIEWRANGE-3000.0f;
MAX_OUTVIEWRANGE=15000.0f;
MAX_MEDVIEWRANGE=15000.0f;
MAX_INVIEWRANGE=4200.0f;
MAX_OBJECTVIEWRANBE=5000.0f;
// MAX_OBJECTVIEWRANBE=9000.0f;
MAX_OBJECTDISAPPER=MAX_OBJECTVIEWRANBE-1000.0f;
LENS_REALPOLYTREE=8000.0f;
// LENS_REALPOLYTREE=15000.0f;
break;
case 3:
MAX_HOUSEVIEWRANGE=80000.0f;
MAX_HOUSEDISAPPER=MAX_HOUSEVIEWRANGE-4000.0f;
MAX_OUTVIEWRANGE=15000.0f;
MAX_MEDVIEWRANGE=15000.0f;
MAX_INVIEWRANGE=4200.0f;
MAX_OBJECTVIEWRANBE=10000.0f;
// MAX_OBJECTVIEWRANBE=12000.0f;
MAX_OBJECTDISAPPER=MAX_OBJECTVIEWRANBE-1000.0f;
LENS_REALPOLYTREE=10000.0f;
// LENS_REALPOLYTREE=20000.0f;
break;
}
//LogMessage(strPath);
/*
char strNsTexturePath[256];
sprintf(strNsTexturePath,"%s\\Texture\\Interface\\",strPath);
CTexture::SetPath(strNsTexturePath);
*/
///////////////////////////////
// <20>߰<EFBFBD> effect <20><><EFBFBD><EFBFBD>ȭ
if(ms_pBufferPools)
{
delete ms_pBufferPools;
}
if(ms_pEffectCacheMgr)
{
delete ms_pEffectCacheMgr;
}
if(ms_pResourceLoader)
{
delete ms_pResourceLoader;
}
if(ms_pNewMeshContainer)
{
delete ms_pNewMeshContainer;
}
if(!m_pPool)
{
m_pPool = new CROSSM::CPool;
m_pPool->Init();
}
if(!m_pResource)
{
m_pResource = new CROSSM::CResource;
m_pResource->Init();
}
if(!m_pRLoader)
{
m_pRLoader = new CROSSM::CResourceLoader;
m_pRLoader->StartLoader();
}
ms_pNewMeshContainer = new Caldron::Base::CBaseCacheMgr<CMeshObject>;
ms_pResourceLoader = new Caldron::Base::CResourceLoader;
ms_pResourceLoader->StartLoader();
ms_pBufferPools = new Caldron::Scene::CD3DBufferPools;
ms_pBufferPools->InitBuffer();
ms_pEffectCacheMgr = new CEffectCacheMgr;
//////////////////////////////
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;
}
else
{
m_WeatherManager.DeleteSubTable();
}
////////
m_MapStorage.SetLoadMode(1);
m_EffectManager.SetDevice(m_pd3dDevice);
//////
ms_pEffectCacheMgr->InitLoad();
//CParticle::SetMatPosition(&m_ViewCamera->m_matPosition);
//SetSceneManagerPath("c:\\MP-Project");
strcpy(CRenderOption::m_strBaseGraphicsDataPath,"Zone15");
///strcpy(CRenderOption::m_strBaseGraphicsDataPath,"");
BaseGraphicsDataLoad(CRenderOption::m_strBaseGraphicsDataPath);
m_WeatherManager.Create();
m_CharacterManager.Create();
m_CharacterManager.SetHeightField(&m_HeightField);
if(m_pCameraScript == NULL) {
m_pCameraScript = new CCameraScript;
m_pCameraScript->LoadScript("stone.cst");
}
if(m_bChristmas) {
m_pChristmasParticleManager = new CChristmasParticleManager;
}
////////////Minotaurs <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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);
//
// <20><> <20><> <20>ʱ<EFBFBD>ȭ
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);
// <20><> <20><> <20>ʱ<EFBFBD>ȭ
m_Rain.SetWorldValue(0.0f,-40.0f,0.0f,1.0f,-0.5f,1.0f,"RainPar.dds");
//m_SnowFall.Init(GetDevice(),300,tmppos.x,tmppos.y,tmppos.z,800.0f,800.0f,tmppos.y + 100.0f);
m_Rain.Init(GetDevice(),120,tmppos.x,tmppos.y,tmppos.z,1000.0f,1000.0f,tmppos.y + 2000.0f);
///////////////////ũ<><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_pFullSceneEffect) {
delete m_pFullSceneEffect;
m_pFullSceneEffect = NULL;
}
bool bSceneFilter = (CRenderOption::m_ScreenFilter > 0) ? true : false;
m_pFullSceneEffect = new CFullSceneEffect;
m_pFullSceneEffect->SetFullSceneEffectEnable(bSceneFilter);
m_pFullSceneEffect->Init(GetDevice());
//================================
// Bgm & Ambience & Event
//================================
CAmbienceManager::_GetInstance()->Create();
CBgmManager::_GetInstance()->Create();
SAFE_DELETE( ms_pSceneEventMgr );
ms_pSceneEventMgr = new CSceneEventMgr;
CImposterScene::Init();
///////////////
// Cubemap Generation
//////////////
if(CRenderOption::m_WaterBumpEnvRendering)
{
if(m_pRenderEnvMap == NULL)
{
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 );
}
}
//////////////
}
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, float fAngle)
{
return m_InstanceObjectManager.AddInstanceObject(strObjectName,vecPos, fAngle);
}
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 (int)m_CharacterManager.m_CharacterList.size();
}
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(int type, char *szZoneFilename, char* szBaseGraphicsDataPath, vector3 vZoneBoundMin, vector3 vZoneBoundMax)
{
BaseGraphicsDataUnload();
DeleteAllData();
BaseGraphicsDataLoad(szBaseGraphicsDataPath);
if(type == 0)
m_MapStorage.LoadGF3(szZoneFilename);
else
m_MapStorage.LoadGF3Mem(szZoneFilename);
// sector <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD> <20>̿<EFBFBD>
//m_MapStorage.m_HeightMap.num = 1;
// <20><20><><EFBFBD><EFBFBD> <20>ε<EFBFBD>
// unsigned int uiTriCount;
// CollectCollisionTriangleCount(uiTriCount);
// FillCollisionTriangle(uiTriCount);
// BuildCollisionOctree();
// <20>ҷ<EFBFBD><D2B7><EFBFBD> <20>̺<EFBFBD>Ʈ (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ<EFBFBD>̵<EFBFBD> <20>ƴϵ<C6B4> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5>ϰ<EFBFBD> <20>Ѵ<EFBFBD>)
m_WeatherManager.Reload();
SetMapSize(vZoneBoundMin, vZoneBoundMax);
}
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()
{
}
//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::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<(int)m_PickEffect->m_vecEffectPos.size();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<(int)m_PickLandscape->m_LandscapeEffect.size();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<(int)m_PickLandscape->m_LandscapeEffect.size();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<(int)m_PickLandscape->m_LandscapeEffect.size();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<(int)m_PickLandscape->m_LandscapeEffect.size();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<(int)m_PickLandscape->m_LandscapeEffect.size();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.erase(m_PickLandscape->m_LandscapeEffect.begin()+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.erase(m_PickLandscape->m_LandscapeEffect.begin()+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.erase(m_PickLandscape->m_LandscapeEffect.begin()+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.erase(m_PickLandscape->m_LandscapeEffect.begin()+i);
break;
}
}
}
if(m_PickLandscape->m_LandscapeEffect.size()== 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.erase(m_PickEffect->m_vecEffectPos.begin()+m_PickEffect->pick_index);
m_PickEffect->m_strEffectName.erase(m_PickEffect->m_strEffectName.begin()+m_PickEffect->pick_index);
m_PickEffect->pick_index = -1;
m_PickEffect = NULL;
pSector->GenerateEffect();
}
}
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<(int)m_PickLandscape->m_LandscapeEffect.size();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);
m_pd3dDevice->SetRenderState( D3DRS_LIGHTING,FALSE);
m_pd3dDevice->SetRenderState( D3DRS_FOGENABLE,FALSE);
m_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,FALSE);
////////////////////////////////////////////
m_pd3dDevice->BeginScene();
m_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,0xff000000,1.0f,0);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1,D3DTA_TEXTURE);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2,D3DTA_DIFFUSE);
m_pd3dDevice->SetTextureStageState( 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;
}
m_pd3dDevice->SetRenderState(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);
//m_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
/*
for(int cGlareNode=0;cGlareNode<m_GlareList.size();cGlareNode++)
{
}
*/
m_GlareList.clear();
m_pd3dDevice->SetRenderState( D3DRS_LIGHTING,FALSE);
m_pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,FALSE);
m_pd3dDevice->SetRenderState(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);
}
}
}
m_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
//m_CharacterManager.RenderGlare(m_pd3dDevice);
/*
pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,TRUE);
pd3dDevice->SetRenderState( D3DRS_ALPHAREF,0xee);
*/
//m_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
//m_WeatherManager.Render(m_pd3dDevice);
m_pd3dDevice->EndScene();
/////////////////////////////////////////////////
m_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,TRUE);
m_pd3dDevice->SetRenderTarget(m_pTempRenderSurface,m_pTempRenderZBuffer);
m_pd3dDevice->SetRenderState(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;
}
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
m_pd3dDevice->SetTextureStageState( 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;
}
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pd3dDevice->SetTexture(1,NULL);
m_pd3dDevice->SetVertexShader(TLVERTEXFVF);
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_ONE);
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_ONE);
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
//m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE);
m_pd3dDevice->SetRenderState( 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();
m_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
m_pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
m_pd3dDevice->SetRenderState( 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));
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_ONE);
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_ONE);
m_pd3dDevice->SetRenderState( 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(),);
m_pd3dDevice->SetRenderState( 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));
////////////////////////
//m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
m_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,FALSE);
m_pd3dDevice->SetRenderState(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;
}
m_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
m_pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
m_pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,FALSE);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pd3dDevice->SetTexture(1,NULL);
m_pd3dDevice->SetVertexShader(TLVERTEXFVF);
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_ONE);
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_ONE);
m_pd3dDevice->SetRenderState( 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));
}
m_pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
}
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);
m_pd3dDevice->SetRenderState( D3DRS_LIGHTING,FALSE);
m_pd3dDevice->SetRenderState( D3DRS_FOGENABLE,FALSE);
m_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,FALSE);
////////////////////////////////////////////
m_pd3dDevice->BeginScene();
m_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,0xff000000,1.0f,0);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1,D3DTA_TEXTURE);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2,D3DTA_DIFFUSE);
m_pd3dDevice->SetTextureStageState( 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;
}
m_pd3dDevice->SetRenderState(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_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
m_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
//m_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
//m_WeatherManager.Render(m_pd3dDevice);
m_pd3dDevice->EndScene();
/////////////////////////////////////////////////
m_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,TRUE);
m_pd3dDevice->SetRenderTarget(m_pTempRenderSurface,m_pTempRenderZBuffer);
m_pd3dDevice->SetRenderState(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
///////////////////////////////
std::vector<vector3> vecPolyList;
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;
}
//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.empty())
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<(int)vecPolyList.size();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, char* szWeatherTableOverride)
{
// 2005.05.10 yundi Octree<65><65> <20><><EFBFBD><EFBFBD> Lock Load <20>߰<EFBFBD>(<28><> <20>ε<EFBFBD><CEB5><EFBFBD>)
for( int i = 0; i < 60; ++i )
{
_LockImmediateResourceLoad(CROSSM::RESOURCE_OCTREESCENE);
m_CollisionDetection.LockDetection();
}
m_bCharSelect = false;
if(strcmp(strZoneName, "Zone15") == 0)
{
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȭ<EFBFBD><C8AD><EFBFBD>̴<EFBFBD>.
m_bCharSelect = true;
// CAmbienceManager::_GetInstance()->AllStop();
// CBgmManager::_GetInstance()->AllStop();
}
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");
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
{
m_WeatherManager.DeleteSubTable();
}
//////
}
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
if( szWeatherTableOverride )
{
sprintf(WEATHERPATH,"%s\\WeatherColorTable_%s.dat",m_SceneManagerPath,szWeatherTableOverride);
}
else
{
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);
}
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);
}
}
else {
if( szWeatherTableOverride )
{
sprintf(WEATHERPATH,"%s\\WeatherColorTable_%s.dat",m_SceneManagerPath,szWeatherTableOverride);
}
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(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);
}
}
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
{
m_WeatherManager.DeleteSubTable();
}
//////
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");
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\\;
sprintf(NEOINTERFACETEXTUREPATH,"%s\\Texture\\Interface\\NeoInterface",strSceneManagerPath);//char INTERFACETEXTUREPATH[256]="c:\\MP-Project\\Texture\\Interface";
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 );
//Sound path
sprintf( BGMPATH, "%s\\SOUND\\Bgm\\",strSceneManagerPath );
sprintf( AMBIENCEPATH, "%s\\SOUND\\Amb\\",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<(int)m_CharacterManager.m_CharacterList.size();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 >= (int)m_PickEffect->m_vecEffectPos.size())
iPick = 0;
else if(iPick < 0)
iPick = 0;
m_PickEffect->pick_index = iPick;
if(!b)
iPick++;
else
iPick--;
}
// RBSP
// 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,true);
*/
}
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);
*/
}
}
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;
}
}
}
}
}
void CSceneManager::HeightPosInit() {
m_HeightField.InitNowPos();
}
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);
D3DXMATRIX matTmp;
vector3 vecCameraPos;
D3DXMatrixInverse(&matTmp,NULL,&matOldView);
vecCameraPos.x = matTmp._41;
vecCameraPos.y = matTmp._42;
vecCameraPos.z = matTmp._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 = vecCameraPos.x;
matView._42 = vecCameraPos.y;
//matView._42 = 600.0f;
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;
}
void CSceneManager::SetSkipHouse(float fx,float fy,float fz,bool bSkip)
{
for(int cSector=0;cSector<((CSceneManager::m_HeightField.m_LSizeX) * (CSceneManager::m_HeightField.m_LSizeY));cSector++)
//for(int cSector=0;cSector<LSIZEX*LSIZEY;cSector++)
{
if( m_HeightField.m_SectorScene[cSector].m_AccumulateTM._41 <= fx &&
m_HeightField.m_SectorScene[cSector].m_AccumulateTM._41+SECTORSIZE > fx &&
m_HeightField.m_SectorScene[cSector].m_AccumulateTM._43 <= fz &&
m_HeightField.m_SectorScene[cSector].m_AccumulateTM._43+SECTORSIZE > fz)
{
m_HeightField.m_SectorScene[cSector].SetSkipHouse(fx,fy,fz,bSkip);
}
}
}
bool CSceneManager::CheckRayCollision(const D3DXVECTOR3 &vecPos1,const D3DXVECTOR3 &vecPos2)
{
return m_HeightField.CheckRayCollision(vecPos1,vecPos2);
}
//////////////////////////////////////////////////////////////////////////
void CSceneManager::SetNullTextureMode(bool bNullTextureMode)
{
CTexture::NullTextureMode(bNullTextureMode);
CROSSM::CNTexture::NullTextureMode(bNullTextureMode);
Z3DTexture::NullTextureMode(bNullTextureMode);
}
void CSceneManager::SetWireFrameMode(bool bWireFrame)
{
m_bWireFrameMode = bWireFrame;
}
void CSceneManager::AddHouseMap(float fAddx, float fAddy, float fAddz,char *strOutName,char *strMedName,char *strInName,char *strBspName)
{
m_MapStorage.AddHouseMap(fAddx, fAddy, fAddz, strOutName, strMedName, strInName, strBspName);
}
void CSceneManager::DeleteHouseMap(float fDelx,float fDely,float fDelz,char *filename)
{
m_MapStorage.DeleteHouseMap(fDelx, fDely, fDelz, filename);
}
void CSceneManager::CollectCollisionTriangleCount(unsigned int& uiOutTriCount)
{
size_t nVertexCount = 0;
size_t nTriangleCount = 0;
// height <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD><EFB0A2> <20><><EFBFBD><EFBFBD> ī<><C4AB>Ʈ
// nTriangleCount += (SECTORSX - 1)*(SECTORSY - 1)*2 * m_MapStorage.m_HeightMap.num;
// house <20><><EFBFBD><EFBFBD> octree <20><> <20><><EFBFBD><EFBFBD> <20><EFBFBD><EFB0A2> <20><><EFBFBD><EFBFBD> ī<><C4AB>Ʈ
char szOctreeFullPathFileName[MAX_PATH];
for (size_t i = 0; i < (size_t)m_MapStorage.m_HouseMap.size(); ++i)
{
CSectorHouseMap& houseMap = *(m_MapStorage.m_HouseMap[i]);
for (size_t j = 0; j < (size_t)houseMap.m_strOutName.size(); ++j)
{
// out name <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD>θ<EFBFBD><CEB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD> Ȯ<><C8AE><EFBFBD>ڸ<EFBFBD> <20>ٲپ<D9B2> octree <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fullpath <20><><EFBFBD>θ<EFBFBD> <20><><EFBFBD><EFBFBD>
sprintf(szOctreeFullPathFileName,"%s\\%s", OCTREEPATH, houseMap.m_strOutName[j]);
size_t nLen = strlen(szOctreeFullPathFileName);
szOctreeFullPathFileName[nLen-3] = 'O';
szOctreeFullPathFileName[nLen-2] = 'C';
szOctreeFullPathFileName[nLen-1] = 'T';
FILE* fp = fopen(szOctreeFullPathFileName, "rb");
if (NULL == fp)
{
continue;
}
// <20><><EFBFBD><EFBFBD> ù <20>Ӹ<EFBFBD><D3B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʵ<EFBFBD><CAB5><EFBFBD>
size_t nTotalTri;
fread(&nTotalTri, sizeof(size_t), 1, fp);
fclose(fp);
nVertexCount += nTotalTri*3;
nTriangleCount += nTotalTri;
}
}
// object <20><> <20><><EFBFBD>̴<EFBFBD> mesh <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EFB0A2> <20><><EFBFBD><EFBFBD> ī<><C4AB>Ʈ
// m_MapStorage.m_MeshMap;
uiOutTriCount = nTriangleCount;
}
void CSceneManager::FillCollisionTriangle(unsigned int uiTriCount)
{
int i, j, k;//, x, y;
size_t nTriFilled = 0;
CrossM::Scene::CollisionTriangleInfo* pTriangle;
m_octreeCollider.SetTriangleCount(uiTriCount); // <20><><EFBFBD>ؽ<EFBFBD>, <20><EFBFBD><EFB0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD>.
m_octreeCollider.GetTriangleDataPtr(pTriangle); // <20><><EFBFBD>ؽ<EFBFBD>, <20><EFBFBD><EFB0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// heitmap <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> collision triangle <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// for (i = 0; i < m_MapStorage.m_HeightMap.num; ++i)
// {
// CSectorHeightMap& heightMap = *(m_MapStorage.m_HeightMap[i]);
//
// // <20><> <20><><EFBFBD>Ϳ<EFBFBD> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> <20><EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD><EFB0A2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>
// for (y = 0; y < SECTORSY-1; ++y)
// {
// for (x = 0; x < SECTORSX-1; ++x)
// {
// CrossM::Math::VECTOR3 vLowerLeft, vLowerRight, vUpperLeft, vUpperRight;
// size_t indexX, indexY;
//
// indexX = x; indexY = y;
// vLowerLeft.SetValue(
// heightMap.m_IndexX*SECTORSIZE + indexX*LINTERVAL,
// heightMap.m_pHeightData[indexY*SECTORSX + indexX],
// heightMap.m_IndexY*SECTORSIZE + indexY*LINTERVAL);
//
// indexX = x+1; indexY = y;
// vLowerRight.SetValue(
// heightMap.m_IndexX*SECTORSIZE + indexX*LINTERVAL,
// heightMap.m_pHeightData[indexY*SECTORSX + indexX],
// heightMap.m_IndexY*SECTORSIZE + indexY*LINTERVAL);
//
// indexX = x; indexY = y+1;
// vUpperLeft.SetValue(
// heightMap.m_IndexX*SECTORSIZE + indexX*LINTERVAL,
// heightMap.m_pHeightData[indexY*SECTORSX + indexX],
// heightMap.m_IndexY*SECTORSIZE + indexY*LINTERVAL);
//
// indexX = x+1; indexY = y+1;
// vUpperRight.SetValue(
// heightMap.m_IndexX*SECTORSIZE + indexX*LINTERVAL,
// heightMap.m_pHeightData[indexY*SECTORSX + indexX],
// heightMap.m_IndexY*SECTORSIZE + indexY*LINTERVAL);
//
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>»<EFBFBD><C2BB><EFBFBD> <20><EFBFBD><EFB0A2>
// pTriangle[nTriFilled].m_avVertex[0] = vLowerLeft;
// pTriangle[nTriFilled].m_avVertex[1] = vUpperLeft;
// pTriangle[nTriFilled].m_avVertex[2] = vUpperRight;
//
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>ϴ<EFBFBD> <20><EFBFBD><EFB0A2>
// pTriangle[nTriFilled + 1].m_avVertex[0] = vLowerLeft;
// pTriangle[nTriFilled + 1].m_avVertex[1] = vUpperRight;
// pTriangle[nTriFilled + 1].m_avVertex[2] = vLowerRight;
//
// nTriFilled += 2;
// }
// }
// }
// house <20><><EFBFBD><EFBFBD> octree <20><> <20><><EFBFBD><EFBFBD> collision triangle setting
std::vector< CrossM::Math::VECTOR3 > vTriLoadBuffer;
char szOctreeFullPathFileName[MAX_PATH];
for (i = 0; i < (int)m_MapStorage.m_HouseMap.size(); ++i)
{
CSectorHouseMap& houseMap = *(m_MapStorage.m_HouseMap[i]);
for (j = 0; j < (int)houseMap.m_strOutName.size(); ++j)
{
// out name <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD>θ<EFBFBD><CEB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD> Ȯ<><C8AE><EFBFBD>ڸ<EFBFBD> <20>ٲپ<D9B2> octree <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fullpath <20><><EFBFBD>θ<EFBFBD> <20><><EFBFBD><EFBFBD>
sprintf(szOctreeFullPathFileName,"%s\\%s", OCTREEPATH, houseMap.m_strOutName[j]);
size_t nLen = strlen(szOctreeFullPathFileName);
szOctreeFullPathFileName[nLen-3] = 'O';
szOctreeFullPathFileName[nLen-2] = 'C';
szOctreeFullPathFileName[nLen-1] = 'T';
FILE* fp = fopen(szOctreeFullPathFileName, "rb");
if (NULL == fp)
{
continue;
}
// <20><><EFBFBD><EFBFBD> ù <20>Ӹ<EFBFBD><D3B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʵ<EFBFBD><CAB5><EFBFBD>
int nTotalTri;
fread(&nTotalTri, sizeof(size_t), 1, fp);
vTriLoadBuffer.resize(nTotalTri*3);
fread(&vTriLoadBuffer[0], sizeof(CrossM::Math::VECTOR3)*nTotalTri*3, 1, fp);
fclose(fp);
matrix& mTm = houseMap.m_TM[j];
for (k = 0; k < nTotalTri; ++k)
{
CrossM::Scene::CollisionTriangleInfo& tri = pTriangle[ nTriFilled ];
for (int l = 0; l < 3; ++l)
{
CrossM::Math::VECTOR3& vDest = tri.m_avVertex[l];
CrossM::Math::VECTOR3& vSrc = vTriLoadBuffer[k*3 + l];
vDest.SetValue(
vSrc.x*mTm._11 + vSrc.y*mTm._21 + vSrc.z*mTm._31 + mTm._41,
vSrc.x*mTm._12 + vSrc.y*mTm._22 + vSrc.z*mTm._32 + mTm._42,
vSrc.x*mTm._13 + vSrc.y*mTm._23 + vSrc.z*mTm._33 + mTm._43);
}
++nTriFilled;
}
}
}
}
void CSceneManager::BuildCollisionOctree()
{
m_octreeCollider.BuildOctree(15, 160);
}
void CSceneManager::GetCollisionRespondingPosition(
CrossM::Math::VECTOR3& vRespondingPos,
const CrossM::Math::VECTOR3& vPrevPos, const CrossM::Math::VECTOR3& vNewPos,
const CrossM::Math::VECTOR3& vCollisionEllipsoidRadius)
{
m_octreeCollider.GetCollisionRespondingPosition(vRespondingPos, vPrevPos, vNewPos, vCollisionEllipsoidRadius);
}