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>
247 lines
7.9 KiB
C++
247 lines
7.9 KiB
C++
// SectorScene.h: interface for the CSectorScene class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#if !defined(AFX_SECTORSCENE_H__DB1905EF_7F19_458A_8EB7_725758651CB2__INCLUDED_)
|
|
#define AFX_SECTORSCENE_H__DB1905EF_7F19_458A_8EB7_725758651CB2__INCLUDED_
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
#include "SceneNode.h"
|
|
#include "MapStorage.h"
|
|
#include <VertexBuffer.h>
|
|
#include "MeshObjectContainer.h"
|
|
#include "SectorDefine.h"
|
|
#include "PerlinNoise.h"
|
|
#include "MapStorage.h"
|
|
#include "TriTreeNode.h"
|
|
#include "HouseObjectScene.h"
|
|
#include "TreeScene.h"
|
|
#include "WaterScene.h"
|
|
//#include "FallScene.h"
|
|
#include "GrassScene.h"
|
|
//#include "LayerFogScene.h"
|
|
#include "StateLog.h"
|
|
//#include "Z3DSound.h"
|
|
#include "X3DEffect.h"
|
|
#include "X3DEffectManager.h"
|
|
#include "ShadowVolume.h"
|
|
#include "boidscene2.h"
|
|
#include "SectorLight.h"
|
|
|
|
|
|
class CSectorScene : public CSceneNode
|
|
{
|
|
|
|
|
|
LPDIRECT3DBASETEXTURE8 m_MapTexture;
|
|
|
|
static DWORD m_dwObjectDiffuseVertexShader;
|
|
static DWORD m_dwObjectSpecularVertexShader;
|
|
|
|
static DWORD m_dwObjectDiffusePixelShader;
|
|
static DWORD m_dwObjectSpecularPixelShader;
|
|
|
|
static LPDIRECT3DCUBETEXTURE8 m_pNormalizeCubeMap;
|
|
|
|
public:
|
|
CMapStorage *m_pMapStorage;
|
|
|
|
void RenderGlare(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
List<int> m_ShadowPolyList;
|
|
static CRenderTexture m_pShadowTexture;//±×¸²ÀÚ
|
|
void RenderObjectShadow(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
void UnloadAllData();
|
|
void GetPickHousePoly(vector3 vecStart,vector3 vecEnd,List<vector3> &vecPolyList);
|
|
static color m_TerrainDetailFixColor;
|
|
void GenerateLandscapeEffect();
|
|
void RenderLandscapeEffect(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
void UpdateLandscapeEffect();
|
|
void FullVertexROAMVertex();
|
|
CShadowVolume m_ShadowVolume;
|
|
void RenderTerrainSelfShadow(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
void HouseAllLoad();
|
|
float GetHighPolyHeight(vector3 vecPos);
|
|
void GenerateTerrainLightmap(LPDIRECT3DDEVICE8 pd3dDevice,CSectorScene *NeighborSector[8]);
|
|
void GenerateTerrainMinimap(LPDIRECT3DDEVICE8 pd3dDevice,CSectorScene *NeighborSector[8]);
|
|
|
|
void FixedTerrainLightmap(LPDIRECT3DDEVICE8 pd3dDevice,CSectorScene *NeighborSector[8]);
|
|
|
|
void RenderDetail(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
void GenerateObjectShadowed();
|
|
void GetHeightFieldRangePoly(vector3 vecPos,List<vector3> &vecPolyList,float fRange);
|
|
// void GenerateSound();
|
|
void AllObjectCalcLens();
|
|
void GenerateEffect();
|
|
void GenerateMustDivideVertex();
|
|
void RenderGrass(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
void DynamicLoad();
|
|
void GetLight(vector3 vecPos,List<D3DLIGHT8> &LightList);
|
|
void GetLineIntersectPoly(vector3 vecStart,vector3 vecEnd,List<vector3> &vecPolyList);
|
|
void GetHeightFieldShadowPoly(vector3 vecPos,List<vector3> &vecPolyList);
|
|
void GetInHouseShadowPoly(vector3 vecPos,List<vector3> &vecPolyList,vector3 vecChrLightPos);
|
|
int m_ShadowUsed;
|
|
// Shadow Texture//
|
|
static CRenderTexture m_SwapShadowTexture;
|
|
static CRenderTexture m_ObjectShadowTexture;
|
|
static CRenderTexture m_SectorShadowTexture[9];
|
|
static CRenderTexture m_TerrainShadeTexture;
|
|
static char m_SectorShadowCollision[9][256*256];
|
|
//static CTexture m_CompleteShadowAndTerrainTexture[9];
|
|
static int m_UsedShadowTerrain[9];
|
|
//Cloud-Shadowed Texture//
|
|
static CTexture m_CloudShadow;
|
|
static float m_fCloudMove;
|
|
static CTexture m_LODGrassTexture;
|
|
CTexture *m_pLODGrassAlpha;
|
|
static CTexture *m_GrassRangeTexture;
|
|
|
|
//follow data for ROAM //
|
|
int m_RenderUsedVertex[SECTORSX*SECTORSY];
|
|
float m_fAvgHeight;
|
|
float m_HeightData[SECTORSX*SECTORSY];
|
|
LPDIRECT3DVERTEXBUFFER8 m_pROAMVertex;
|
|
LPDIRECT3DINDEXBUFFER8 m_pROAMIndices;
|
|
long m_UsedIndices,m_UsedVertex;
|
|
SectorVertex m_SectorVertex[SECTORSX*SECTORSY];
|
|
int m_VarianceLeft[1<<(VARIANCE_DEPTH)];
|
|
int m_VarianceRight[1<<(VARIANCE_DEPTH)];
|
|
int *m_CurrentVariance;
|
|
static TriTreeNode m_TriPool[POOL_SIZE];
|
|
SectorVertex *m_pDrawVertex;
|
|
WORD *m_pDrawIndices;
|
|
static long m_NextTriNode;
|
|
TriTreeNode m_BaseLeft;
|
|
TriTreeNode m_BaseRight;
|
|
|
|
//Following Function is used ROAM//
|
|
TriTreeNode * AllocateTri();
|
|
void ComputeVariance();
|
|
void Tessellate();
|
|
void PrepareRender();
|
|
void Reset();
|
|
void Split(TriTreeNode *tri);
|
|
void RecursRender(TriTreeNode *tri, int leftX, int leftY, int rightX, int rightY, int apexX, int apexY);
|
|
void RecursTessellate(TriTreeNode *tri,int leftx,int leftY,int rightX,int rightY,int apexX,int apexY,int node);
|
|
int RecursComputeVariance(int leftX,int leftY,float leftZ,int rightX,int rightY,float rightZ,int apexX,int apexY,float apexZ,int node);
|
|
|
|
//Editing data//
|
|
bool m_isEdit;
|
|
//Scene List //
|
|
List<CHouseObjectScene*> m_HouseObjectNode;
|
|
List<CObjectScene*> m_ObjectSceneNode;
|
|
CX3DEffectManager m_WorldEffectManager;
|
|
|
|
List<void*> m_LandscapeEffectNode;
|
|
List<int> m_LandscapeEffectNodeValue;
|
|
|
|
CTreeScene m_TreeObjectNode;
|
|
//CGrassScene m_GrassObjectNode;
|
|
static CWaterScene m_WaterScene;
|
|
// CFallScene m_FallScene;
|
|
// List<CZ3DSound*> m_SoundObjectNode;
|
|
//Scene MapStorage Pointer//
|
|
CSectorDungeonMap *m_MapDungeon;
|
|
CSectorHeightMap *m_MapHeight;
|
|
CSectorMeshMap *m_MapMash;
|
|
CSectorPlantMap *m_MapPlant;
|
|
CSectorWideMap *m_MapWide;
|
|
CSectorHouseMap *m_MapHouse;
|
|
CSectorWaterMap *m_MapWater;
|
|
CSectorFallMap *m_MapFall;
|
|
CSectorMeshMap *m_MapMesh;
|
|
CSectorMustDivideVertexMap *m_MapMustDivideVertex;
|
|
CSectorEffectMap *m_MapEffect;
|
|
CSectorLandscapeEffectMap *m_MapLandscapeEffect;
|
|
//boid cash
|
|
static CGemRender *m_Boid[3];
|
|
static bool m_bBoidMeshSet;
|
|
// Sector Light manager - wizardbug (03. 08. 04)
|
|
CSectorLightManager m_SectorLightManager;
|
|
|
|
// CSectorSoundMap *m_MapSound;
|
|
|
|
//Scene Generate Func//
|
|
void Generate(float fStartX,float fStartY);
|
|
void GenerateHouseObject();
|
|
void GenerateHouseObjectLastIn();
|
|
|
|
void GenerateWideMap();
|
|
void ReloadWideMap();
|
|
|
|
float GenerateHeight();
|
|
void GeneratePlant();
|
|
void GenerateObject();
|
|
void GenerateObjectLastIn();
|
|
void GenerateFall();
|
|
void GenerateWater();
|
|
void GenerateShadow(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
void GenerateSectorLight();
|
|
|
|
void CalcNormal();
|
|
float GetHeight(vector3 vecPos);
|
|
|
|
|
|
//Terrain & Detail Texture, Terrain Texture Determin func//
|
|
static CTexture m_DetailTexture;
|
|
static CTexture m_TerrainTexture[12];
|
|
static CTexture m_NormalPlantTexture;
|
|
static CTexture m_LayerFogTexture;
|
|
void DeterminTerrainTexture(float fHeight,float fPosx,float fPosy);
|
|
|
|
//Scene & Terrain Rendering func//
|
|
void Render(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
void RenderEffect(bool bCull = true);
|
|
void RenderSectorLight();
|
|
|
|
void UpdateEffect(bool bCull = true);
|
|
|
|
void RenderNotCullHouseObject(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
|
|
void RenderHouseObject(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
void RenderEnvHouseObject(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
void RenderPlant(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
void RenderEnvPlant(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
void RenderObject(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
void RenderFall(LPDIRECT3DDEVICE8 pd3dDevice);
|
|
void RenderWater(LPDIRECT3DDEVICE8 pd3dDevice,bool bFlare);
|
|
void RenderBlackWater(LPDIRECT3DDEVICE8 pd3dDevice,bool bFlare);
|
|
|
|
//boid
|
|
void SetBoidMesh();
|
|
void DeleteBoidMesh();
|
|
void DeleteCullHouseIndex();
|
|
|
|
vector3 m_SectorPosition;
|
|
void Create(CMapStorage *pMapStorage);
|
|
CSectorScene();
|
|
virtual ~CSectorScene();
|
|
// night
|
|
void SettingNight(bool bNight);
|
|
bool m_bNight;
|
|
|
|
static CEffScript *m_pLightEsf;
|
|
|
|
int *m_pNotCullHouseIndex;
|
|
int m_iNotCullHouseIndex;
|
|
|
|
//====================================
|
|
// ±Û·¹¾îÅ×½ºÆ®¿ë
|
|
//====================================
|
|
void RenderBlackTerrain( LPDIRECT3DDEVICE8 pDevice );
|
|
void RenderBlackDetail( LPDIRECT3DDEVICE8 pDevice );
|
|
void RenderBlackHouse( LPDIRECT3DDEVICE8 pd3dDevice );
|
|
void RenderBlackPlant( LPDIRECT3DDEVICE8 pd3dDevice );
|
|
|
|
LPDIRECT3DBASETEXTURE8 GetMapTexture() { return m_MapWide->m_WideMapTexture[0].GetTexture(); }
|
|
// Sector Lightmap
|
|
bool IntersectionTerrain(D3DXVECTOR3 vecPos,D3DXVECTOR3 vecSunPos,D3DXVECTOR3 vecSunDir,CSectorScene *NeighborSector[8]);
|
|
// sector, Ãæµ¹ ÀÖÀ¸¸é true
|
|
bool CheckRayCollisionHouse(const D3DXVECTOR3 &vecPos1,const D3DXVECTOR3 &vecPos2);
|
|
};
|
|
|
|
|
|
#endif // !defined(AFX_SECTORSCENE_H__DB1905EF_7F19_458A_8EB7_725758651CB2__INCLUDED_)
|