BsCAudioSource.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsCorePrerequisites.h"
  5. #include "Audio/BsAudioSource.h"
  6. #include "Scene/BsComponent.h"
  7. namespace bs
  8. {
  9. /** @addtogroup Components-Core
  10. * @{
  11. */
  12. /**
  13. * @copydoc AudioSource
  14. *
  15. * @note Wraps AudioSource as a Component.
  16. */
  17. class BS_CORE_EXPORT BS_SCRIPT_EXPORT(m:Audio,n:AudioSource) CAudioSource : public Component
  18. {
  19. public:
  20. CAudioSource(const HSceneObject& parent);
  21. virtual ~CAudioSource() {}
  22. /** @copydoc AudioSource::setClip */
  23. BS_SCRIPT_EXPORT(n:Clip,pr:setter)
  24. void setClip(const HAudioClip& clip);
  25. /** @copydoc AudioSource::getClip */
  26. BS_SCRIPT_EXPORT(n:Clip,pr:getter)
  27. HAudioClip getClip() const { return mAudioClip; }
  28. /** @copydoc AudioSource::setVolume */
  29. BS_SCRIPT_EXPORT(n:Volume,pr:setter)
  30. void setVolume(float volume);
  31. /** @copydoc AudioSource::getVolume */
  32. BS_SCRIPT_EXPORT(n:Volume,pr:getter)
  33. float getVolume() const { return mVolume; }
  34. /** @copydoc AudioSource::setPitch */
  35. BS_SCRIPT_EXPORT(n:Pitch,pr:setter)
  36. void setPitch(float pitch);
  37. /** @copydoc AudioSource::getPitch */
  38. BS_SCRIPT_EXPORT(n:Pitch,pr:getter)
  39. float getPitch() const { return mPitch; }
  40. /** @copydoc AudioSource::setIsLooping */
  41. BS_SCRIPT_EXPORT(n:Loop,pr:setter)
  42. void setIsLooping(bool loop);
  43. /** @copydoc AudioSource::getIsLooping */
  44. BS_SCRIPT_EXPORT(n:Loop,pr:getter)
  45. bool getIsLooping() const { return mLoop; }
  46. /** @copydoc AudioSource::setPriority */
  47. BS_SCRIPT_EXPORT(n:Priority,pr:setter)
  48. void setPriority(UINT32 priority);
  49. /** @copydoc AudioSource::getPriority */
  50. BS_SCRIPT_EXPORT(n:Priority,pr:getter)
  51. UINT32 getPriority() const { return mPriority; }
  52. /** @copydoc AudioSource::setMinDistance */
  53. BS_SCRIPT_EXPORT(n:MinDistance,pr:setter)
  54. void setMinDistance(float distance);
  55. /** @copydoc AudioSource::getMinDistance */
  56. BS_SCRIPT_EXPORT(n:MinDistance,pr:getter)
  57. float getMinDistance() const { return mMinDistance; }
  58. /** @copydoc AudioSource::setAttenuation */
  59. BS_SCRIPT_EXPORT(n:Attenuation,pr:setter)
  60. void setAttenuation(float attenuation);
  61. /** @copydoc AudioSource::getAttenuation */
  62. BS_SCRIPT_EXPORT(n:Attenuation,pr:getter)
  63. float getAttenuation() const { return mAttenuation; }
  64. /** @copydoc AudioSource::setTime */
  65. BS_SCRIPT_EXPORT(n:Time,pr:setter)
  66. void setTime(float time);
  67. /** @copydoc AudioSource::getTime */
  68. BS_SCRIPT_EXPORT(n:Time,pr:getter)
  69. float getTime() const;
  70. /** Sets whether playback should start as soon as the component is enabled. */
  71. BS_SCRIPT_EXPORT(n:PlayOnStart,pr:setter)
  72. void setPlayOnStart(bool enable) { mPlayOnStart = enable; }
  73. /** Determines should playback start as soon as the component is enabled. */
  74. BS_SCRIPT_EXPORT(n:PlayOnStart,pr:getter)
  75. bool getPlayOnStart() const { return mPlayOnStart; }
  76. /** @copydoc AudioSource::play */
  77. BS_SCRIPT_EXPORT(n:Play)
  78. void play();
  79. /** @copydoc AudioSource::pause */
  80. BS_SCRIPT_EXPORT(n:Pause)
  81. void pause();
  82. /** @copydoc AudioSource::stop */
  83. BS_SCRIPT_EXPORT(n:Stop)
  84. void stop();
  85. /** @copydoc AudioSource::getState */
  86. BS_SCRIPT_EXPORT(n:State,pr:getter)
  87. AudioSourceState getState() const;
  88. /** @name Internal
  89. * @{
  90. */
  91. /** Returns the AudioSource implementation wrapped by this component. */
  92. AudioSource* _getInternal() const { return mInternal.get(); }
  93. /** @} */
  94. /************************************************************************/
  95. /* COMPONENT OVERRIDES */
  96. /************************************************************************/
  97. protected:
  98. friend class SceneObject;
  99. /** @copydoc Component::onInitialized() */
  100. void onInitialized() override;
  101. /** @copydoc Component::onDestroyed() */
  102. void onDestroyed() override;
  103. /** @copydoc Component::onDisabled() */
  104. void onDisabled() override;
  105. /** @copydoc Component::onEnabled() */
  106. void onEnabled() override;
  107. /** @copydoc Component::onTransformChanged() */
  108. void onTransformChanged(TransformChangedFlags flags) override;
  109. /** @copydoc Component::update() */
  110. void update() override;
  111. protected:
  112. using Component::destroyInternal;
  113. /** Creates the internal representation of the AudioSource and restores the values saved by the Component. */
  114. void restoreInternal();
  115. /** Destroys the internal AudioSource representation. */
  116. void destroyInternal();
  117. /**
  118. * Updates the transform of the internal AudioSource representation from the transform of the component's scene
  119. * object.
  120. */
  121. void updateTransform();
  122. SPtr<AudioSource> mInternal;
  123. Vector3 mLastPosition = Vector3::ZERO;
  124. Vector3 mVelocity = Vector3::ZERO;
  125. HAudioClip mAudioClip;
  126. float mVolume;
  127. float mPitch;
  128. bool mLoop;
  129. UINT32 mPriority;
  130. float mMinDistance;
  131. float mAttenuation;
  132. bool mPlayOnStart;
  133. /************************************************************************/
  134. /* RTTI */
  135. /************************************************************************/
  136. public:
  137. friend class CAudioSourceRTTI;
  138. static RTTITypeBase* getRTTIStatic();
  139. RTTITypeBase* getRTTI() const override;
  140. protected:
  141. CAudioSource() {} // Serialization only
  142. };
  143. /** @} */
  144. }