/** @file RiverManager.h
@brief
* Copyright (c) 2007,第九城市游戏研发中心
* All rights reserved.
*
* 当前版本:
* 作 者:和萌
* 完成日期:2008-
*
* 取代版本:
* 作 者:
* 完成日期:
*/
#ifndef CODE_INGAME
#include "Terrain.h"
#ifndef _RIVERMANAGER_H
#define _RIVERMANAGER_H
#define GRIDINCHUNK 64
struct MAIN_ENTRY stTriList
{
unsigned int uiP0,uiP1,uiP2;
};
struct MAIN_ENTRY stRiverPoint
{
NiPoint3 kVertex; //河流顶点坐标
NiColorA kVertexClr; //河流的顶点颜色
};
struct MAIN_ENTRY stRiverRegion
{
unsigned int uiVertexCount; //河流顶点数目
unsigned int uiTriCount; //多边形个数
float fRiverHeight; //河流的高度
NiColorA kColor; //河流的颜色
vector dwTerrainIndex; //河流中存在点的TerrainID
map mVertex; //河流顶点数据
vector stTri; //顶点索引 存储的是terrain的顶点索引
NiTriShapePtr pkRiverGeom; //河流几何,主要用于在编辑器中绘制河流形状
};
class MAIN_ENTRY CRiverManager
{
//////////////////////////////////////////////////////////////////////////
public:
//判断当前terrain点是否属于水域内的点
bool IsExistPos(DWORD terrainIndex);
//返回水域顶点数
unsigned int GetRiverVerticCount();
//销毁函数
static void Do_Dispos();
//静态函数,获得水域管理静态指针
static CRiverManager* GetInstance();
//添加水域
void AddRiverRegion( float fZPos,NiColorA pColor,float fAlphaDet);
//添加或删除水域点
void EditRiverPoint(CTerrain *pTerrain,const NiPoint3& vPos, float fRadius, bool bAddTo);
//由河流ID获得河流中三角形的个数
unsigned int GetTrianglesCount();
//获得水域数据
stRiverRegion* GetRiverData();
//获得水域几何
NiTriShapePtr GetRiverGeom();
//设定指定位置alpha值
void AdjustAlphaByHeight(CTerrain *pTerrain);
//创建几何型
bool BuildRiverRegionGem(CTerrain *pTerrain );
//前优化几何
void OptimizerRiverGeom(CTerrain *pTerrain);
//////////////////////////////////////////////////////////////////////////
private:
CRiverManager();
~CRiverManager(void);
CRiverManager(CRiverManager&);
//创建半径为iRadiu的多边形
unsigned int _BuildTriangles(CTerrain *pTerrain,int iRadiu);
//删除alpha为0的多余顶点
//fAdjust为Alpha值可接受范围
void _OptimizeByAlpha(CTerrain *pTerrain,float fAdjust);
//根据给定terrainIndex获得在dwTerrainIndex的下标
unsigned int _GetIdFromTerrainIndex( DWORD terrainIndex );
//插入水域点
bool _InsertRiverPoint(DWORD terrainIndex,stRiverPoint stVertex);
//删除水域点
bool _DeleteRiverPoint(DWORD terrainIndex);
//////////////////////////////////////////////////////////////////////////
private:
stRiverRegion* m_RiverRegion; //水域数据
static CRiverManager* ms_pRiverMgr; //水域管理指针
float m_fAlphaDet; //Alpha增量
};
//end of Class RiverManager.h
#pragma make_public(CRiverManager)
#endif
#endif