/** @file WaterManager.h
@brief 水体管理器,负责反射纹理的渲染
* Copyright (c) 2007,第九城市游戏研发中心
* All rights reserved.
*
* 当前版本:0.1
* 作 者:Shi Yazheng
* 完成日期:2008-03-03
*
* 取代版本:
* 作 者:
* 完成日期:
*/
#pragma once
#include "WaterRenderView.h"
#include "NiEntity.h"
#include "WaterBody.h"
namespace SceneCore
{
class MAIN_ENTRY CWaterManager: public NiMemObject
{
public:
~CWaterManager(void);
// 获取唯一实例
static CWaterManager* GetInstance();
/**
*
功能说明:水体管理器初始化
*
可访问性:对象访问
*
注 释:初始化后水体管理器才具有渲染反射纹理功能
* @param pkWaterRenderView[in] 水体 render view.包含摄像机属性和反射纹理需要渲染得物件的最小集
* @return 无
*/
bool Init( CWaterRenderViewPtr pkWaterRenderView);
/// 销毁管理器
void Destory();
/// 是否初始化过
bool Initialized();
void Enable(); // 打开实时反射
void Disable(); // 关闭实时反射
/// 添加/移除/清空 水体实例
void AddWaterInstance(CWaterBodyPtr pkWater);
void RemoveWaterInstance(CWaterBodyPtr pkWater);
void ClearWaterInstance();
/// 获取主 render view
CWaterRenderViewPtr GetMainWaterRenderView();
/// 判断一个entity 是否具有 水体 component
static bool EnityIsWaterBody(const NiEntityInterface* pEntity);
/// 渲染所有水体的反射纹理
void RenderReflectTexture(NiEntityRenderingContextPtr pkRenderingContext);
private:
CWaterManager(void);
//list::iterator _FindByObject(CWaterBodyPtr pkRenderObject);
//static CWaterManager* ms_pWaterMgrInstance; // 水体管理器唯一实例
/// 创建渲染到全屏的 render view
void _CreateScreenFillingRenderViews();
/// 场景主 render view
CWaterRenderViewPtr m_psMainSceneRenderView;
//list m_WaterList; // 水体列表
NiTPointerList m_WaterList; // 水体列表
};
};