/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2006.12.20 * ³» ¿ë : µ¿Àû Àå¸é ³ëµå * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "SceneNode.h" #include "ActorManagerForPartition.h" class cRibbonGeometry; class cShadowGeometry; //class cEffectSceneNode; //class cSoundSceneNode; //class cObjectNameCard; //class cChatBubble; //class cBaseObject; /// µ¿Àû Àå¸é ³ëµå ÀÎÀÚ class cDynamicSceneNodeParam : public cSceneNodeParam { public: cDynamicSceneNodeParam(); public: bool mUseShadow; }; inline cDynamicSceneNodeParam::cDynamicSceneNodeParam() : mUseShadow( true ) { } /// µ¿Àû Àå¸é ³ëµå class cDynamicSceneNode : public cSceneNode { friend class cSceneManager; public: /// ó¸® virtual void Process( unsigned long deltaTime, unsigned long accumTime ); virtual bool OnVisible( cSceneCuller& culler ); 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 ); /// ¸µÅ© void UnLinkObject( unsigned int linkIdx ); NiAVObject* GetLinkObject( unsigned int linkId ); /// void UpdateAniScaleFactor( float factor ); /// ºÐÇÒ °´Ã¼ virtual NiAVObject* GetPartObject( unsigned int index ) const; virtual NiAVObject* GetPartWeapon( unsigned int /*objectIdx*/, bool /*left*/ ) { return 0; } /// ¾×ÅÍ °ü¸®ÀÚ¸¦ ¸®ÅÏ inline cActorManagerForPartition* GetActorManager() { return mActorManager; } /// ÇöÀç ¾Ö´Ï¸ÞÀÌ¼Ç cActorManagerForPartition::EventCode GetTargetAnimation() const { return mTargetAnimation; } virtual void SetTargetAnimation( unsigned int code ); bool UpdateTargetAnimation( unsigned int code ); /// °´Ã¼ÀÇ °¢Á¾ Morpher¸¦ Á¦¾îÇϱâ À§Çؼ­.. void StartMorpher(); void StopMorpher(); /// void GotoLastFrame(); /// Á¶¸í void FindLight( NiAVObject* obj ); void SetAmbientLightAmbient( const NiColor& color ); void SetAmbientLightDiffuse( const NiColor& color ); void SetAmbientLightDimmer( float dimmer ); NiAmbientLight* FindAmbientLight( NiAVObject* obj ); /// ¹ÝÁö¸§ //virtual float GetRadius() const; protected: cDynamicSceneNode( eSceneNodeType type = SCENENODE_DYNAMIC ); virtual ~cDynamicSceneNode(); /// ÃʱâÈ­ virtual bool Init( const cDynamicSceneNodeParam& param ); virtual void RecollectGeoms(); /// picking ¿ë ¹Ú½º, ±¸, ½Ç¸°´õ °´Ã¼¸¦ ¸ðÀº´Ù. void CollectPickData( NiAVObject* pobj ); NiAVObject* CollectTestData( NiNode* pobj ); /// ¸µÅ© Á¤º¸¸¦ ÃʱâÈ­ ÇÑ´Ù. virtual bool InitLinkInfo() = 0; /// ºÐÇÒ Á¤º¸¸¦ ÃʱâÈ­ ÇÑ´Ù. virtual bool InitPartsName() = 0; /// Idle¾Ö´Ï°¡ ¿©·¯°³ ÀÖÀ»°æ¿ì ÃʱâÈ­ ÇÑ´Ù. virtual void InitializeRandomIdle() {} /// ¹ÙÀÌÆÐµå¸¦ º°µµ·Î ¿òÁ÷ÀÌ´Â °æ¿ì¿¡ ´ëÇÑó¸® (½Ã¼± ó¸® µî..) virtual void UpdateBipedRootTransforms( unsigned long /*time*/ ) {} /// ±âÇÏ ¿ÀºêÁ§Æ®µéÀ» °¡½Ã ¹è¿­¿¡ Ãß°¡ void AddToVisibleArray( NiVisibleArray* solidArray, NiVisibleArray* alphaArray, NiVisibleArray* alphaTestArray ); protected: struct sBoneDataObj : public NiMemObject { /// »À´ë Á¤º¸ NiSkinData::BoneData* pBoneData; /// »ÀÀÇ Á¤Á¡ Á¤º¸ NiTPrimitiveSet BoneVertData; }; struct sLinkInfo : public NiMemObject { /// ´õ¹Ì À妽º unsigned int DummyIndex; /// ½ÇÁ¦ Geom µ¥ÀÌÅÍÀÇ ÂüÁ¶ // NiGeometry* pObject; NiAVObject* pObject; }; protected: /// ¾×ÅÍ °ü¸®ÀÚ cActorManagerForPartition* mActorManager; /// ÇöÀç ¾Ö´Ï À妽º cActorManagerForPartition::EventCode mTargetAnimation; /// Idle¾Ö´Ï Á¤º¸ NiTPrimitiveArray* mRandomIdle; /// °¢ ´õ¹Ì¿¡ LinkµÇ¾îÁø °´Ã¼ÀÇ Á¤º¸ NiTPrimitiveArray* mLinkInfo; /// ÇöÀç °É·Á ÀÖ´Â Effect Á¤º¸ //NiTPointerList mEffectList; //NiTPointerList mSoundList; /// °¢ ÆÄÆ®º° Geom°´Ã¼ÀÇ À̸§ (±×·¡ÇÈ Á¦À۽à °áÁ¤µÈ À̸§À» µî·ÏÇÑ´Ù.) NiTPointerMap mPartsNameMap; /// °´Ã¼ »ó´ÜÀ» À§ÇÑ Á¤º¸ NiAVObject* mHead; float mHeadDist; /// °´Ã¼ÀÇ Á¤º¸¸¦ Ç¥½ÃÇϱâ À§ÇÑ °´Ã¼ //cObjectNameCard* mpNameCard; /// ¸»Ç³¼± //cChatBubble* mpChatBubble; typedef tList cPickDataList; cPickDataList mPickDataList; private: /// ¾Ö´Ï ¼Óµµ Á¶ÀýÀÚ unsigned long mScaleAccumTime; unsigned long mLastTime; float mScaleFactor; /// ¾Ö´Ï¸ÞÀÌ¼Ç °ü¸®À妽º¸¦ ÂüÁ¶Çϱâ À§ÇØ ¸ðµ¨ Á¤º¸¸¦ °®´Â´Ù. cModelInstance* mModel; /// °ÔÀÓ °´Ã¼¿¡ ´ëÇÑ ¿¬°áÁ¤º¸(¾ÀÁ¤º¸¿¡¼­ °ÔÀÓ°´Ã¼¸¦ ¿¬°áÇÏ´Â ´Ù¸®¿ªÇÒ) //cBaseObject* mpGameObject; /// ¹ÝÁö¸§ float mRadius; /// Á¶¸í NiAmbientLight* mAmbientLight; #ifdef MAP_EDITOR /// ±ËÀû ±âÇÏ cRibbonGeometry* mRibbonGeom; /// ±×¸²ÀÚ ±âÇÏ cShadowGeometry* mShadowGeom; bool mNeedUpdateShadow; #endif /// MAP_EDITOR };