Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2007 lines
61 KiB
C++
2007 lines
61 KiB
C++
// WeatherManager.cpp: implementation of the CWeatherManager class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "WeatherManager.h"
|
|
#include "BaseDataDefine.h"
|
|
#include "RenderOption.h"
|
|
#include "SectorScene.h"
|
|
#include "SceneManager.h"
|
|
#include "SceneStateMgr.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
CWeatherManager::CSubWeatherData::CSubWeatherData()
|
|
{
|
|
m_pGrassTexture = NULL;
|
|
}
|
|
CWeatherManager::CSubWeatherData::~CSubWeatherData()
|
|
{
|
|
if(m_pGrassTexture)
|
|
{
|
|
delete m_pGrassTexture;
|
|
m_pGrassTexture = NULL;
|
|
}
|
|
|
|
}
|
|
|
|
CWeatherManager::CWeatherManager()
|
|
{
|
|
ZeroMemory(&m_SunLight,sizeof(D3DLIGHT8));
|
|
m_SunLight.Type=D3DLIGHT_DIRECTIONAL;
|
|
m_SunLight.Diffuse.r = 1.0f;
|
|
m_SunLight.Diffuse.g = 1.0f;
|
|
m_SunLight.Diffuse.b = 1.0f;
|
|
m_SunLight.Position.x = 1.0f;
|
|
m_SunLight.Position.y = 0.0f;
|
|
m_SunLight.Position.z = 0.0f;
|
|
m_SunLight.Direction.x = 1.0f;
|
|
m_SunLight.Direction.y = 1.0f;
|
|
m_SunLight.Direction.z = 1.0f;
|
|
m_SunLight.Range = 1000.0f;
|
|
|
|
m_pSubWeatherTable = NULL;
|
|
m_bSubTable = false;
|
|
m_pWeaterTableRaw = NULL;
|
|
m_fInterpol = 0.0f;
|
|
|
|
m_iSubCurrentIndex = 0;
|
|
m_iBeforeCurrentIndex = 0;
|
|
|
|
if(Load()==false)
|
|
{
|
|
//´ë³·~
|
|
m_SkyCenterColor[0].a=255;
|
|
m_SkyCenterColor[0].r=56;
|
|
m_SkyCenterColor[0].g=80;
|
|
m_SkyCenterColor[0].b=175;
|
|
|
|
m_SkyNeighborColor[0].a=255;
|
|
m_SkyNeighborColor[0].r=175;
|
|
m_SkyNeighborColor[0].g=224;
|
|
m_SkyNeighborColor[0].b=250;
|
|
|
|
m_FogColor[0].a=255;
|
|
m_FogColor[0].r=190;
|
|
m_FogColor[0].g=210;
|
|
m_FogColor[0].b=220;
|
|
|
|
m_LightColor[0].a=0xff;
|
|
m_LightColor[0].r=200;
|
|
m_LightColor[0].g=200;
|
|
m_LightColor[0].b=200;
|
|
m_AmbientColor[0].a=0xff;
|
|
m_AmbientColor[0].r=70;
|
|
m_AmbientColor[0].g=70;
|
|
m_AmbientColor[0].b=70;
|
|
|
|
m_FogRangeNear[0]=1.0f;
|
|
m_FogRangeFar[0]=100000.0f;
|
|
m_SkyFogFar[0]=400000.0f;
|
|
|
|
m_FogLayer[0][0].c=0xffffffff;
|
|
m_FogLayer[0][1].c=0xffffffff;
|
|
m_FogLayer[0][2].c=0xffffffff;
|
|
m_SunPosition[0]=(3.1415f/3.0f)*2.0f-0.1f;
|
|
|
|
m_ObjectAmbientColor[0].c=0xffaaaaaa;
|
|
//³ëÀ» ³ë¶õ»ö
|
|
m_SkyCenterColor[1].a=255;
|
|
m_SkyCenterColor[1].r=62;
|
|
m_SkyCenterColor[1].g=3;
|
|
m_SkyCenterColor[1].b=105;
|
|
|
|
m_SkyNeighborColor[1].a=255;
|
|
m_SkyNeighborColor[1].r=62;
|
|
m_SkyNeighborColor[1].g=3;
|
|
m_SkyNeighborColor[1].b=105;
|
|
|
|
m_FogColor[1].a=255;
|
|
m_FogColor[1].r=248;
|
|
m_FogColor[1].g=226;
|
|
m_FogColor[1].b=141;
|
|
|
|
m_LightColor[1].a=0xff;
|
|
m_LightColor[1].r=240;
|
|
m_LightColor[1].g=126;
|
|
m_LightColor[1].b=041;
|
|
|
|
m_AmbientColor[1].a=0xff;
|
|
m_AmbientColor[1].r=10;
|
|
m_AmbientColor[1].g=10;
|
|
m_AmbientColor[1].b=10;
|
|
|
|
m_FogRangeNear[1]=70000.0f;
|
|
m_FogRangeFar[1]=400000.0f;
|
|
m_FogRangeFar[1]=100000.0f;
|
|
m_SkyFogFar[1]=400000.0f;
|
|
|
|
m_FogLayer[1][0].c=0xffdf7600;
|
|
m_FogLayer[1][1].c=0xfff8e28d;
|
|
m_FogLayer[1][2].c=0xff000000;
|
|
|
|
m_SunPosition[1]=3.1415f;
|
|
|
|
m_ObjectAmbientColor[1].c=0xffddaaaa;
|
|
///³ëÀ» »¡°£»ö
|
|
m_SkyCenterColor[2].a=255;
|
|
m_SkyCenterColor[2].r=3;
|
|
m_SkyCenterColor[2].g=18;
|
|
m_SkyCenterColor[2].b=54;
|
|
|
|
m_SkyNeighborColor[2].a=255;
|
|
m_SkyNeighborColor[2].r=3;
|
|
m_SkyNeighborColor[2].g=18;
|
|
m_SkyNeighborColor[2].b=54;
|
|
m_FogColor[2].a=255;
|
|
m_FogColor[2].r=215;
|
|
m_FogColor[2].g=84;
|
|
m_FogColor[2].b=13;
|
|
|
|
m_LightColor[2].a=0xff;
|
|
m_LightColor[2].r=60;
|
|
m_LightColor[2].g=36;
|
|
m_LightColor[2].b=011;
|
|
|
|
m_AmbientColor[2].a=0xff;
|
|
m_AmbientColor[2].r=3;
|
|
m_AmbientColor[2].g=3;
|
|
m_AmbientColor[2].b=3;
|
|
|
|
m_FogRangeNear[2]=70000.0f;
|
|
m_FogRangeFar[2]=400000.0f;
|
|
m_FogRangeFar[2]=100000.0f;
|
|
m_SkyFogFar[2]=400000.0f;
|
|
|
|
m_FogLayer[2][0].c=0xffbf5600;
|
|
m_FogLayer[2][1].c=0xfff5c26d;
|
|
m_FogLayer[2][2].c=0xff000000;
|
|
|
|
m_SunPosition[2]=3.1415f+0.5;
|
|
m_ObjectAmbientColor[2].c=0xff555555;
|
|
|
|
//³ëÀ» - ¾à°£ ÆÄ¶õ»ö
|
|
m_SkyCenterColor[3].a=255;
|
|
m_SkyCenterColor[3].r=0;
|
|
m_SkyCenterColor[3].g=0;
|
|
m_SkyCenterColor[3].b=0;
|
|
|
|
m_SkyNeighborColor[3].a=255;
|
|
m_SkyNeighborColor[3].r=0;
|
|
m_SkyNeighborColor[3].g=0;
|
|
m_SkyNeighborColor[3].b=0;
|
|
|
|
m_FogColor[3].a=255;
|
|
m_FogColor[3].r=8;
|
|
m_FogColor[3].g=26;
|
|
m_FogColor[3].b=42;
|
|
|
|
m_LightColor[3].a=0xff;
|
|
m_LightColor[3].r=15;
|
|
m_LightColor[3].g=15;
|
|
m_LightColor[3].b=40;
|
|
|
|
m_AmbientColor[3].a=0xff;
|
|
m_AmbientColor[3].r=15;
|
|
m_AmbientColor[3].g=15;
|
|
m_AmbientColor[3].b=40;
|
|
|
|
m_FogRangeNear[3]=1000.0f;
|
|
m_FogRangeFar[3]=400000.0f;
|
|
m_FogRangeFar[3]=100000.0f;
|
|
m_SkyFogFar[3]=400000.0f;
|
|
|
|
m_FogLayer[3][0].c=0xff000000;
|
|
m_FogLayer[3][1].c=0xff000000;
|
|
m_FogLayer[3][2].c=0xff000000;
|
|
m_SunPosition[3]=3.1415f+1.0f;
|
|
|
|
m_ObjectAmbientColor[2].c=0xff333333;
|
|
|
|
//¹ã
|
|
m_SkyCenterColor[4].a=255;
|
|
m_SkyCenterColor[4].r=8;
|
|
m_SkyCenterColor[4].g=26;
|
|
m_SkyCenterColor[4].b=72;
|
|
|
|
m_SkyNeighborColor[4].a=255;
|
|
m_SkyNeighborColor[4].r=8;
|
|
m_SkyNeighborColor[4].g=26;
|
|
m_SkyNeighborColor[4].b=72;
|
|
|
|
m_FogColor[4].a=255;
|
|
m_FogColor[4].r=0;
|
|
m_FogColor[4].g=0;
|
|
m_FogColor[4].b=0;
|
|
|
|
m_LightColor[4].a=0xff;
|
|
m_LightColor[4].r=15;
|
|
m_LightColor[4].g=15;
|
|
m_LightColor[4].b=40;
|
|
|
|
m_AmbientColor[4].a=0xff;
|
|
m_AmbientColor[4].r=15;
|
|
m_AmbientColor[4].g=15;
|
|
m_AmbientColor[4].b=40;
|
|
|
|
m_FogRangeNear[4]=1000.0f;
|
|
m_FogRangeFar[4]=400000.0f;
|
|
m_FogRangeFar[4]=100000.0f;
|
|
m_SkyFogFar[4]=400000.0f;
|
|
|
|
m_FogLayer[4][0].c=0xff000000;
|
|
m_FogLayer[4][1].c=0xff000000;
|
|
m_FogLayer[4][2].c=0xff000000;
|
|
m_SunPosition[4]=3.1415f+(3.1415f/2.0f);
|
|
|
|
m_ObjectAmbientColor[2].c=0xff222222;
|
|
|
|
//»õº®¾à°£ ÆÄ¶õ»ö
|
|
m_SkyCenterColor[5].a=255;
|
|
m_SkyCenterColor[5].r=0;
|
|
m_SkyCenterColor[5].g=0;
|
|
m_SkyCenterColor[5].b=0;
|
|
|
|
m_SkyNeighborColor[5].a=255;
|
|
m_SkyNeighborColor[5].r=0;
|
|
m_SkyNeighborColor[5].g=0;
|
|
m_SkyNeighborColor[5].b=0;
|
|
|
|
m_FogColor[5].a=255;
|
|
m_FogColor[5].r=8;
|
|
m_FogColor[5].g=26;
|
|
m_FogColor[5].b=42;
|
|
|
|
m_LightColor[5].a=0xff;
|
|
m_LightColor[5].r=15;
|
|
m_LightColor[5].g=15;
|
|
m_LightColor[5].b=40;
|
|
|
|
m_AmbientColor[5].a=0xff;
|
|
m_AmbientColor[5].r=15;
|
|
m_AmbientColor[5].g=15;
|
|
m_AmbientColor[5].b=40;
|
|
|
|
m_FogRangeNear[5]=1000.0f;
|
|
m_FogRangeFar[5]=400000.0f;
|
|
m_FogRangeFar[5]=100000.0f;
|
|
m_SkyFogFar[5]=400000.0f;
|
|
|
|
m_FogLayer[5][0].c=0xff000000;
|
|
m_FogLayer[5][1].c=0xff000000;
|
|
m_FogLayer[5][2].c=0xff000000;
|
|
|
|
m_SunPosition[5]=0.0f;
|
|
|
|
m_ObjectAmbientColor[5].c=0xff555555;
|
|
|
|
//¾ÆÄ§ ³ë¶õ»ö
|
|
|
|
m_SkyCenterColor[6].a=255;
|
|
m_SkyCenterColor[6].r=11;
|
|
m_SkyCenterColor[6].g=2;
|
|
m_SkyCenterColor[6].b=53;
|
|
|
|
m_SkyNeighborColor[6].a=255;
|
|
m_SkyNeighborColor[6].r=11;
|
|
m_SkyNeighborColor[6].g=2;
|
|
m_SkyNeighborColor[6].b=53;
|
|
|
|
m_FogColor[6].a=255;
|
|
m_FogColor[6].r=154;
|
|
m_FogColor[6].g=134;
|
|
m_FogColor[6].b=109;
|
|
|
|
m_LightColor[6].a=0xff;
|
|
m_LightColor[6].r=140;
|
|
m_LightColor[6].g=140;
|
|
m_LightColor[6].b=140;
|
|
|
|
m_AmbientColor[6].a=0xff;
|
|
m_AmbientColor[6].r=30;
|
|
m_AmbientColor[6].g=30;
|
|
m_AmbientColor[6].b=30;
|
|
|
|
m_FogRangeNear[6]=70000.0f;
|
|
m_FogRangeFar[6]=400000.0f;
|
|
m_FogRangeFar[6]=100000.0f;
|
|
m_SkyFogFar[6]=400000.0f;
|
|
|
|
m_FogLayer[6][0].c=0xffc8c8ff;
|
|
m_FogLayer[6][1].c=0xffc8c8ff;
|
|
m_FogLayer[6][2].c=0xff88724d;
|
|
m_SunPosition[6]=3.14f/5.0f;
|
|
|
|
m_ObjectAmbientColor[6].c=0xff777777;
|
|
}
|
|
|
|
m_CustomWaterColor=false;
|
|
|
|
|
|
}
|
|
|
|
CWeatherManager::~CWeatherManager()
|
|
{
|
|
if(m_pSubWeatherTable)
|
|
{
|
|
delete[] m_pSubWeatherTable;
|
|
m_pSubWeatherTable = NULL;
|
|
}
|
|
if(m_pWeaterTableRaw)
|
|
{
|
|
delete[] m_pWeaterTableRaw;
|
|
m_pWeaterTableRaw = NULL;
|
|
}
|
|
}
|
|
|
|
void CWeatherManager::Create()
|
|
{
|
|
m_SkyScene.Create();
|
|
m_SunScene.Create();
|
|
// m_FallScene.Create();
|
|
// m_CloudScene.Create();
|
|
}
|
|
void CWeatherManager::RenderEnv(LPDIRECT3DDEVICE8 pd3dDevice)
|
|
{
|
|
pd3dDevice->LightEnable(0,FALSE);
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_LIGHTING,FALSE);
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGSTART, *((DWORD *)(&m_InterFogNear)) );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGEND, *((DWORD *)(&m_InterSkyFogFar)) );
|
|
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
|
|
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);
|
|
|
|
matrix matInit;
|
|
matInit.MakeIdent();
|
|
pd3dDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&matInit));
|
|
m_SkyScene.Render(pd3dDevice);
|
|
//m_SunScene.Render(pd3dDevice);
|
|
pd3dDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&matInit));
|
|
m_SkyScene.RenderCloud(pd3dDevice);
|
|
pd3dDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&matInit));
|
|
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGEND, *((DWORD *)(&m_InterFogFar)) );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_LIGHTING,TRUE);
|
|
pd3dDevice->LightEnable(0,TRUE);
|
|
}
|
|
void CWeatherManager::Render(LPDIRECT3DDEVICE8 pd3dDevice)
|
|
{
|
|
///*
|
|
pd3dDevice->LightEnable(0,FALSE);
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_LIGHTING,FALSE);
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGSTART, *((DWORD *)(&m_InterFogNear)) );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGEND, *((DWORD *)(&m_InterSkyFogFar)) );
|
|
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
|
|
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);
|
|
|
|
matrix matInit;
|
|
matInit.MakeIdent();
|
|
pd3dDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&matInit));
|
|
m_SkyScene.Render(pd3dDevice);
|
|
m_SunScene.Render(pd3dDevice);
|
|
pd3dDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&matInit));
|
|
m_SkyScene.RenderCloud(pd3dDevice);
|
|
pd3dDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&matInit));
|
|
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGEND, *((DWORD *)(&m_InterFogFar)) );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_LIGHTING,TRUE);
|
|
pd3dDevice->LightEnable(0,TRUE);
|
|
//*/
|
|
}
|
|
int CWeatherManager::GetSubWeatherNum(vector3 *vecPos)
|
|
{
|
|
if(vecPos == NULL || m_bSubTable == false)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
float indexx=(vecPos->x/SECTORSIZE) -1.0f;
|
|
float indexy=(vecPos->z/SECTORSIZE) -1.0f;
|
|
indexx /= 11.0f;
|
|
indexy /= 11.0f;
|
|
if(indexx < 0.0f)
|
|
indexx = 0.0f;
|
|
if(indexx > 1.0f)
|
|
indexx = 1.0f;
|
|
|
|
if(indexy < 0.0f)
|
|
indexy = 0.0f;
|
|
if(indexy > 1.0f)
|
|
indexy = 1.0f;
|
|
|
|
int ix = 512 *indexx;
|
|
int iy = 512 *indexy;
|
|
|
|
if(ix < 0)
|
|
ix = 0;
|
|
if(ix >= 512)
|
|
ix = 511;
|
|
|
|
if(iy < 0)
|
|
iy = 0;
|
|
if(iy >= 512)
|
|
iy = 511;
|
|
|
|
|
|
return m_pWeaterTableRaw[iy * 512 + ix];
|
|
|
|
|
|
}
|
|
CTexture *CWeatherManager::GetCurrentSubGrassTexture()
|
|
{
|
|
if(m_bSubTable)
|
|
{
|
|
if(m_pSubWeatherTable[m_iSubCurrentIndex].m_pGrassTexture)
|
|
{
|
|
return m_pSubWeatherTable[m_iSubCurrentIndex].m_pGrassTexture;
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
void CWeatherManager::SetWeather(float fTime,LPDIRECT3DDEVICE8 pd3dDevice)
|
|
{
|
|
if(m_CustomWaterColor)
|
|
{
|
|
int nLastWeatherTime=(int)m_fWeatherTime;
|
|
|
|
int nWeatherEffectTime=24;
|
|
|
|
color dwFogLayerColor[3];
|
|
color AmbientColor,LightColor,FogColor,SkyCenterColor,SkyNeighborColor;
|
|
float fFogStart,fFogEnd,fSkyFogFar;
|
|
float fSunTime=fTime;
|
|
|
|
AmbientColor=color::Interpolation(m_AmbientColor[nLastWeatherTime],m_AmbientColor[nWeatherEffectTime],m_CustomWaterRate);
|
|
LightColor=color::Interpolation(m_LightColor[nLastWeatherTime],m_LightColor[nWeatherEffectTime],m_CustomWaterRate);
|
|
FogColor=color::Interpolation(m_FogColor[nLastWeatherTime],m_FogColor[nWeatherEffectTime],m_CustomWaterRate);
|
|
|
|
SkyCenterColor=color::Interpolation(m_SkyCenterColor[nLastWeatherTime],m_SkyCenterColor[nWeatherEffectTime],m_CustomWaterRate);
|
|
SkyNeighborColor=color::Interpolation(m_SkyNeighborColor[nLastWeatherTime],m_SkyNeighborColor[nWeatherEffectTime],m_CustomWaterRate);
|
|
|
|
fFogStart=m_FogRangeNear[nLastWeatherTime]+(m_FogRangeNear[nWeatherEffectTime]-m_FogRangeNear[nLastWeatherTime])*(m_CustomWaterRate-(int)m_CustomWaterRate);
|
|
fFogEnd=m_FogRangeFar[nLastWeatherTime]+(m_FogRangeFar[nWeatherEffectTime]-m_FogRangeFar[nLastWeatherTime])*(m_CustomWaterRate-(int)m_CustomWaterRate);
|
|
fSkyFogFar=m_SkyFogFar[nLastWeatherTime]+(m_SkyFogFar[nWeatherEffectTime]-m_SkyFogFar[nLastWeatherTime])*(m_CustomWaterRate-(int)m_CustomWaterRate);
|
|
|
|
m_InterObjectAmbientColor=color::Interpolation(m_ObjectAmbientColor[nLastWeatherTime],m_ObjectAmbientColor[nWeatherEffectTime],m_CustomWaterRate);
|
|
|
|
dwFogLayerColor[0]=color::Interpolation(m_FogLayer[nLastWeatherTime][0],m_FogLayer[nWeatherEffectTime][0],m_CustomWaterRate);
|
|
dwFogLayerColor[1]=color::Interpolation(m_FogLayer[nLastWeatherTime][1],m_FogLayer[nWeatherEffectTime][1],m_CustomWaterRate);
|
|
dwFogLayerColor[2]=color::Interpolation(m_FogLayer[nLastWeatherTime][2],m_FogLayer[nWeatherEffectTime][2],m_CustomWaterRate);
|
|
|
|
m_InterSpecularReflectionRate=color::Interpolation(m_SpecularReflectionRate[nLastWeatherTime],m_SpecularReflectionRate[nWeatherEffectTime],fTime);
|
|
m_InterGrassColor=color::Interpolation(m_GrassColor[nLastWeatherTime],m_GrassColor[nWeatherEffectTime],fTime);
|
|
m_InterGlareSkyUpper=color::Interpolation(m_GlareSkyUpper[nLastWeatherTime],m_GlareSkyUpper[nWeatherEffectTime],fTime);
|
|
m_InterGlareSkyLower=color::Interpolation(m_GlareSkyLower[nLastWeatherTime],m_GlareSkyLower[nWeatherEffectTime],fTime);
|
|
m_InterCharacterAmbient=color::Interpolation(m_CharacterAmbient[nLastWeatherTime],m_CharacterAmbient[nWeatherEffectTime],fTime);
|
|
m_InterCharacterLight=color::Interpolation(m_CharacterLight[nLastWeatherTime],m_CharacterLight[nWeatherEffectTime],fTime);
|
|
m_InterTerrainColor=color::Interpolation(m_TerrainColor[nLastWeatherTime],m_TerrainColor[nWeatherEffectTime],fTime);
|
|
m_InterWaterColor=color::Interpolation(m_WaterColor[nLastWeatherTime],m_WaterColor[nWeatherEffectTime],fTime);
|
|
m_InterFurGrassColor=color::Interpolation(m_FurGrassColor[nLastWeatherTime],m_FurGrassColor[nWeatherEffectTime],fTime);
|
|
m_InterDetailFixColor = color::Interpolation(m_DetailFixColor[nLastWeatherTime],m_DetailFixColor[nWeatherEffectTime],fTime);
|
|
|
|
|
|
m_SkyScene.SetColor(SkyNeighborColor.c,SkyNeighborColor.c,(DWORD*)dwFogLayerColor);
|
|
if(m_ClearColor)
|
|
m_ClearColor->c=FogColor.c;
|
|
if(CRenderOption::m_FullSceneGlare)
|
|
{
|
|
m_ClearColor->c=0x0;
|
|
m_GF3ClareColor.c=FogColor.c;
|
|
}
|
|
if(!pd3dDevice)
|
|
{
|
|
return;
|
|
}
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_AMBIENT, AmbientColor.c);
|
|
m_InterAmbientColor=AmbientColor;
|
|
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE, TRUE );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGCOLOR, FogColor.c);
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGTABLEMODE, D3DFOG_LINEAR );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGSTART, *((DWORD *)(&fFogStart)) );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGEND, *((DWORD *)(&fFogEnd)) );
|
|
|
|
m_InterSkyFogFar=fSkyFogFar;
|
|
m_InterFogNear=fFogStart;
|
|
m_InterFogFar=fFogEnd;
|
|
|
|
float fAngle=cosf((fSunTime/24.0f)*3.14159f*2.0f);
|
|
vector3 pos=vector3(0.5f,-fAngle,0.5f);
|
|
pos.Normalize();
|
|
|
|
|
|
m_SunScene.SetSunDirection(pos);
|
|
|
|
D3DLIGHT8 light;
|
|
ZeroMemory( &light, sizeof(D3DLIGHT8) );
|
|
light.Type = D3DLIGHT_DIRECTIONAL;
|
|
light.Diffuse.r = LightColor.r/255.0f;
|
|
light.Diffuse.g = LightColor.g/255.0f;
|
|
light.Diffuse.b = LightColor.b/255.0f;
|
|
|
|
vector3 vecLight(-1.0f,-1.0f,-1.0f);
|
|
vecLight.Normalize();
|
|
light.Position.x = light.Direction.x =vecLight.x;
|
|
light.Position.y = light.Direction.y =vecLight.y;
|
|
light.Position.z = light.Direction.z =vecLight.z;
|
|
light.Range = 1000.0f;
|
|
|
|
pd3dDevice->SetLight( 0,&light );
|
|
m_SunLight=light;
|
|
|
|
return;
|
|
}
|
|
if(m_bSubTable == true)
|
|
{
|
|
int iCurrent;
|
|
vector3 *ViewPos = CSceneManager::m_ViewCamera->GetPosition();
|
|
|
|
// CurrentRaw ±¸ÇÑ´Ù
|
|
iCurrent = GetSubWeatherNum(ViewPos);
|
|
|
|
CSubWeatherData *pTable = NULL;
|
|
CSubWeatherData Interpol;
|
|
int iMin = -1;
|
|
int iValue;
|
|
int iTarget;
|
|
for(int ik= 0 ; ik < m_iSubWeatherTableNum; ik++)
|
|
{
|
|
iTarget = abs(iCurrent - m_pSubWeatherTable[ik].m_iIndex);
|
|
if(ik == 0)
|
|
{
|
|
iMin = 0;
|
|
iValue = iTarget;
|
|
}
|
|
else if(iTarget < iValue)
|
|
{
|
|
iValue = iTarget;
|
|
iMin = ik;
|
|
}
|
|
}
|
|
if(iMin != m_iSubCurrentIndex)
|
|
{
|
|
m_iBeforeCurrentIndex = m_iSubCurrentIndex;
|
|
m_iSubCurrentIndex = iMin;
|
|
m_fInterpol = 0.0f;
|
|
}
|
|
|
|
if(m_fInterpol >= 1.0f)
|
|
{
|
|
pTable = &(m_pSubWeatherTable[iMin]);
|
|
}
|
|
else
|
|
{
|
|
for(int iW = 0; iW < DAYCYCLE; iW++)
|
|
{
|
|
|
|
|
|
Interpol.m_SkyCenterColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_SkyCenterColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_SkyCenterColor[iW],m_fInterpol);
|
|
Interpol.m_SkyNeighborColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_SkyNeighborColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_SkyNeighborColor[iW],m_fInterpol);
|
|
|
|
Interpol.m_AmbientColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_AmbientColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_AmbientColor[iW],m_fInterpol);
|
|
Interpol.m_CharacterAmbient[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_CharacterAmbient[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_CharacterAmbient[iW],m_fInterpol);
|
|
Interpol.m_CharacterLight[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_CharacterLight[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_CharacterLight[iW],m_fInterpol);
|
|
Interpol.m_DetailFixColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_DetailFixColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_DetailFixColor[iW],m_fInterpol);
|
|
Interpol.m_FogColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_FogColor[iW],m_fInterpol);
|
|
Interpol.m_FogLayer[iW][0] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogLayer[iW][0],m_pSubWeatherTable[m_iSubCurrentIndex].m_FogLayer[iW][0],m_fInterpol);
|
|
Interpol.m_FogLayer[iW][1] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogLayer[iW][1],m_pSubWeatherTable[m_iSubCurrentIndex].m_FogLayer[iW][1],m_fInterpol);
|
|
Interpol.m_FogLayer[iW][2] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogLayer[iW][2],m_pSubWeatherTable[m_iSubCurrentIndex].m_FogLayer[iW][2],m_fInterpol);
|
|
|
|
Interpol.m_FurGrassColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FurGrassColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_FurGrassColor[iW],m_fInterpol);
|
|
Interpol.m_GlareSkyLower[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_GlareSkyLower[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_GlareSkyLower[iW],m_fInterpol);
|
|
Interpol.m_GlareSkyUpper[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_GlareSkyUpper[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_GlareSkyUpper[iW],m_fInterpol);
|
|
|
|
Interpol.m_LightColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_LightColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_LightColor[iW],m_fInterpol);
|
|
Interpol.m_ObjectAmbientColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_ObjectAmbientColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_ObjectAmbientColor[iW],m_fInterpol);
|
|
|
|
Interpol.m_SpecularReflectionRate[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_SpecularReflectionRate[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_SpecularReflectionRate[iW],m_fInterpol);
|
|
Interpol.m_GrassColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_GrassColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_GrassColor[iW],m_fInterpol);
|
|
Interpol.m_TerrainColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_TerrainColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_TerrainColor[iW],m_fInterpol);
|
|
Interpol.m_WaterColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_WaterColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_WaterColor[iW],m_fInterpol);
|
|
|
|
Interpol.m_SunPosition[iW] = m_pSubWeatherTable[m_iSubCurrentIndex].m_SunPosition[iW];
|
|
|
|
Interpol.m_FogRangeFar[iW] = m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogRangeFar[iW] + ( m_pSubWeatherTable[m_iSubCurrentIndex].m_FogRangeFar[iW] - m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogRangeFar[iW]) * m_fInterpol;
|
|
Interpol.m_FogRangeNear[iW] = m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogRangeNear[iW] + ( m_pSubWeatherTable[m_iSubCurrentIndex].m_FogRangeNear[iW] - m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogRangeNear[iW]) * m_fInterpol;
|
|
|
|
Interpol.m_SkyFogFar[iW] = m_pSubWeatherTable[m_iBeforeCurrentIndex].m_SkyFogFar[iW] + ( m_pSubWeatherTable[m_iSubCurrentIndex].m_SkyFogFar[iW] - m_pSubWeatherTable[m_iBeforeCurrentIndex].m_SkyFogFar[iW]) * m_fInterpol;
|
|
|
|
}
|
|
m_fInterpol += 0.004f;
|
|
pTable = &Interpol;
|
|
}
|
|
if(pTable == NULL)
|
|
{
|
|
//m_bSubTable = false;
|
|
//SetWeather(fTime,pd3dDevice);
|
|
pTable = &m_pSubWeatherTable[0];
|
|
}
|
|
|
|
m_fWeatherTime=fTime;
|
|
color dwFogLayerColor[3];
|
|
color AmbientColor,LightColor,FogColor,SkyCenterColor,SkyNeighborColor;
|
|
float fFogStart,fFogEnd,fSkyFogFar;
|
|
float fSunTime=fTime;
|
|
|
|
const int REALDAYCYCLE=24;
|
|
|
|
for(int i=0;i<REALDAYCYCLE-1;i++)
|
|
{
|
|
if(fTime>=i && fTime <i+1)
|
|
{
|
|
fTime-=i;
|
|
AmbientColor=color::Interpolation(pTable->m_AmbientColor[i],pTable->m_AmbientColor[i+1],fTime);
|
|
LightColor=color::Interpolation(pTable->m_LightColor[i],pTable->m_LightColor[i+1],fTime);
|
|
FogColor=color::Interpolation(pTable->m_FogColor[i],pTable->m_FogColor[i+1],fTime);
|
|
|
|
SkyCenterColor=color::Interpolation(pTable->m_SkyCenterColor[i],pTable->m_SkyCenterColor[i+1],fTime);
|
|
SkyNeighborColor=color::Interpolation(pTable->m_SkyNeighborColor[i],pTable->m_SkyNeighborColor[i+1],fTime);
|
|
|
|
fFogStart=pTable->m_FogRangeNear[i]+(pTable->m_FogRangeNear[i+1]-pTable->m_FogRangeNear[i])*(fTime-(int)fTime);
|
|
fFogEnd=pTable->m_FogRangeFar[i]+(pTable->m_FogRangeFar[i+1]-pTable->m_FogRangeFar[i])*(fTime-(int)fTime);
|
|
fSkyFogFar=pTable->m_SkyFogFar[i]+(pTable->m_SkyFogFar[i+1]-pTable->m_SkyFogFar[i])*(fTime-(int)fTime);
|
|
/*
|
|
if(m_SunPosition[i+1]==0.0f)
|
|
{
|
|
fSunTime=m_SunPosition[i]+(3.1415f*2.0f-m_SunPosition[i])*(fTime-(int)fTime);
|
|
}
|
|
else
|
|
{
|
|
fSunTime=m_SunPosition[i]+(m_SunPosition[i+1]-m_SunPosition[i])*(fTime-(int)fTime);
|
|
}
|
|
*/
|
|
m_InterObjectAmbientColor=color::Interpolation(pTable->m_ObjectAmbientColor[i],pTable->m_ObjectAmbientColor[i+1],fTime);
|
|
|
|
dwFogLayerColor[0]=color::Interpolation(pTable->m_FogLayer[i][0],pTable->m_FogLayer[i+1][0],fTime);
|
|
dwFogLayerColor[1]=color::Interpolation(pTable->m_FogLayer[i][1],pTable->m_FogLayer[i+1][1],fTime);
|
|
dwFogLayerColor[2]=color::Interpolation(pTable->m_FogLayer[i][2],pTable->m_FogLayer[i+1][2],fTime);
|
|
|
|
m_InterSpecularReflectionRate=color::Interpolation(pTable->m_SpecularReflectionRate[i],pTable->m_SpecularReflectionRate[i+1],fTime);
|
|
m_InterGrassColor=color::Interpolation(pTable->m_GrassColor[i],pTable->m_GrassColor[i+1],fTime);
|
|
m_InterGlareSkyUpper=color::Interpolation(pTable->m_GlareSkyUpper[i],pTable->m_GlareSkyUpper[i+1],fTime);
|
|
m_InterGlareSkyLower=color::Interpolation(pTable->m_GlareSkyLower[i],pTable->m_GlareSkyLower[i+1],fTime);
|
|
m_InterCharacterAmbient=color::Interpolation(pTable->m_CharacterAmbient[i],pTable->m_CharacterAmbient[i+1],fTime);
|
|
m_InterCharacterLight=color::Interpolation(pTable->m_CharacterLight[i],pTable->m_CharacterLight[i+1],fTime);
|
|
m_InterTerrainColor=color::Interpolation(pTable->m_TerrainColor[i],pTable->m_TerrainColor[i+1],fTime);
|
|
m_InterWaterColor=color::Interpolation(pTable->m_WaterColor[i],pTable->m_WaterColor[i+1],fTime);
|
|
|
|
m_InterFurGrassColor=color::Interpolation(pTable->m_FurGrassColor[i],pTable->m_FurGrassColor[i+1],fTime);
|
|
|
|
m_InterDetailFixColor = color::Interpolation(pTable->m_DetailFixColor[i],pTable->m_DetailFixColor[i+1],fTime);
|
|
|
|
|
|
|
|
}
|
|
}
|
|
if(fTime>=REALDAYCYCLE-1)
|
|
//if(DAYCYCLE-1 <= fTime)
|
|
{
|
|
fTime-=REALDAYCYCLE-1;
|
|
AmbientColor=color::Interpolation(pTable->m_AmbientColor[DAYCYCLE-1],pTable->m_AmbientColor[0],fTime);
|
|
LightColor=color::Interpolation(pTable->m_LightColor[DAYCYCLE-1],pTable->m_LightColor[0],fTime);
|
|
FogColor=color::Interpolation(pTable->m_FogColor[DAYCYCLE-1],pTable->m_FogColor[0],fTime);
|
|
|
|
SkyCenterColor=color::Interpolation(pTable->m_SkyCenterColor[DAYCYCLE-1],pTable->m_SkyCenterColor[0],fTime);
|
|
SkyNeighborColor=color::Interpolation(pTable->m_SkyNeighborColor[DAYCYCLE-1],pTable->m_SkyNeighborColor[0],fTime);
|
|
|
|
fFogStart=m_FogRangeNear[DAYCYCLE-1]+(pTable->m_FogRangeNear[0]-pTable->m_FogRangeNear[DAYCYCLE-1])*(fTime-(int)fTime);
|
|
fFogEnd=m_FogRangeFar[DAYCYCLE-1]+(pTable->m_FogRangeFar[0]-pTable->m_FogRangeFar[DAYCYCLE-1])*(fTime-(int)fTime);
|
|
fSkyFogFar=m_SkyFogFar[DAYCYCLE-1]+(pTable->m_SkyFogFar[0]-pTable->m_SkyFogFar[DAYCYCLE-1])*(fTime-(int)fTime);
|
|
|
|
//fSunTime=m_SunPosition[DAYCYCLE-1]+(m_SunPosition[0]-m_SunPosition[DAYCYCLE-1])*(fTime-(int)fTime);
|
|
|
|
m_InterObjectAmbientColor=color::Interpolation(pTable->m_ObjectAmbientColor[DAYCYCLE-1],pTable->m_ObjectAmbientColor[0],fTime);
|
|
|
|
dwFogLayerColor[0]=color::Interpolation(pTable->m_FogLayer[DAYCYCLE-1][0],pTable->m_FogLayer[0][0],fTime);
|
|
dwFogLayerColor[1]=color::Interpolation(pTable->m_FogLayer[DAYCYCLE-1][1],pTable->m_FogLayer[0][1],fTime);
|
|
dwFogLayerColor[2]=color::Interpolation(pTable->m_FogLayer[DAYCYCLE-1][2],pTable->m_FogLayer[0][2],fTime);
|
|
|
|
m_InterSpecularReflectionRate=color::Interpolation(pTable->m_SpecularReflectionRate[DAYCYCLE-1],pTable->m_SpecularReflectionRate[0],fTime);
|
|
m_InterGrassColor=color::Interpolation(pTable->m_GrassColor[DAYCYCLE-1],pTable->m_GrassColor[0],fTime);
|
|
m_InterGlareSkyUpper=color::Interpolation(pTable->m_GlareSkyUpper[DAYCYCLE-1],pTable->m_GlareSkyUpper[0],fTime);
|
|
m_InterGlareSkyLower=color::Interpolation(pTable->m_GlareSkyLower[DAYCYCLE-1],pTable->m_GlareSkyLower[0],fTime);
|
|
m_InterCharacterAmbient=color::Interpolation(pTable->m_CharacterAmbient[DAYCYCLE-1],pTable->m_CharacterAmbient[0],fTime);
|
|
m_InterCharacterLight=color::Interpolation(pTable->m_CharacterLight[DAYCYCLE-1],pTable->m_CharacterLight[0],fTime);
|
|
m_InterTerrainColor=color::Interpolation(pTable->m_TerrainColor[DAYCYCLE-1],pTable->m_TerrainColor[0],fTime);
|
|
m_InterWaterColor=color::Interpolation(pTable->m_WaterColor[DAYCYCLE-1],pTable->m_WaterColor[0],fTime);
|
|
m_InterFurGrassColor=color::Interpolation(pTable->m_FurGrassColor[DAYCYCLE-1],pTable->m_FurGrassColor[0],fTime);
|
|
m_InterDetailFixColor = color::Interpolation(pTable->m_DetailFixColor[DAYCYCLE-1],pTable->m_DetailFixColor[0],fTime);
|
|
|
|
}
|
|
m_SkyScene.SetColor(SkyNeighborColor.c,SkyNeighborColor.c,(DWORD*)dwFogLayerColor);
|
|
//m_CloudScene.SetColor(SkyNeighborColor.c,SkyNeighborColor.c,(DWORD*)dwFogLayerColor);
|
|
if(m_ClearColor)
|
|
m_ClearColor->c=FogColor.c;
|
|
if(CRenderOption::m_FullSceneGlare)
|
|
{
|
|
if(m_ClearColor)
|
|
m_ClearColor->c=0x0;
|
|
m_GF3ClareColor.c=FogColor.c;
|
|
}
|
|
if(!pd3dDevice)
|
|
{
|
|
return;
|
|
}
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_AMBIENT, AmbientColor.c);
|
|
m_InterAmbientColor=AmbientColor;
|
|
|
|
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE, TRUE );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGCOLOR, FogColor.c);
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGTABLEMODE, D3DFOG_LINEAR );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGSTART, *((DWORD *)(&fFogStart)) );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGEND, *((DWORD *)(&fFogEnd)) );
|
|
|
|
m_InterSkyFogFar=fSkyFogFar;
|
|
m_InterFogNear=fFogStart;
|
|
m_InterFogFar=fFogEnd;
|
|
|
|
|
|
|
|
|
|
/*
|
|
if(m_SunPosition[i+1]==0.0f)
|
|
{
|
|
fSunTime=m_SunPosition[i]+(3.1415f*2.0f-m_SunPosition[i])*(fTime-(int)fTime);
|
|
}
|
|
else
|
|
{
|
|
fSunTime=m_SunPosition[i]+(m_SunPosition[i+1]-m_SunPosition[i])*(fTime-(int)fTime);
|
|
}
|
|
// Calc Sun position
|
|
float x=sinf(fSunTime);
|
|
float z=cosf(fSunTime);
|
|
float y=0.0f;
|
|
matrix matPosSun,matRotSun;
|
|
matPosSun.Translation(vector3(x,y,z));
|
|
matRotSun.Rotation(vector3(1.0f,1.0f,1.0f),-3.1415f/3.0f);
|
|
matPosSun=matPosSun*matRotSun;
|
|
vector3 pos=matPosSun.GetLoc();
|
|
//vector3 pos=vector3(1.0f,1.0f,1.0f);
|
|
*/
|
|
//matRotSun.Rotation(vector3(1.0f,1.0f,1.0f),-3.1415f/3.0f);
|
|
float fAngle=cosf((fSunTime/24.0f)*3.14159f*2.0f);
|
|
vector3 pos=vector3(0.5f,-fAngle,0.5f);
|
|
pos.Normalize();
|
|
|
|
//pos.Normalize();
|
|
m_SunScene.SetSunDirection(pos);
|
|
|
|
D3DLIGHT8 light;
|
|
ZeroMemory( &light, sizeof(D3DLIGHT8) );
|
|
light.Type = D3DLIGHT_DIRECTIONAL;
|
|
light.Diffuse.r = LightColor.r/255.0f;
|
|
light.Diffuse.g = LightColor.g/255.0f;
|
|
light.Diffuse.b = LightColor.b/255.0f;
|
|
/*
|
|
light.Position.x = light.Direction.x = -pos.x;
|
|
light.Position.y = light.Direction.y = -pos.y;
|
|
light.Position.z = light.Direction.z = -pos.z;
|
|
*/
|
|
vector3 vecLight(-1.0f,-1.0f,-1.0f);
|
|
vecLight.Normalize();
|
|
light.Position.x = light.Direction.x =vecLight.x;
|
|
light.Position.y = light.Direction.y =vecLight.y;
|
|
light.Position.z = light.Direction.z =vecLight.z;
|
|
light.Range = 1000.0f;
|
|
pd3dDevice->SetLight( 0,&light );
|
|
m_SunLight=light;
|
|
|
|
light.Diffuse.r = m_InterTerrainColor.r/255.0f;
|
|
light.Diffuse.g = m_InterTerrainColor.g/255.0f;
|
|
light.Diffuse.b = m_InterTerrainColor.b/255.0f;
|
|
m_TerrainLight=light;
|
|
CSectorScene::m_TerrainDetailFixColor = m_InterDetailFixColor;
|
|
}
|
|
else
|
|
{
|
|
|
|
m_fWeatherTime=fTime;
|
|
color dwFogLayerColor[3];
|
|
color AmbientColor,LightColor,FogColor,SkyCenterColor,SkyNeighborColor;
|
|
float fFogStart,fFogEnd,fSkyFogFar;
|
|
float fSunTime=fTime;
|
|
|
|
const int REALDAYCYCLE=24;
|
|
|
|
for(int i=0;i<REALDAYCYCLE-1;i++)
|
|
{
|
|
if(fTime>=i && fTime <i+1)
|
|
{
|
|
fTime-=i;
|
|
AmbientColor=color::Interpolation(m_AmbientColor[i],m_AmbientColor[i+1],fTime);
|
|
LightColor=color::Interpolation(m_LightColor[i],m_LightColor[i+1],fTime);
|
|
FogColor=color::Interpolation(m_FogColor[i],m_FogColor[i+1],fTime);
|
|
|
|
SkyCenterColor=color::Interpolation(m_SkyCenterColor[i],m_SkyCenterColor[i+1],fTime);
|
|
SkyNeighborColor=color::Interpolation(m_SkyNeighborColor[i],m_SkyNeighborColor[i+1],fTime);
|
|
|
|
fFogStart=m_FogRangeNear[i]+(m_FogRangeNear[i+1]-m_FogRangeNear[i])*(fTime-(int)fTime);
|
|
fFogEnd=m_FogRangeFar[i]+(m_FogRangeFar[i+1]-m_FogRangeFar[i])*(fTime-(int)fTime);
|
|
fSkyFogFar=m_SkyFogFar[i]+(m_SkyFogFar[i+1]-m_SkyFogFar[i])*(fTime-(int)fTime);
|
|
/*
|
|
if(m_SunPosition[i+1]==0.0f)
|
|
{
|
|
fSunTime=m_SunPosition[i]+(3.1415f*2.0f-m_SunPosition[i])*(fTime-(int)fTime);
|
|
}
|
|
else
|
|
{
|
|
fSunTime=m_SunPosition[i]+(m_SunPosition[i+1]-m_SunPosition[i])*(fTime-(int)fTime);
|
|
}
|
|
*/
|
|
m_InterObjectAmbientColor=color::Interpolation(m_ObjectAmbientColor[i],m_ObjectAmbientColor[i+1],fTime);
|
|
|
|
dwFogLayerColor[0]=color::Interpolation(m_FogLayer[i][0],m_FogLayer[i+1][0],fTime);
|
|
dwFogLayerColor[1]=color::Interpolation(m_FogLayer[i][1],m_FogLayer[i+1][1],fTime);
|
|
dwFogLayerColor[2]=color::Interpolation(m_FogLayer[i][2],m_FogLayer[i+1][2],fTime);
|
|
|
|
m_InterSpecularReflectionRate=color::Interpolation(m_SpecularReflectionRate[i],m_SpecularReflectionRate[i+1],fTime);
|
|
m_InterGrassColor=color::Interpolation(m_GrassColor[i],m_GrassColor[i+1],fTime);
|
|
m_InterGlareSkyUpper=color::Interpolation(m_GlareSkyUpper[i],m_GlareSkyUpper[i+1],fTime);
|
|
m_InterGlareSkyLower=color::Interpolation(m_GlareSkyLower[i],m_GlareSkyLower[i+1],fTime);
|
|
m_InterCharacterAmbient=color::Interpolation(m_CharacterAmbient[i],m_CharacterAmbient[i+1],fTime);
|
|
m_InterCharacterLight=color::Interpolation(m_CharacterLight[i],m_CharacterLight[i+1],fTime);
|
|
m_InterTerrainColor=color::Interpolation(m_TerrainColor[i],m_TerrainColor[i+1],fTime);
|
|
m_InterWaterColor=color::Interpolation(m_WaterColor[i],m_WaterColor[i+1],fTime);
|
|
|
|
m_InterFurGrassColor=color::Interpolation(m_FurGrassColor[i],m_FurGrassColor[i+1],fTime);
|
|
|
|
m_InterDetailFixColor = color::Interpolation(m_DetailFixColor[i],m_DetailFixColor[i+1],fTime);
|
|
|
|
|
|
|
|
}
|
|
}
|
|
if(fTime>=REALDAYCYCLE-1)
|
|
//if(DAYCYCLE-1 <= fTime)
|
|
{
|
|
fTime-=REALDAYCYCLE-1;
|
|
AmbientColor=color::Interpolation(m_AmbientColor[DAYCYCLE-1],m_AmbientColor[0],fTime);
|
|
LightColor=color::Interpolation(m_LightColor[DAYCYCLE-1],m_LightColor[0],fTime);
|
|
FogColor=color::Interpolation(m_FogColor[DAYCYCLE-1],m_FogColor[0],fTime);
|
|
|
|
SkyCenterColor=color::Interpolation(m_SkyCenterColor[DAYCYCLE-1],m_SkyCenterColor[0],fTime);
|
|
SkyNeighborColor=color::Interpolation(m_SkyNeighborColor[DAYCYCLE-1],m_SkyNeighborColor[0],fTime);
|
|
|
|
fFogStart=m_FogRangeNear[DAYCYCLE-1]+(m_FogRangeNear[0]-m_FogRangeNear[DAYCYCLE-1])*(fTime-(int)fTime);
|
|
fFogEnd=m_FogRangeFar[DAYCYCLE-1]+(m_FogRangeFar[0]-m_FogRangeFar[DAYCYCLE-1])*(fTime-(int)fTime);
|
|
fSkyFogFar=m_SkyFogFar[DAYCYCLE-1]+(m_SkyFogFar[0]-m_SkyFogFar[DAYCYCLE-1])*(fTime-(int)fTime);
|
|
|
|
//fSunTime=m_SunPosition[DAYCYCLE-1]+(m_SunPosition[0]-m_SunPosition[DAYCYCLE-1])*(fTime-(int)fTime);
|
|
|
|
m_InterObjectAmbientColor=color::Interpolation(m_ObjectAmbientColor[DAYCYCLE-1],m_ObjectAmbientColor[0],fTime);
|
|
|
|
dwFogLayerColor[0]=color::Interpolation(m_FogLayer[DAYCYCLE-1][0],m_FogLayer[0][0],fTime);
|
|
dwFogLayerColor[1]=color::Interpolation(m_FogLayer[DAYCYCLE-1][1],m_FogLayer[0][1],fTime);
|
|
dwFogLayerColor[2]=color::Interpolation(m_FogLayer[DAYCYCLE-1][2],m_FogLayer[0][2],fTime);
|
|
|
|
m_InterSpecularReflectionRate=color::Interpolation(m_SpecularReflectionRate[DAYCYCLE-1],m_SpecularReflectionRate[0],fTime);
|
|
m_InterGrassColor=color::Interpolation(m_GrassColor[DAYCYCLE-1],m_GrassColor[0],fTime);
|
|
m_InterGlareSkyUpper=color::Interpolation(m_GlareSkyUpper[DAYCYCLE-1],m_GlareSkyUpper[0],fTime);
|
|
m_InterGlareSkyLower=color::Interpolation(m_GlareSkyLower[DAYCYCLE-1],m_GlareSkyLower[0],fTime);
|
|
m_InterCharacterAmbient=color::Interpolation(m_CharacterAmbient[DAYCYCLE-1],m_CharacterAmbient[0],fTime);
|
|
m_InterCharacterLight=color::Interpolation(m_CharacterLight[DAYCYCLE-1],m_CharacterLight[0],fTime);
|
|
m_InterTerrainColor=color::Interpolation(m_TerrainColor[DAYCYCLE-1],m_TerrainColor[0],fTime);
|
|
m_InterWaterColor=color::Interpolation(m_WaterColor[DAYCYCLE-1],m_WaterColor[0],fTime);
|
|
m_InterFurGrassColor=color::Interpolation(m_FurGrassColor[DAYCYCLE-1],m_FurGrassColor[0],fTime);
|
|
m_InterDetailFixColor = color::Interpolation(m_DetailFixColor[DAYCYCLE-1],m_DetailFixColor[0],fTime);
|
|
|
|
}
|
|
m_SkyScene.SetColor(SkyNeighborColor.c,SkyNeighborColor.c,(DWORD*)dwFogLayerColor);
|
|
//m_CloudScene.SetColor(SkyNeighborColor.c,SkyNeighborColor.c,(DWORD*)dwFogLayerColor);
|
|
if(m_ClearColor)
|
|
m_ClearColor->c=FogColor.c;
|
|
if(CRenderOption::m_FullSceneGlare)
|
|
{
|
|
if(m_ClearColor)
|
|
m_ClearColor->c=0x0;
|
|
m_GF3ClareColor.c=FogColor.c;
|
|
}
|
|
if(!pd3dDevice)
|
|
{
|
|
return;
|
|
}
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_AMBIENT, AmbientColor.c);
|
|
m_InterAmbientColor=AmbientColor;
|
|
|
|
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE, TRUE );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGCOLOR, FogColor.c);
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGTABLEMODE, D3DFOG_LINEAR );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGSTART, *((DWORD *)(&fFogStart)) );
|
|
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGEND, *((DWORD *)(&fFogEnd)) );
|
|
|
|
m_InterSkyFogFar=fSkyFogFar;
|
|
m_InterFogNear=fFogStart;
|
|
m_InterFogFar=fFogEnd;
|
|
|
|
|
|
|
|
|
|
/*
|
|
if(m_SunPosition[i+1]==0.0f)
|
|
{
|
|
fSunTime=m_SunPosition[i]+(3.1415f*2.0f-m_SunPosition[i])*(fTime-(int)fTime);
|
|
}
|
|
else
|
|
{
|
|
fSunTime=m_SunPosition[i]+(m_SunPosition[i+1]-m_SunPosition[i])*(fTime-(int)fTime);
|
|
}
|
|
// Calc Sun position
|
|
float x=sinf(fSunTime);
|
|
float z=cosf(fSunTime);
|
|
float y=0.0f;
|
|
matrix matPosSun,matRotSun;
|
|
matPosSun.Translation(vector3(x,y,z));
|
|
matRotSun.Rotation(vector3(1.0f,1.0f,1.0f),-3.1415f/3.0f);
|
|
matPosSun=matPosSun*matRotSun;
|
|
vector3 pos=matPosSun.GetLoc();
|
|
//vector3 pos=vector3(1.0f,1.0f,1.0f);
|
|
*/
|
|
//matRotSun.Rotation(vector3(1.0f,1.0f,1.0f),-3.1415f/3.0f);
|
|
float fAngle=cosf((fSunTime/24.0f)*3.14159f*2.0f);
|
|
vector3 pos=vector3(0.5f,-fAngle,0.5f);
|
|
pos.Normalize();
|
|
|
|
//pos.Normalize();
|
|
m_SunScene.SetSunDirection(pos);
|
|
|
|
D3DLIGHT8 light;
|
|
ZeroMemory( &light, sizeof(D3DLIGHT8) );
|
|
light.Type = D3DLIGHT_DIRECTIONAL;
|
|
light.Diffuse.r = LightColor.r/255.0f;
|
|
light.Diffuse.g = LightColor.g/255.0f;
|
|
light.Diffuse.b = LightColor.b/255.0f;
|
|
/*
|
|
light.Position.x = light.Direction.x = -pos.x;
|
|
light.Position.y = light.Direction.y = -pos.y;
|
|
light.Position.z = light.Direction.z = -pos.z;
|
|
*/
|
|
vector3 vecLight(-1.0f,-1.0f,-1.0f);
|
|
vecLight.Normalize();
|
|
light.Position.x = light.Direction.x =vecLight.x;
|
|
light.Position.y = light.Direction.y =vecLight.y;
|
|
light.Position.z = light.Direction.z =vecLight.z;
|
|
light.Range = 1000.0f;
|
|
pd3dDevice->SetLight( 0,&light );
|
|
m_SunLight=light;
|
|
|
|
light.Diffuse.r = m_InterTerrainColor.r/255.0f;
|
|
light.Diffuse.g = m_InterTerrainColor.g/255.0f;
|
|
light.Diffuse.b = m_InterTerrainColor.b/255.0f;
|
|
m_TerrainLight=light;
|
|
CSectorScene::m_TerrainDetailFixColor = m_InterDetailFixColor;
|
|
}
|
|
}
|
|
|
|
void CWeatherManager::LoadSubTable(int *Arr,int iNum)
|
|
{
|
|
char strRawName[256] = {0,};
|
|
char strSubTableName[256] = {0,};
|
|
char strGrassName[256] = {0,};
|
|
|
|
char *strPtr;
|
|
FILE *fp = NULL;
|
|
m_iSubWeatherTableNum = iNum;
|
|
|
|
strcpy(strRawName,WEATHERPATH);
|
|
strPtr = strrchr(strRawName,'.');
|
|
strPtr++;
|
|
*(strPtr) = 'r';
|
|
strPtr++;
|
|
*(strPtr) = 'a';
|
|
strPtr++;
|
|
*(strPtr) = 'w';
|
|
strPtr++;
|
|
|
|
fp = fopen(strRawName,"rb");
|
|
if(fp == NULL)
|
|
{
|
|
return;
|
|
}
|
|
m_pWeaterTableRaw = new unsigned char[RAWTABLESIZE * RAWTABLESIZE];
|
|
fread((void *)m_pWeaterTableRaw,sizeof(unsigned char) * RAWTABLESIZE * RAWTABLESIZE,1,fp);
|
|
fclose(fp);
|
|
|
|
if(Arr == NULL)
|
|
return;
|
|
|
|
m_pSubWeatherTable = new CSubWeatherData[iNum];
|
|
for(int ik = 0; ik < iNum; ik++ )
|
|
{
|
|
int iCurrentIndex = Arr[ik];
|
|
memset(strSubTableName,0,sizeof(char) * 256);
|
|
memset(strGrassName,0,sizeof(char) * 256);
|
|
strcpy(strSubTableName,WEATHERPATH);
|
|
strPtr = strrchr(strSubTableName,'.');
|
|
sprintf(strPtr,"_%d.dat",iCurrentIndex);
|
|
fp = fopen(strSubTableName,"rb");
|
|
if(fp == NULL)
|
|
{
|
|
delete[] m_pSubWeatherTable;
|
|
m_pSubWeatherTable = NULL;
|
|
delete[] m_pWeaterTableRaw;
|
|
m_pWeaterTableRaw = NULL;
|
|
|
|
return;
|
|
}
|
|
m_pSubWeatherTable[ik].m_iIndex = iCurrentIndex;
|
|
|
|
sprintf(strGrassName,"grass_%d.dds",iCurrentIndex);
|
|
CTexture::SetPath(NATURETEXTUREPATH);
|
|
char strTestGrass[256] = {0,};
|
|
sprintf(strTestGrass,"%s/%s",NATURETEXTUREPATH,strGrassName);
|
|
FILE *fTest = fopen(strTestGrass,"rb");
|
|
if(fTest)
|
|
{
|
|
fclose(fTest);
|
|
m_pSubWeatherTable[ik].m_pGrassTexture = new CTexture();
|
|
m_pSubWeatherTable[ik].m_pGrassTexture->Load(strGrassName);
|
|
}
|
|
else
|
|
{
|
|
m_pSubWeatherTable[ik].m_pGrassTexture = NULL;
|
|
}
|
|
DWORD color;
|
|
float lens;
|
|
char strNew[3];
|
|
|
|
fread((char *)&strNew,sizeof(char) * 3,1,fp);
|
|
if(strNew[0] == 'N' &&
|
|
strNew[1] == 'E' &&
|
|
strNew[2] == 'W')
|
|
{
|
|
for(int i=0;i<DAYCYCLE;i++)
|
|
{
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_SkyCenterColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_SkyNeighborColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_FogColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_LightColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_AmbientColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_FogLayer[i][0].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_FogLayer[i][1].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_FogLayer[i][2].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_ObjectAmbientColor[i].c=color;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_pSubWeatherTable[ik].m_FogRangeNear[i]=lens;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_pSubWeatherTable[ik].m_FogRangeFar[i]=lens;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_pSubWeatherTable[ik].m_SkyFogFar[i]=lens;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_pSubWeatherTable[ik].m_SunPosition[i]=lens;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_DetailFixColor[i].c = color;
|
|
|
|
//CSectorScene::m_TerrainDetailFixColor.c=color;
|
|
|
|
}
|
|
|
|
for(i=0;i<DAYCYCLE;i++)
|
|
{
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_SpecularReflectionRate[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_GrassColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_GlareSkyUpper[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_GlareSkyLower[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_CharacterAmbient[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_CharacterLight[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_TerrainColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_WaterColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_FurGrassColor[i].c=color;
|
|
}
|
|
if(!feof(fp))
|
|
{
|
|
char tmpHeader[2];
|
|
fread((char *)tmpHeader,sizeof(char) * 2, 1, fp);
|
|
if(tmpHeader[0] == 'N' &&
|
|
tmpHeader[1] == 'C')
|
|
{
|
|
float fColor[5];
|
|
fread((float *)fColor,sizeof(float) * 5,1,fp);
|
|
|
|
CSceneManager::m_CharacterLight.Diffuse.r = fColor[0];
|
|
CSceneManager::m_CharacterLight.Diffuse.g = fColor[1];
|
|
CSceneManager::m_CharacterLight.Diffuse.b = fColor[2];
|
|
CSceneManager::m_CharacterLight.Range = fColor[3];
|
|
CSceneManager::m_fGlowPlaneRange = fColor[4];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
else {
|
|
fseek(fp,0,SEEK_SET);
|
|
|
|
for(int i=0;i<DAYCYCLE;i++)
|
|
{
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_SkyCenterColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_SkyNeighborColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_FogColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_LightColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_AmbientColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_FogLayer[i][0].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_FogLayer[i][1].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_FogLayer[i][2].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_ObjectAmbientColor[i].c=color;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_pSubWeatherTable[ik].m_FogRangeNear[i]=lens;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_pSubWeatherTable[ik].m_FogRangeFar[i]=lens;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_pSubWeatherTable[ik].m_SkyFogFar[i]=lens;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_pSubWeatherTable[ik].m_SunPosition[i]=lens;
|
|
}
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
CSectorScene::m_TerrainDetailFixColor.c=color;
|
|
|
|
for(i=0;i<DAYCYCLE;i++)
|
|
{
|
|
m_pSubWeatherTable[ik].m_DetailFixColor[i].c = CSectorScene::m_TerrainDetailFixColor.c;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_SpecularReflectionRate[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_GrassColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_GlareSkyUpper[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_GlareSkyLower[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_CharacterAmbient[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_CharacterLight[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_TerrainColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_WaterColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_pSubWeatherTable[ik].m_FurGrassColor[i].c=color;
|
|
}
|
|
}
|
|
fclose(fp);
|
|
}
|
|
m_bSubTable = true;
|
|
|
|
|
|
}
|
|
bool CWeatherManager::Load()
|
|
{
|
|
FILE *fp=fopen(WEATHERPATH,"rb");
|
|
if(fp!=NULL)
|
|
{
|
|
DWORD color;
|
|
float lens;
|
|
char strNew[3];
|
|
|
|
fread((char *)&strNew,sizeof(char) * 3,1,fp);
|
|
if(strNew[0] == 'N' &&
|
|
strNew[1] == 'E' &&
|
|
strNew[2] == 'W')
|
|
{
|
|
for(int i=0;i<DAYCYCLE;i++)
|
|
{
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_SkyCenterColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_SkyNeighborColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_FogColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_LightColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_AmbientColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_FogLayer[i][0].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_FogLayer[i][1].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_FogLayer[i][2].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_ObjectAmbientColor[i].c=color;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_FogRangeNear[i]=lens;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_FogRangeFar[i]=lens;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_SkyFogFar[i]=lens;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_SunPosition[i]=lens;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_DetailFixColor[i].c = color;
|
|
|
|
//CSectorScene::m_TerrainDetailFixColor.c=color;
|
|
|
|
}
|
|
|
|
for(i=0;i<DAYCYCLE;i++)
|
|
{
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_SpecularReflectionRate[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_GrassColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_GlareSkyUpper[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_GlareSkyLower[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_CharacterAmbient[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_CharacterLight[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_TerrainColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_WaterColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_FurGrassColor[i].c=color;
|
|
}
|
|
if(!feof(fp))
|
|
{
|
|
char tmpHeader[2];
|
|
fread((char *)tmpHeader,sizeof(char) * 2, 1, fp);
|
|
if(tmpHeader[0] == 'N' &&
|
|
tmpHeader[1] == 'C')
|
|
{
|
|
float fColor[5];
|
|
fread((float *)fColor,sizeof(float) * 5,1,fp);
|
|
|
|
CSceneManager::m_CharacterLight.Diffuse.r = fColor[0];
|
|
CSceneManager::m_CharacterLight.Diffuse.g = fColor[1];
|
|
CSceneManager::m_CharacterLight.Diffuse.b = fColor[2];
|
|
CSceneManager::m_CharacterLight.Range = fColor[3];
|
|
CSceneManager::m_fGlowPlaneRange = fColor[4];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
else {
|
|
fseek(fp,0,SEEK_SET);
|
|
|
|
for(int i=0;i<DAYCYCLE;i++)
|
|
{
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_SkyCenterColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_SkyNeighborColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_FogColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_LightColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_AmbientColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_FogLayer[i][0].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_FogLayer[i][1].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_FogLayer[i][2].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_ObjectAmbientColor[i].c=color;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_FogRangeNear[i]=lens;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_FogRangeFar[i]=lens;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_SkyFogFar[i]=lens;
|
|
|
|
fread(&lens,sizeof(float),1,fp);
|
|
m_SunPosition[i]=lens;
|
|
}
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
CSectorScene::m_TerrainDetailFixColor.c=color;
|
|
|
|
for(i=0;i<DAYCYCLE;i++)
|
|
{
|
|
m_DetailFixColor[i].c = CSectorScene::m_TerrainDetailFixColor.c;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_SpecularReflectionRate[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_GrassColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_GlareSkyUpper[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_GlareSkyLower[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_CharacterAmbient[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_CharacterLight[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_TerrainColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_WaterColor[i].c=color;
|
|
|
|
fread(&color,sizeof(DWORD),1,fp);
|
|
m_FurGrassColor[i].c=color;
|
|
}
|
|
}
|
|
fclose(fp);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
void CWeatherManager::SaveSub()
|
|
{
|
|
if(m_bSubTable)
|
|
{
|
|
int iSub = m_iSubCurrentIndex;
|
|
char strName[256] = {0,};
|
|
char strN[256] = {0,};
|
|
char *strPtr;
|
|
|
|
strcpy(strName,WEATHERPATH);
|
|
strPtr = strrchr(strName,'.');
|
|
*(strPtr) = 0;
|
|
strPtr++;
|
|
sprintf(strN,"%s_%d.dat",strName,m_pSubWeatherTable[iSub].m_iIndex);
|
|
|
|
FILE *fp=fopen(strN,"wb");
|
|
if(fp!=NULL)
|
|
{
|
|
char strNew[4] = "NEW";
|
|
fwrite((char *)strNew,sizeof(char) * 3,1,fp);
|
|
|
|
DWORD color;
|
|
float lens;
|
|
for(int i=0;i<DAYCYCLE;i++)
|
|
{
|
|
color=m_pSubWeatherTable[iSub].m_SkyCenterColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_SkyNeighborColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_FogColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_LightColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_AmbientColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_FogLayer[i][0].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_FogLayer[i][1].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_FogLayer[i][2].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_ObjectAmbientColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
lens=m_pSubWeatherTable[iSub].m_FogRangeNear[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_pSubWeatherTable[iSub].m_FogRangeFar[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_pSubWeatherTable[iSub].m_SkyFogFar[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_pSubWeatherTable[iSub].m_SunPosition[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_DetailFixColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
}
|
|
|
|
|
|
for(i=0;i<DAYCYCLE;i++)
|
|
{
|
|
color=m_pSubWeatherTable[iSub].m_SpecularReflectionRate[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_GrassColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_GlareSkyUpper[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_GlareSkyLower[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_CharacterAmbient[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_CharacterLight[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_TerrainColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_WaterColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_pSubWeatherTable[iSub].m_FurGrassColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
}
|
|
|
|
char tmpHeader[2];
|
|
tmpHeader[0] = 'N';
|
|
tmpHeader[1] = 'C';
|
|
|
|
fwrite((char *)tmpHeader,sizeof(char) * 2, 1, fp);
|
|
float fColor[5];
|
|
|
|
fColor[0] = CSceneManager::m_CharacterLight.Diffuse.r;
|
|
fColor[1] = CSceneManager::m_CharacterLight.Diffuse.g;
|
|
fColor[2] = CSceneManager::m_CharacterLight.Diffuse.b;
|
|
fColor[3] = CSceneManager::m_CharacterLight.Range;
|
|
fColor[4] = CSceneManager::m_fGlowPlaneRange;
|
|
|
|
fwrite((float *)fColor,sizeof(float) * 5,1,fp);
|
|
|
|
|
|
/*for(int i=0;i<DAYCYCLE;i++)
|
|
{
|
|
color=m_SkyCenterColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_SkyNeighborColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_LightColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_AmbientColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][0].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][1].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][2].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_ObjectAmbientColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
lens=m_FogRangeNear[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_FogRangeFar[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_SkyFogFar[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_SunPosition[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
}
|
|
color=CSectorScene::m_TerrainDetailFixColor.c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
for(i=0;i<DAYCYCLE;i++)
|
|
{
|
|
color=m_SpecularReflectionRate[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GrassColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GlareSkyUpper[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GlareSkyLower[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_CharacterAmbient[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_CharacterLight[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_TerrainColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_WaterColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FurGrassColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
}
|
|
*/
|
|
fclose(fp);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
FILE *fp=fopen(WEATHERPATH,"wb");
|
|
if(fp!=NULL)
|
|
{
|
|
char strNew[4] = "NEW";
|
|
fwrite((char *)strNew,sizeof(char) * 3,1,fp);
|
|
|
|
DWORD color;
|
|
float lens;
|
|
for(int i=0;i<DAYCYCLE;i++)
|
|
{
|
|
color=m_SkyCenterColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_SkyNeighborColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_LightColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_AmbientColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][0].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][1].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][2].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_ObjectAmbientColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
lens=m_FogRangeNear[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_FogRangeFar[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_SkyFogFar[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_SunPosition[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
color=m_DetailFixColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
}
|
|
|
|
|
|
for(i=0;i<DAYCYCLE;i++)
|
|
{
|
|
color=m_SpecularReflectionRate[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GrassColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GlareSkyUpper[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GlareSkyLower[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_CharacterAmbient[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_CharacterLight[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_TerrainColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_WaterColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FurGrassColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
}
|
|
|
|
char tmpHeader[2];
|
|
tmpHeader[0] = 'N';
|
|
tmpHeader[1] = 'C';
|
|
|
|
fwrite((char *)tmpHeader,sizeof(char) * 2, 1, fp);
|
|
float fColor[5];
|
|
|
|
fColor[0] = CSceneManager::m_CharacterLight.Diffuse.r;
|
|
fColor[1] = CSceneManager::m_CharacterLight.Diffuse.g;
|
|
fColor[2] = CSceneManager::m_CharacterLight.Diffuse.b;
|
|
fColor[3] = CSceneManager::m_CharacterLight.Range;
|
|
fColor[4] = CSceneManager::m_fGlowPlaneRange;
|
|
|
|
fwrite((float *)fColor,sizeof(float) * 5,1,fp);
|
|
|
|
|
|
/*for(int i=0;i<DAYCYCLE;i++)
|
|
{
|
|
color=m_SkyCenterColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_SkyNeighborColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_LightColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_AmbientColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][0].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][1].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][2].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_ObjectAmbientColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
lens=m_FogRangeNear[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_FogRangeFar[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_SkyFogFar[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_SunPosition[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
}
|
|
color=CSectorScene::m_TerrainDetailFixColor.c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
for(i=0;i<DAYCYCLE;i++)
|
|
{
|
|
color=m_SpecularReflectionRate[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GrassColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GlareSkyUpper[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GlareSkyLower[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_CharacterAmbient[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_CharacterLight[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_TerrainColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_WaterColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FurGrassColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
}
|
|
*/
|
|
fclose(fp);
|
|
}
|
|
}
|
|
}
|
|
void CWeatherManager::Save()
|
|
{
|
|
FILE *fp=fopen(WEATHERPATH,"wb");
|
|
if(fp!=NULL)
|
|
{
|
|
char strNew[4] = "NEW";
|
|
fwrite((char *)strNew,sizeof(char) * 3,1,fp);
|
|
|
|
DWORD color;
|
|
float lens;
|
|
for(int i=0;i<DAYCYCLE;i++)
|
|
{
|
|
color=m_SkyCenterColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_SkyNeighborColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_LightColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_AmbientColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][0].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][1].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][2].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_ObjectAmbientColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
lens=m_FogRangeNear[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_FogRangeFar[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_SkyFogFar[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_SunPosition[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
color=m_DetailFixColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
}
|
|
|
|
|
|
for(i=0;i<DAYCYCLE;i++)
|
|
{
|
|
color=m_SpecularReflectionRate[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GrassColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GlareSkyUpper[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GlareSkyLower[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_CharacterAmbient[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_CharacterLight[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_TerrainColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_WaterColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FurGrassColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
}
|
|
|
|
char tmpHeader[2];
|
|
tmpHeader[0] = 'N';
|
|
tmpHeader[1] = 'C';
|
|
|
|
fwrite((char *)tmpHeader,sizeof(char) * 2, 1, fp);
|
|
float fColor[5];
|
|
|
|
fColor[0] = CSceneManager::m_CharacterLight.Diffuse.r;
|
|
fColor[1] = CSceneManager::m_CharacterLight.Diffuse.g;
|
|
fColor[2] = CSceneManager::m_CharacterLight.Diffuse.b;
|
|
fColor[3] = CSceneManager::m_CharacterLight.Range;
|
|
fColor[4] = CSceneManager::m_fGlowPlaneRange;
|
|
|
|
fwrite((float *)fColor,sizeof(float) * 5,1,fp);
|
|
|
|
|
|
/*for(int i=0;i<DAYCYCLE;i++)
|
|
{
|
|
color=m_SkyCenterColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_SkyNeighborColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_LightColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_AmbientColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][0].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][1].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FogLayer[i][2].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_ObjectAmbientColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
lens=m_FogRangeNear[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_FogRangeFar[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_SkyFogFar[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
|
|
lens=m_SunPosition[i];
|
|
fwrite(&lens,sizeof(float),1,fp);
|
|
}
|
|
color=CSectorScene::m_TerrainDetailFixColor.c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
for(i=0;i<DAYCYCLE;i++)
|
|
{
|
|
color=m_SpecularReflectionRate[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GrassColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GlareSkyUpper[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_GlareSkyLower[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_CharacterAmbient[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_CharacterLight[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_TerrainColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_WaterColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
|
|
color=m_FurGrassColor[i].c;
|
|
fwrite(&color,sizeof(DWORD),1,fp);
|
|
}
|
|
*/
|
|
fclose(fp);
|
|
}
|
|
}
|
|
|
|
void CWeatherManager::Update(float fUpdate)
|
|
{
|
|
m_SkyScene.Update(fUpdate);
|
|
}
|
|
|
|
void CWeatherManager::SecondRender(LPDIRECT3DDEVICE8 pd3dDevice)
|
|
{
|
|
matrix matInit;
|
|
matInit.MakeIdent();
|
|
pd3dDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&matInit));
|
|
m_SunScene.RenderFlare(pd3dDevice);
|
|
}
|