/** @file AdvanceWaterComponent.h
@brief Advance Water component 现在使用 max 给面片覆 AdvanceWater Shader, 本类作废,只作参考
* Copyright (c) 2007,第九城市游戏研发中心
* All rights reserved.
*
* 当前版本:0.1
* 作 者:Shi Yazheng
* 完成日期:2008-09-22
*
* 取代版本:
* 作 者:
* 完成日期:
*/
#pragma once
#include
#include
#include
#include
#include
//#include
#include
#include
#include
#include
#include "AdvanceWater.h"
#ifndef CODE_INGAME
namespace SceneCore
{
NiSmartPointer(CAdvanceWaterComponent);
class MAIN_ENTRY CAdvanceWaterComponent : public NiRefObject,
public NiEntityComponentInterface
{
public:
CAdvanceWaterComponent(NiAVObjectPtr pkSceneRoot = NULL);
~CAdvanceWaterComponent(void);
static NiFixedString ClassName();
// *** begin Emergent internal use only ***
static void _SDMInit();
static void _SDMShutdown();
// *** end Emergent internal use only ***
/// 获取 AdvanceWater 实例
CAdvanceWaterComponent GetAdvanceWaterInstance();
// 设置/获取波长
void SetWaveLength(float afWaveLength[4]);
const float* GetWaveLength();
// 设置/获取振幅
void SeAmplitude(float afAmplitude[4]);
const float* GetAmplitude();
// 设置/获取波传播速度
void SetSpeed(float afSpeed[4]);
const float* GetSpeed();
// 设置/获取方向
void SetWaveDirection(NiPoint2 avWaveDirection[4]);
const NiPoint2* GetWaveDirection();
// 设置/获取 Fresnel
void SetFresnel(float fFresnel);
const float GetFresnel();
// 设置/获取 Alpha
void SetAlpha(float fAlpha);
const float GetAlpha();
// 设置/获取反射色
void SetReflectColor(NiColor kColor);
const NiColor GetReflectColor();
// 设置/获取高光色
void SetSpecularColor(NiColor kColor);
const NiColor GetSpecularColor();
// 设置/获取光方向
void SetLightDir(NiPoint3 kDir);
const NiPoint3 GetLightDir();
// 设置/获取环境纹理
void SetEnvMap(NiTexturePtr spEnvMap);
const NiTexturePtr GetEnvMap();
// 设置/获取折射纹理
void SetRefractMap(NiTexturePtr spRefractMap);
const NiTexturePtr GetRefractMap();
// 设置世界变换
void SetTranslate(const NiPoint3& kTranslation);
const NiPoint3& GetTranslate() const;
void SetRotate(const NiMatrix3& kRotation);
const NiMatrix3& GetRotate() const;
void SetScale(const float fScale);
float GetScale() const;
// 设置水表面几何体
void SetSceneRoot(NiAVObjectPtr pkSceneRoot);
NiAVObjectPtr GetSceneRoot();
/// 判断一个 entity 是否 Advance Water
static bool EntityIsAdvanceWater(NiEntityInterface* pkEntity);
protected:
// 报错字符串
static NiFixedString ERR_TRANSLATION_NOT_FOUND;
static NiFixedString ERR_ROTATION_NOT_FOUND;
static NiFixedString ERR_SCALE_NOT_FOUND;
static NiFixedString ERR_FILE_LOAD_FAILED;
// Class name.
static NiFixedString ms_kClassName;
// Component name.
static NiFixedString ms_kComponentName;
// Property names.
static NiFixedString ms_kWaveLengthName;
static NiFixedString ms_kAmplitudeName;
static NiFixedString ms_kSpeedName;
static NiFixedString ms_kDirectionName;
static NiFixedString ms_kFresnelName;
static NiFixedString ms_kAlphaName;
static NiFixedString ms_kReflectColorName;
static NiFixedString ms_kSpecularColorName;
static NiFixedString ms_kLightDirName;
static NiFixedString ms_kEnvMapName;
static NiFixedString ms_kRefractMapName;
static NiFixedString ms_kNifFilePathName;
static NiFixedString ms_kSceneRootPointerName;
// Property descriptions.
static NiFixedString ms_kWaveLengthDescription;
static NiFixedString ms_kAmplitudeDescription;
static NiFixedString ms_kSpeedDescription;
static NiFixedString ms_kDirectionDescription;
static NiFixedString ms_kFresnelDescription;
static NiFixedString ms_kAlphaDescription;
static NiFixedString ms_kReflectColorDescription;
static NiFixedString ms_kSpecularColorDescription;
static NiFixedString ms_kLightDirDescription;
static NiFixedString ms_kEnvMapDescription;
static NiFixedString ms_kRefractMapDescription;
static NiFixedString ms_kNifFilePathDescription;
static NiFixedString ms_kSceneRootPointerDescription;
// Dependent property names.
static NiFixedString ms_kTranslationName;
static NiFixedString ms_kRotationName;
static NiFixedString ms_kScaleName;
// properties
CAdvanceWaterPtr m_spWaterInstance; // Advance Water 实例
CAdvanceWaterComponentPtr m_spMasterComponent;
NiFixedString m_spNifFilePath; // nif 文件路径
NiString m_spEnvMapFile; // 环境纹理名称
bool m_bNifFileChanged; // nif 文件路径是否改变,需要重新加载 nif
public:
// NiEntityComponentInterface overrides.
virtual NiEntityComponentInterface* Clone(bool bInheritProperties);
virtual NiEntityComponentInterface* GetMasterComponent();
virtual void SetMasterComponent(
NiEntityComponentInterface* pkMasterComponent);
virtual void GetDependentPropertyNames(
NiTObjectSet& kDependentPropertyNames);
// NiEntityPropertyInterface overrides.
virtual NiBool SetTemplateID(const NiUniqueID& kID);
virtual NiUniqueID GetTemplateID();
virtual void AddReference();
virtual void RemoveReference();
virtual NiFixedString GetClassName() const;
virtual NiFixedString GetName() const;
virtual NiBool SetName(const NiFixedString& kName);
virtual NiBool IsAnimated() const;
virtual void Update(NiEntityPropertyInterface* pkParentEntity,
float fTime, NiEntityErrorInterface* pkErrors,
NiExternalAssetManager* pkAssetManager);
virtual void BuildVisibleSet(NiEntityRenderingContext* pkRenderingContext,
NiEntityErrorInterface* pkErrors);
virtual void GetPropertyNames(
NiTObjectSet& kPropertyNames) const;
virtual NiBool CanResetProperty(const NiFixedString& kPropertyName,
bool& bCanReset) const;
virtual NiBool ResetProperty(const NiFixedString& kPropertyName);
virtual NiBool MakePropertyUnique(const NiFixedString& kPropertyName,
bool& bMadeUnique);
virtual NiBool GetDisplayName(const NiFixedString& kPropertyName,
NiFixedString& kDisplayName) const;
virtual NiBool SetDisplayName(const NiFixedString& kPropertyName,
const NiFixedString& kDisplayName);
virtual NiBool GetPrimitiveType(const NiFixedString& kPropertyName,
NiFixedString& kPrimitiveType) const; // property 是什么类型的
virtual NiBool SetPrimitiveType(const NiFixedString& kPropertyName,
const NiFixedString& kPrimitiveType);
virtual NiBool GetSemanticType(const NiFixedString& kPropertyName,
NiFixedString& kSemanticType) const;
virtual NiBool SetSemanticType(const NiFixedString& kPropertyName,
const NiFixedString& kSemanticType);
virtual NiBool GetDescription(const NiFixedString& kPropertyName,
NiFixedString& kDescription) const;
virtual NiBool SetDescription(const NiFixedString& kPropertyName,
const NiFixedString& kDescription);
virtual NiBool GetCategory(const NiFixedString& kPropertyName,
NiFixedString& kCategory) const;
virtual NiBool IsPropertyReadOnly(const NiFixedString& kPropertyName,
bool& bIsReadOnly);
virtual NiBool IsPropertyUnique(const NiFixedString& kPropertyName,
bool& bIsUnique);
virtual NiBool IsPropertySerializable(const NiFixedString& kPropertyName,
bool& bIsSerializable);
virtual NiBool IsPropertyInheritable(const NiFixedString& kPropertyName,
bool& bIsInheritable);
virtual NiBool IsExternalAssetPath(const NiFixedString& kPropertyName,
unsigned int uiIndex, bool& bIsExternalAssetPath) const;
virtual NiBool GetElementCount(const NiFixedString& kPropertyName,
unsigned int& uiCount) const;
virtual NiBool SetElementCount(const NiFixedString& kPropertyName,
unsigned int uiCount, bool& bCountSet);
virtual NiBool IsCollection(const NiFixedString& kPropertyName,
bool& bIsCollection) const;
// 设置/获取
//virtual NiBool SetPropertyData(const NiFixedString& kPropertyName, const NiQuaternion& kData, unsigned int uiIndex = 0);
//virtual NiBool GetPropertyData(const NiFixedString& kPropertyName, NiQuaternion& kData, unsigned int uiIndex = 0) const;
// 设置/获取颜色
virtual NiBool SetPropertyData(const NiFixedString& kPropertyName, const NiColor& kData, unsigned int uiIndex = 0);
virtual NiBool GetPropertyData(const NiFixedString& kPropertyName, NiColor& kData, unsigned int uiIndex = 0) const;
// 设置/获取 alpha 波长,振幅,速度
virtual NiBool SetPropertyData(const NiFixedString& kPropertyName, float fData, unsigned int uiIndex = 0);
virtual NiBool GetPropertyData(const NiFixedString& kPropertyName, float& fData, unsigned int uiIndex = 0) const;
// 设置/获取 Wave Direction
virtual NiBool SetPropertyData(const NiFixedString& kPropertyName, const NiPoint2& kData, unsigned int uiIndex = 0);
virtual NiBool GetPropertyData(const NiFixedString& kPropertyName, NiPoint2& kData, unsigned int uiIndex = 0) const;
// 设置/获取 Light Direction
virtual NiBool SetPropertyData(const NiFixedString& kPropertyName, const NiPoint3& kData, unsigned int uiIndex = 0);
virtual NiBool GetPropertyData(const NiFixedString& kPropertyName, NiPoint3& kData, unsigned int uiIndex = 0) const;
// 设置/获取 nif 文件路径
virtual NiBool SetPropertyData(const NiFixedString& kPropertyName,const NiFixedString& kData, unsigned int uiIndex=0);
virtual NiBool GetPropertyData(const NiFixedString& kPropertyName,NiFixedString& kData, unsigned int uiIndex=0) const;
// 设置/获取 场景根
virtual NiBool SetPropertyData(const NiFixedString& kPropertyName, const NiObject*& pkData, unsigned int uiIndex=0);
virtual NiBool GetPropertyData(const NiFixedString& kPropertyName, NiObject*& pkData, unsigned int uiIndex=0) const;
}; // end of class
}; // end of namespace
#endif