/** @file EditableBaseObj.h @brief
 *	Copyright (c) 2007,第九城市游戏研发中心
 *	All rights reserved.
 *
 *	当前版本:
 *	作    者:zhaixufeng
 *	完成日期:2007-09-28
*
 *	取代版本:
 *	作    者:
 *	完成日期:
 
*/ #ifndef CODE_INGAME #ifndef EDITABLE_BASEOBJ_H #define EDITABLE_BASEOBJ_H #define TRANSLATION "Translation" #define ROTATION "Rotation" #define SCALE "Scale" #define CREATORNAME "CreatorName" #define RADIUS "Radius" #define REFRESHNUM "RefreshNum" #define TIMEINTERVAL "TimeInterval" #define REFRESHTYPE "RefreshType" #define CREATETYPE "CreateType" #define NPCNO "NPCNO" #define NPCCREATORNO "NPCCreatorNO" #define RADIUSX "RadiusX" #define RADIUSY "RadiusY" #define TIMEFORMAT "TimeFormat" #define STARTTIME "StartTime" #define ENDTIME "EndTime" #define NPC1 "NPCNO1" #define NPCNUM1 "NPCNum1" #define NPC2 "NPCNO2" #define NPCNUM2 "NPCNum2" #define NPC3 "NPCNO3" #define NPCNUM3 "NPCNum3" #define NPC4 "NPCNO4" #define NPCNUM4 "NPCNum4" #define NPC5 "NPCNO5" #define NPCNUM5 "NPCNum5" #include #include "NPCCreator.h" /** @brief 可编辑对象实体类 * * 负责可编辑对象的方位修改, 同类对象的复制etc */ class MAIN_ENTRY CEditableBaseObj { public: enum OBEJCT_TYPE{OT_NPCCREATOR, OT_COMMON}; /// 构造 CEditableBaseObj(); /// 析构 virtual ~CEditableBaseObj(void); /// 获取名字 const string GetExtraData() const { return static_cast< string >( m_pExtraData->GetValue() ); } /// 获取对象 NiNode *GetNode() { return m_spNode; } /// 从文件中创建 virtual bool Create( const char *pszNifFile ); /// 销毁 virtual void Destroy(); /// 克隆,数据共享 virtual CEditableBaseObj* Clone(); /// 深度拷贝,数据不共享 virtual CEditableBaseObj* DeepClone(); /// 平移 virtual void SetTranslate( float fX, float fY, float fZ ); virtual void SetTranslate( NiPoint3& vPos); /// 旋转 virtual void SetRotation( float fX, float fY, float fZ ); virtual void SetRotation( NiMatrix3& ); /// 放缩 virtual void SetScale( float fX, float fY, float fZ ); virtual void SetScale( NiPoint3& ); /// 获取位置 const NiPoint3& GetPosition() const { return m_vPosition; } /// 获取旋转方位 const NiMatrix3& GetRotation() const { return m_vRotation; } /// 获取放缩 const NiPoint3& GetScale() const{ return m_vScale; } //设置对象类型 OBEJCT_TYPE GetObjectType() const { return m_ObjectType; } //获得对象类型 void SetObjectType(OBEJCT_TYPE objType) { m_ObjectType = objType; } protected: /// Extra Data, 用来标识同材质的物件 NiStringExtraData *m_pExtraData; /// 物件实体对象 NiNodePtr m_spNode; /// 位置 NiPoint3 m_vPosition; /// 旋转 NiMatrix3 m_vRotation; /// 放缩 NiPoint3 m_vScale; /// NPC生成器标识 OBEJCT_TYPE m_ObjectType; }; /** @brief 物件类比较符,这里以ExtraData作比较 */ class MAIN_ENTRY CEditableObjectNameComp { public: /// 重载() bool operator()( const CEditableBaseObj *pObj1, const CEditableBaseObj *pObj2 ) { return pObj1->GetExtraData() < pObj2->GetExtraData(); } }; /// 物件set定义 typedef set< CEditableBaseObj*, CEditableObjectNameComp > EditableObjectSet; //NPC物件定义 class CNpcCreatorObj: public CNPCCreator, public CEditableBaseObj { public: CNpcCreatorObj(); virtual ~CNpcCreatorObj(); /* /// 平移 virtual void SetTranslate( float fX, float fY, float fZ ); virtual void SetTranslate( NiPoint3& vPos); /// 旋转 virtual void SetRotation( float fX, float fY, float fZ ); virtual void SetRotation( NiMatrix3& ); /// 放缩 virtual void SetScale( float fX, float fY, float fZ ); virtual void SetScale( NiPoint3& ); */ protected: private: }; #endif #endif