#pragma once class CMapOutdoor; #include "../PRTerrainLib/Terrain.h" #include "TerrainPatch.h" class CTerrain : public CTerrainImpl, public CGraphicBase { public: enum EBoundaryLoadPart { LOAD_INVALID, LOAD_NOBOUNDARY, LOAD_TOPLEFT, LOAD_TOP, LOAD_TOPRIGHT, LOAD_LEFT, LOAD_RIGHT, LOAD_BOTTOMLEFT, LOAD_BOTTOM, LOAD_BOTTOMRIGHT, LOAD_ALLBOUNDARY, }; CTerrain(); virtual ~CTerrain(); virtual void Clear(); void SetMapOutDoor(CMapOutdoor * pOwnerOutdoorMap); ////////////////////////////////////////////////////////////////////////// // Loading bool RAW_LoadTileMap(const char * c_pszFileName, bool bBGLoading = false); bool LoadHeightMap(const char * c_pszFileName); void CalculateTerrainPatch(); ////////////////////////////////////////////////////////////////////////// void CopySettingFromGlobalSetting(); WORD WE_GetHeightMapValue(short sX, short sY); bool IsReady() { return m_bReady; } void SetReady(bool bReady = true) { m_bReady = bReady; } // Height Map WORD * GetHeightMap() { return m_awRawHeightMap; } float GetHeight(int x, int y); // Normal Map bool GetNormal(int ix, int iy, D3DXVECTOR3 * pv3Normal); // TileMap BYTE * RAW_GetTileMap() { return m_abyTileMap; } char * GetNormalMap() { return m_acNormalMap; } // Attr bool LoadAttrMap(const char * c_pszFileName); BYTE * GetAttrMap() { return m_abyAttrMap; } BYTE GetAttr(WORD wCoordX, WORD wCoordY); bool isAttrOn(WORD wCoordX, WORD wCoordY, BYTE byAttrFlag); ////////////////////////////////////////////////////////////////////////// // Water BYTE * GetWaterMap() { return m_abyWaterMap; } void GetWaterHeight(BYTE byWaterNum, long * plWaterHeight); bool GetWaterHeight(WORD wCoordX, WORD wCoordY, long * plWaterHeight); // Shadow Texture void LoadShadowTexture(const char * c_pszFileName); // Shadow Map bool LoadShadowMap(const char * c_pszFileName); // MiniMap void LoadMiniMapTexture(const char * c_pszFileName); inline LPDIRECT3DTEXTURE8 GetMiniMapTexture() { return m_lpMiniMapTexture; } // Marked Area BOOL IsMarked() { return m_bMarked; } void AllocateMarkedSplats(BYTE * pbyAlphaMap); void DeallocateMarkedSplats(); TTerrainSplatPatch & GetMarkedSplatPatch() { return m_MarkedSplatPatch; } // Coordinate void GetCoordinate(WORD * usCoordX, WORD * usCoordY) { *usCoordX = m_wX; *usCoordY = m_wY; } void SetCoordinate(WORD wCoordX, WORD wCoordY); std::string & GetName() { return m_strName; } void SetName(const std::string c_strName) { m_strName = c_strName; } CMapOutdoor * GetOwner() { return m_pOwnerOutdoorMap; } void RAW_GenerateSplat(bool bBGLoading = false); protected: bool Initialize(); void RAW_AllocateSplats(bool bBGLoading = false); void RAW_DeallocateSplats(bool bBGLoading = false); virtual void RAW_CountTiles(); LPDIRECT3DTEXTURE8 AddTexture32(BYTE byImageNum, BYTE * pbyImage, long lTextureWidth, long lTextureHeight); void PutImage32(BYTE * pbySrc, BYTE * pbyDst, long src_pitch, long dst_pitch, long lTextureWidth, long lTextureHeight, bool bResize = false); void PutImage16(BYTE * pbySrc, BYTE * pbyDst, long src_pitch, long dst_pitch, long lTextureWidth, long lTextureHeight, bool bResize = false); protected: void CalculateNormal(long x, long y); protected: std::string m_strName; WORD m_wX; WORD m_wY; protected: bool m_bReady; CGraphicImageInstance m_ShadowGraphicImageInstance; //MiniMap CGraphicImageInstance m_MiniMapGraphicImageInstance; LPDIRECT3DTEXTURE8 m_lpMiniMapTexture; // Owner COutdoorMap poineter CMapOutdoor * m_pOwnerOutdoorMap; // Picking D3DXVECTOR3 m_v3Pick; DWORD m_dwNumTexturesShow; std::vector m_VectorNumShowTexture; CTerrainPatch m_TerrainPatchList[PATCH_XCOUNT * PATCH_YCOUNT]; BOOL m_bMarked; TTerrainSplatPatch m_MarkedSplatPatch; LPDIRECT3DTEXTURE8 m_lpMarkedTexture; public: CTerrainPatch * GetTerrainPatchPtr(BYTE byPatchNumX, BYTE byPatchNumY); protected: void _CalculateTerrainPatch(BYTE byPatchNumX, BYTE byPatchNumY); public: static void DestroySystem(); static CTerrain* New(); static void Delete(CTerrain* pkTerrain); static CDynamicPool ms_kPool; };