/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2006.12.20 * ³» ¿ë : µ¿Àû Àå¸é ³ëµå * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "SceneNode.h" #include "ActorManagerForPartition.h" #include "TrailGeometry.h" #include "BaseObject_Common.h" class cShadowGeometry; class cEffectSceneNode; class cSoundSceneNode; class cObjectNameCard; class cBubbleBase; class cBaseObject; class cNifAnimationInfo; struct sTextItem; /// µ¿Àû Àå¸é ³ëµå ÀÎÀÚ class cDynamicSceneNodeParam : public cSceneNodeParam { public: cDynamicSceneNodeParam(); public: /// //cString mPathName;// resource /// ´ë»óÀ» ¼ÒÀ¯ÇÑ °ÔÀÓ°´Ã¼ÀÇ ÀνºÅϽº cBaseObject* mpObject; bool mCreateNameCard; bool mUseShadow; }; inline cDynamicSceneNodeParam::cDynamicSceneNodeParam() : mpObject( 0 ) { mQueryType = NiPick::QUERY_FIRST; mPickSort = NiPick::SORT_OFF; mPickIntersect = NiPick::INTERSECT_COLLISION_DATA; mCreateNameCard = true; mUseShadow = true; } struct sTrailInfo { cRibbonGeometry* mRibbonGeom; unsigned long mLifeTime; unsigned int mStartLink; unsigned int mEndLink; bool mLoop; sTrailInfo() { mRibbonGeom = 0; mLoop = false; } ~sTrailInfo() { SAFE_NIDELETE(mRibbonGeom); } }; /// µ¿Àû Àå¸é ³ëµå class cDynamicSceneNode : public cSceneNode { friend class cSceneManager; public: /// ó¸® virtual void OnProcess( unsigned long deltaTime, unsigned long accumTime ); virtual bool OnVisible(); virtual bool Pick( const cRay& ray ); /// À̵¿ virtual bool Move( float /*x*/, float /*y*/ ) { return true; } /// ºÐÇÒ °´Ã¼¸¦ ¹Ù²Û´Ù. (±âÁ¸ °´Ã¼¸¦ »õ·Î¿î °´Ã¼·Î ´ëüÇÑ´Ù.) virtual bool ChangeParts( unsigned int /*partIdx*/, const char* /*fileName*/ ) { return true; } virtual bool ChangeParts( unsigned int partsIdx, NiNode* pNode ); virtual bool ChangePartsTexture( unsigned int /*partsIdx*/, const char* /*fileName*/ ) { return true; } virtual bool ChangePartsTexture( unsigned int /*partsIdx*/, NiTexture* /*pTex*/ ); /// ´õ¹Ì¿¡ °´Ã¼¸¦ ¸µÅ© ¾ð¸µÅ© ÇÑ´Ù. (¹«±âµî Ãß°¡ ¸ðµ¨ Á¤º¸) virtual unsigned int LinkObject( unsigned int /*dummyIdx*/, const char* /*fileName*/ ) { return UINT_MAX; } virtual unsigned int LinkObject( unsigned int dummyIdx, NiNode* pNode ); /// ¸µÅ© ÇØÁ¦ virtual void UnLinkObject( unsigned int linkIdx ); virtual cEffectSceneNode* LinkEffect( unsigned int dummyIdx, const char* fileName, NiTransform* trans, bool bLoop, bool bFollow ); virtual void UnLinkEffect( cEffectSceneNode* pnode ); /// ½ÇÁ¦·Î °´Ã¼¸¦ ¸µÅ©ÇÏ´Â °ÍÀÌ ¾Æ´Ï°í, virtual cSoundSceneNode* LinkSound( unsigned char type, unsigned long soundIdx, bool bLoop ); virtual void UnLinkSound( cSoundSceneNode* pnode ); virtual cEffectSceneNode* LinkDamage( unsigned int dummyIdx, const char* fileName, NiTransform* trans, bool IsMiss, bool zFalse ); sTrailInfo* ActiveTrailEffect( cString str, unsigned long lifeTime, unsigned int link1, unsigned int link2, float lenPer, float factor ); void DeActiveTrailEffect( sTrailInfo* pInfo ); virtual NiAVObject* GetLinkObject( unsigned int linkId ); /// float GetAniScaleFactor() { return mScaleFactor; } unsigned long GetScaleAccumTime() { return mScaleAccumTime; } unsigned long GetLastUpdateTime() { return mLastUpdateTime; } virtual void UpdateAniScaleFactor( float factor ); /// ÁßÁ¡À» ¸®ÅÏ /// ÁÖÀÇ: ¹Ù¿îµù ¹Ú½ºÀÇ Áß½ÉÀÌ ¾Æ´Ï´Ù. virtual const NiPoint3& GetObjectFoot() = 0; virtual const NiPoint3& GetObjectCenter() = 0; virtual const NiPoint3& GetObjectHead() = 0; /// ºÐÇÒ °´Ã¼ virtual NiAVObject* GetPartObject( unsigned int partsIdx ); virtual NiNode* GetDummyObject( unsigned int dummyIdx ); virtual NiAVObject* GetWeaponDummy( unsigned int /*objectIdx*/, bool /*left*/ ) { return 0; } virtual void ResetHead2(); /// ¾×ÅÍ °ü¸®ÀÚ¸¦ ¸®ÅÏ inline virtual cActorManagerForPartition* GetActorManager() { return mpActorManager; } /// ÇöÀç ¾Ö´Ï¸ÞÀÌ¼Ç inline virtual cActorManagerForPartition::EventCode GetTargetAnimation() const { return mTargetAnimation; } inline float GetTargetAnimationScaleEndTime() { return mTargetAnimationScaleEndTime; } inline unsigned long GetTargetAnimationEndTime() { return mTargetAnimationEndTime; } virtual void SetTargetAnimation( unsigned int code ); virtual bool UpdateTargetAnimation( unsigned int code ); /// °ÔÀÓ °´Ã¼¿¡ ´ëÇÑ ¿¬°á virtual cBaseObject* GetGameObject(); /// ¸»Ç³¼± Ç¥Çö. virtual void ActiveChatBubble( LPTSTR msg, unsigned long color ); virtual void ActiveChatBubble( sTextItem* text ); virtual void ActiveQuestText( LPCTSTR /*msg*/, unsigned long /*color*/ ) {} virtual void ActiveTarotBubble( LPTSTR /*title*/, unsigned long /*color*/ ) {} virtual void DeActiveTarotBubble() {} virtual void ActiveUserSellBubble( LPTSTR /*title*/, unsigned long /*color*/ ) {} virtual void DeActiveUserSellBubble() {} inline void ShowNameGauge( bool show ) { mShowNameGauge = show; } /// °´Ã¼ À̸§Ç¥ virtual void UpdateNameCardTextValue(); virtual void UpdateNameCardGaugeValue(); virtual void UpdateGuildName(); virtual void UpdateGuildMark(); virtual void PreviewGuildMark( NiTexture* tex ); virtual void PreviewTodayWord( LPCTSTR word, unsigned long color ); /// void GotoLastFrame(); void AnimationReset(); /// Á¶¸í NiAmbientLight* FindAmbientLight( NiAVObject* obj ); void ClearEffect(); void ClearSound(); cObjectNameCard* GetNameCard() { return mpNameCard; } virtual void UpdateLinkEffect() {} virtual void CalcScreenPos(); virtual bool PickManagedPlane( float mouseX, float mouseY ); virtual void SetTargetScale( float scale, bool Init ); inline virtual void HideEar( bool hide ) {} inline bool IsEnableVisibleArray() { return mSetVisibleArray; } virtual void SetFieldEffRadius( float /*r */) {} virtual void UpdateFieldTargetEffect( NiPoint3 /*center*/ ) {} inline virtual cActorManagerForPartition* GetVehicleActorManager() { return 0; } inline virtual cActorManagerForPartition::EventCode GetVehicleTargetAnimation() const { return UINT_MAX; } /// È­¸é¿¡ º¸¿©Áú¶§ Ä«¸Þ¶ó¿ÍÀÇ °Å¸®(AddToVisibleArray°¡ È£Ãâ¾ÈµÇ´Â °´Ã¼ÀÎ °æ¿ì °ªÀÌ ¾²·¹±â´Ù.) float mVisibleCamLength; protected: cDynamicSceneNode( eType type = eDYNAMIC ); virtual ~cDynamicSceneNode(); /// ÃʱâÈ­ virtual bool Init( const cDynamicSceneNodeParam& param ); /// virtual cObjectNameCard* CreateNameCard( cBaseObject* pObj ) = 0; ///-> /// ¸µÅ© Á¤º¸¸¦ ÃʱâÈ­ ÇÑ´Ù. virtual bool InitLinkInfo() = 0; /// Idle¾Ö´Ï°¡ ¿©·¯°³ ÀÖÀ»°æ¿ì ÃʱâÈ­ ÇÑ´Ù. virtual void InitializeRandomIdle() {} /// ¹ÙÀÌÆÐµå¸¦ º°µµ·Î ¿òÁ÷ÀÌ´Â °æ¿ì¿¡ ´ëÇÑó¸® (½Ã¼± ó¸® µî..) virtual void UpdateBipedRootTransforms( unsigned long /*time*/ ) {} /// °¡½Ã¿¡ µé¾î¿ÔÀ»¶§ º°µµ 󸮰¡ ÇÊ¿ä virtual void AddToVisibleArray(); virtual void AddDepthPlaneObject(); virtual void ProcessTrail( unsigned long /*deltatime*/, unsigned long /*accumtime*/ ) {} virtual void ProcessScale( unsigned long deltatime ); NiMesh* GetGeom_Parts( NiAVObject* obj ); protected: struct sLinkInfo : public NiMemObject { /// ´õ¹Ì À妽º unsigned int DummyIndex; /// µ¥ÀÌÅÍÀÇ ÂüÁ¶ NiAVObject* pObject; sLinkInfo() { DummyIndex = 0; pObject = 0; } }; protected: /// ¾×ÅÍ °ü¸®ÀÚ cActorManagerForPartition* mpActorManager; /// ÇöÀç ¾Ö´Ï À妽º cActorManagerForPartition::EventCode mTargetAnimation; float mTargetAnimationScaleEndTime; unsigned long mTargetAnimationEndTime; /// Idle¾Ö´Ï Á¤º¸ NiTPrimitiveArray* mpRandomIdle; /// °¢ ´õ¹Ì¿¡ LinkµÇ¾îÁø °´Ã¼ÀÇ Á¤º¸ NiTPrimitiveArray* mpLinkInfo; /// ÇöÀç °É·Á ÀÖ´Â Effect Á¤º¸ typedef tList cLinkIndexList; cLinkIndexList mEffectList; cLinkIndexList mSoundList; /// °´Ã¼ »ó´ÜÀ» À§ÇÑ Á¤º¸ NiNode* mpHead; NiNode* mpFoot; float mHeadDist; /// default 30.0f; int mHeadScreenPosX; int mHeadScreenPosY; int mFootScreenPosX; int mFootScreenPosY; /// °´Ã¼ÀÇ Á¤º¸¸¦ Ç¥½ÃÇϱâ À§ÇÑ °´Ã¼ cObjectNameCard* mpNameCard; bool mShowNameGauge; /// ¸»Ç³¼± cBubbleBase* mpChatBubble; typedef tList cPickDataList; cPickDataList mPickDataList; NiTPointerList mRibbonList; protected: /// ¾Ö´Ï ¼Óµµ Á¶ÀýÀÚ unsigned long mScaleAccumTime; unsigned long mLastUpdateTime; float mScaleFactor; /// ¾Ö´Ï¸ÞÀÌ¼Ç °ü¸®À妽º¸¦ ÂüÁ¶Çϱâ À§ÇØ ¸ðµ¨ Á¤º¸¸¦ °®´Â´Ù. cModelInstance* mpModel; /// °ÔÀÓ °´Ã¼¿¡ ´ëÇÑ ¿¬°áÁ¤º¸(¾ÀÁ¤º¸¿¡¼­ °ÔÀÓ°´Ã¼¸¦ ¿¬°áÇÏ´Â ´Ù¸®¿ªÇÒ) sObject mGameObject; /// ±×¸²ÀÚ ±âÇÏ cShadowGeometry* mShadowGeom; bool mNeedUpdateShadow; bool mUpdateGeomInfo; bool mSetVisibleArray; /// Only Use Select Stage!! cBaseObject* mDisplayObj; float mTargetScale; unsigned long mScaleCheckTime; unsigned int mCurDtIdx; float mScaleDt[2]; };