157 lines
4.5 KiB
C++
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_)
|