client/PRTerrainLib/Terrain.h

157 lines
4.5 KiB
C++

// Terrain.h: interface for the CTerrainImpl class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_TERRAIN_H__1C9108E1_69A7_4392_9B68_0E6CD4E1BFBA__INCLUDED_)
#define AFX_TERRAIN_H__1C9108E1_69A7_4392_9B68_0E6CD4E1BFBA__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "../eterImageLib/TGAImage.h"
#include "TextureSet.h"
#include "TerrainType.h"
class CTerrainImpl
{
public:
enum
{
XSIZE = TERRAIN_SIZE,
YSIZE = TERRAIN_SIZE,
HEIGHTMAP_XSIZE = XSIZE+1,
HEIGHTMAP_YSIZE = YSIZE+1,
HEIGHTMAP_RAW_XSIZE = XSIZE+3,
HEIGHTMAP_RAW_YSIZE = YSIZE+3,
ATTRMAP_XSIZE = XSIZE*2,
ATTRMAP_YSIZE = YSIZE*2,
ATTRMAP_ZCOUNT = 8,
TILEMAP_XSIZE = XSIZE*2,
TILEMAP_YSIZE = YSIZE*2,
TILEMAP_RAW_XSIZE = XSIZE*2+2,
TILEMAP_RAW_YSIZE = YSIZE*2+2,
WATERMAP_XSIZE = XSIZE,
WATERMAP_YSIZE = YSIZE,
NORMALMAP_XSIZE = XSIZE+1,
NORMALMAP_YSIZE = YSIZE+1,
SHADOWMAP_XSIZE = XSIZE*2,
SHADOWMAP_YSIZE = YSIZE*2,
SPLATALPHA_RAW_XSIZE = XSIZE*2+2,
SPLATALPHA_RAW_YSIZE = YSIZE*2+2,
SPLATALPHA_ZCOUNT = 7,
HEIGHT_TILE_XRATIO = TILEMAP_XSIZE / XSIZE,
HEIGHT_TILE_YRATIO = TILEMAP_XSIZE / XSIZE,
PATCH_XSIZE = TERRAIN_PATCHSIZE,
PATCH_YSIZE = TERRAIN_PATCHSIZE,
PATCH_TILE_XSIZE = PATCH_XSIZE * HEIGHT_TILE_XRATIO,
PATCH_TILE_YSIZE = PATCH_YSIZE * HEIGHT_TILE_YRATIO,
PATCH_XCOUNT = TERRAIN_PATCHCOUNT,
PATCH_YCOUNT = TERRAIN_PATCHCOUNT,
CELLSCALE = 200,
CELLSCALE_IN_METER = CELLSCALE / 100,
HALF_CELLSCALE = CELLSCALE / 2,
HALF_CELLSCALE_IN_METER = HALF_CELLSCALE / 100,
TERRAIN_XSIZE = XSIZE * CELLSCALE,
TERRAIN_YSIZE = YSIZE * CELLSCALE,
};
enum
{
MAX_ATTRIBUTE_NUM = 8,
MAX_WATER_NUM = 255,
};
enum
{
ATTRIBUTE_BLOCK = (1 << 0),
ATTRIBUTE_WATER = (1 << 1),
ATTRIBUTE_BANPK = (1 << 2),
};
public:
static void SetTextureSet(CTextureSet * pTextureSet);
static CTextureSet * GetTextureSet(); // ¹«Á¶°Ç ¼º°øÇØ¾ß ÇÔ
protected:
static CTextureSet * ms_pTextureSet;
public:
CTerrainImpl();
virtual ~CTerrainImpl();
TTerrainSplatPatch & GetTerrainSplatPatch() {return m_TerrainSplatPatch;}
DWORD GetNumTextures() { return ms_pTextureSet->GetTextureCount(); }
TTerrainTexture & GetTexture(const long & c_rlTextureNum) { return ms_pTextureSet->GetTexture(c_rlTextureNum); }
// int GetHeightTileMapRatio() { return m_iHeightTileRatio; }
bool LoadWaterMap(const char * c_szWaterMapName);
bool LoadWaterMapFile(const char * c_szWaterMapName);
LPDIRECT3DTEXTURE8 GetShadowTexture() { return m_lpShadowTexture; }
DWORD GetShadowMapColor(float fx, float fy);
protected:
void Initialize();
virtual void Clear();
void LoadTextures();
bool LoadHeightMap(const char *c_szFileName);
bool RAW_LoadTileMap(const char * c_szFileName);
bool LoadAttrMap(const char *c_pszFileName);
#ifdef WORLD_EDITOR
public:
#endif
__forceinline WORD GetHeightMapValue(short sx, short sy);
protected:
LPDIRECT3DTEXTURE8 m_lpAlphaTexture[MAXTERRAINTEXTURES];
WORD m_awRawHeightMap[HEIGHTMAP_RAW_YSIZE*HEIGHTMAP_RAW_XSIZE];
BYTE m_abyTileMap[TILEMAP_RAW_YSIZE*TILEMAP_RAW_XSIZE];
BYTE m_abyAttrMap[ATTRMAP_YSIZE*ATTRMAP_XSIZE];
BYTE m_abyWaterMap[WATERMAP_YSIZE*WATERMAP_XSIZE];
CHAR m_acNormalMap[NORMALMAP_YSIZE*NORMALMAP_XSIZE*3];
TGA_HEADER m_HeightMapHeader;
WORD m_wTileMapVersion;
long m_lViewRadius;
float m_fHeightScale;
TTerrainSplatPatch m_TerrainSplatPatch;
//////////////////////////////////////////////////////////////////////////
//Water Map
BYTE m_byNumWater;
long m_lWaterHeight[MAX_WATER_NUM + 1];
//Water Map
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// TileMap°ú HeightMap ºñÀ²
// int m_iHeightTileRatio;
//////////////////////////////////////////////////////////////////////////
// Shadow Map
LPDIRECT3DTEXTURE8 m_lpShadowTexture;
WORD m_awShadowMap[SHADOWMAP_YSIZE*SHADOWMAP_XSIZE]; // 16bit R5 G6 B5
protected:
long m_lSplatTilesX;
long m_lSplatTilesY;
};
__forceinline WORD CTerrainImpl::GetHeightMapValue(short sx, short sy)
{
return m_awRawHeightMap[(sy+1) * HEIGHTMAP_RAW_XSIZE + sx+1];
}
#endif // !defined(AFX_TERRAIN_H__1C9108E1_69A7_4392_9B68_0E6CD4E1BFBA__INCLUDED_)