/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2007.01.23 * ³» ¿ë : »ç¿îµå Àå¸é ³ëµå * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "SceneNode.h" /// »ç¿îµå Àå¸é ³ëµå ÀÎÀÚ class cSoundSceneNodeParam : public cSceneNodeParam { public: cSoundSceneNodeParam(); public: /// ¹ÝÁö¸§ float mOuterRadius; /// °¨¼è °Å¸® float mAttenDistance; /// ¹Ýº¹ Ƚ¼ö unsigned int mLoopCount; /// Àç»ý °£°Ý float mLoopInterval; /// À½·® ºñÀ² [0, 1] float mVolumeRatio; }; inline cSoundSceneNodeParam::cSoundSceneNodeParam() : mOuterRadius( 1000.0f ) , mAttenDistance( 100.0f ) , mLoopCount( 0 ) , mLoopInterval( 0.0f ) , mVolumeRatio( 1.0f ) { mQueryType = NiPick::QUERY_FIRST; mPickSort = NiPick::SORT_OFF; mPickIntersect = NiPick::INTERSECT_BOUND; mPickFrontOnly = true; } #ifdef MAP_EDITOR #include "Sphere.h" /// »ç¿îµå Àå¸é ³ëµå class cSoundSceneNode : public cSceneNode { friend class cSceneManager; friend class cSoundEditor; enum eListenerStatus { LISTENER_IN, LISTENER_OUT }; public: /// ó¸® void Process( unsigned long deltaTime, unsigned long accumTime ); /// ÇÈÅ· bool Pick( const cRay& ray ); /// Áß½ÉÁ¡ const NiPoint3& GetCenter(); /// ¹ÝÁö¸§ void SetRadius( float radius ); float GetRadius(); /// °¨¼è °Å¸® void SetAttenDistance( float dist ); float GetAttenDistance() const; /// void SetListenerStatus( eListenerStatus status, const cSphere& sphere ); virtual inline NiNode* GetNiNode() { return 0; } virtual inline NiAVObject* GetNiObj() { return (NiAVObject*)mSound; } protected: cSoundSceneNode( eSceneNodeType type = SCENENODE_SOUND ); virtual ~cSoundSceneNode(); /// ÀúÀå virtual bool Save( cFileSaver& saver ); /// ÃʱâÈ­ virtual bool Init( const cSoundSceneNodeParam& param ); /// ¹Ýº¹ Ƚ¼ö void SetLoopCount( unsigned int count ); int GetLoopCount() const; /// Àç»ý °£°Ý void SetLoopInterval( float interval ); float GetLoopInterval() const; /// À½·® void SetVolumeRatio( float ratio ); float GetVolumeRatio() const; protected: /// ¿£Áø ³ëµå NiAudioSourcePtr mSound; /// ¸®½º³Ê »óÅ eListenerStatus mListenerStatus; eListenerStatus mOldListenerStatus; /// ¹ÝÁö¸§ float mRadius; /// °¨¼è °Å¸® float mAttenDistance; /// ¹Ýº¹ ȸ¼ö unsigned int mLoopCount; unsigned int mTempCount; /// Àç»ý °£°Ý float mLoopInterval; float mTempInterval; /// À½·® float mVolumeRatio; float mGain; float mTargetGain; /// ¸®½º³Ê ±¸ cSphere mListenerSphere; }; inline const NiPoint3& cSoundSceneNode::GetCenter() { return mSound->GetWorldTranslate(); } inline void cSoundSceneNode::SetRadius( float radius ) { mNeedUpdateTransform = true; mRadius = radius; } inline float cSoundSceneNode::GetRadius() { return mRadius; } inline void cSoundSceneNode::SetAttenDistance( float dist ) { mAttenDistance = dist; } inline float cSoundSceneNode::GetAttenDistance() const { return mAttenDistance; } inline void cSoundSceneNode::SetLoopCount( unsigned int count ) { mLoopCount = count; } inline int cSoundSceneNode::GetLoopCount() const { return mLoopCount; } inline void cSoundSceneNode::SetLoopInterval( float interval ) { mLoopInterval = interval; } inline float cSoundSceneNode::GetLoopInterval() const { return mLoopInterval; } inline void cSoundSceneNode::SetVolumeRatio( float ratio ) { mVolumeRatio = ratio; } inline float cSoundSceneNode::GetVolumeRatio() const { return mVolumeRatio; } #endif /// MAP_EDITOR