3
0

EditorMiniAudioPlaybackComponent.cpp 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include "EditorMiniAudioPlaybackComponent.h"
  9. #include <AzCore/Asset/AssetSerializer.h>
  10. #include <AzCore/Serialization/EditContext.h>
  11. #include <AzCore/Utils/Utils.h>
  12. namespace MiniAudio
  13. {
  14. AZ::ComponentDescriptor* EditorMiniAudioPlaybackComponent_CreateDescriptor()
  15. {
  16. return EditorMiniAudioPlaybackComponent::CreateDescriptor();
  17. }
  18. void EditorMiniAudioPlaybackComponent::Reflect(AZ::ReflectContext* context)
  19. {
  20. BaseClass::Reflect(context);
  21. if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
  22. {
  23. serializeContext->Class<EditorMiniAudioPlaybackComponent, BaseClass>()
  24. ->Version(4);
  25. if (AZ::EditContext* editContext = serializeContext->GetEditContext())
  26. {
  27. editContext->Class<EditorMiniAudioPlaybackComponent>("MiniAudio Playback",
  28. "")
  29. ->ClassElement(AZ::Edit::ClassElements::EditorData, "")
  30. ->Attribute(AZ::Edit::Attributes::Category, "MiniAudio")
  31. ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game"))
  32. ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
  33. ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly)
  34. ->UIElement(AZ::Edit::UIHandlers::Button, "Play Sound", "Plays the assigned sound")
  35. ->Attribute(AZ::Edit::Attributes::NameLabelOverride, "")
  36. ->Attribute(AZ::Edit::Attributes::ButtonText, "Play Sound")
  37. ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorMiniAudioPlaybackComponent::PlaySoundInEditor)
  38. ->UIElement(AZ::Edit::UIHandlers::Button, "Stop Sound", "Stops playing the sound")
  39. ->Attribute(AZ::Edit::Attributes::NameLabelOverride, "")
  40. ->Attribute(AZ::Edit::Attributes::ButtonText, "Stop Sound")
  41. ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorMiniAudioPlaybackComponent::StopSoundInEditor)
  42. ;
  43. editContext->Class<MiniAudioPlaybackComponentController>(
  44. "MiniAudioPlaybackComponentController", "")
  45. ->ClassElement(AZ::Edit::ClassElements::EditorData, "")
  46. ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
  47. ->DataElement(AZ::Edit::UIHandlers::Default, &MiniAudioPlaybackComponentController::m_config, "Configuration", "")
  48. ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly)
  49. ;
  50. editContext->Class<MiniAudioPlaybackComponentConfig>("MiniAudioPlaybackComponent Config",
  51. "[Configuration for MiniAudioPlaybackComponent]")
  52. ->ClassElement(AZ::Edit::ClassElements::EditorData, "")
  53. ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game"))
  54. ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
  55. ->DataElement(AZ::Edit::UIHandlers::Default, &MiniAudioPlaybackComponentConfig::m_sound, "Sound Asset", "Sound asset to play")
  56. ->ClassElement(AZ::Edit::ClassElements::Group, "Configuration")
  57. ->Attribute(AZ::Edit::Attributes::AutoExpand, false)
  58. ->DataElement(AZ::Edit::UIHandlers::Default, &MiniAudioPlaybackComponentConfig::m_autoplayOnActivate, "Autoplay", "Plays the sound on activation of the component.")
  59. ->DataElement(AZ::Edit::UIHandlers::Default, &MiniAudioPlaybackComponentConfig::m_loop, "Loop", "Loops the sound.")
  60. ->DataElement(AZ::Edit::UIHandlers::Default, &MiniAudioPlaybackComponentConfig::m_volume, "Volume", "The volume of the sound when played.")
  61. ->Attribute(AZ::Edit::Attributes::Min, 0.f)
  62. ->Attribute(AZ::Edit::Attributes::SoftMax, 10.f)
  63. ->DataElement(AZ::Edit::UIHandlers::Default, &MiniAudioPlaybackComponentConfig::m_autoFollowEntity, "Auto-follow",
  64. "The sound's position is updated to match the entity's position.")
  65. ->ClassElement(AZ::Edit::ClassElements::Group, "Spatialization")
  66. ->Attribute(AZ::Edit::Attributes::AutoExpand, false)
  67. ->DataElement(AZ::Edit::UIHandlers::Default, &MiniAudioPlaybackComponentConfig::m_enableSpatialization, "Spatialization", "If true the sound will have 3D position in the world and will have effects applied to it based on the distance from a sound listener.")
  68. ->DataElement(AZ::Edit::UIHandlers::ComboBox, &MiniAudioPlaybackComponentConfig::m_attenuationModel, "Attenuation", "Attenuation model.")
  69. ->EnumAttribute(AttenuationModel::Inverse, "Inverse")
  70. ->EnumAttribute(AttenuationModel::Exponential, "Exponential")
  71. ->EnumAttribute(AttenuationModel::Linear, "Linear")
  72. ->DataElement(AZ::Edit::UIHandlers::Default, &MiniAudioPlaybackComponentConfig::m_minimumDistance, "Min Distance", "Minimum distance for attenuation.")
  73. ->DataElement(AZ::Edit::UIHandlers::Default, &MiniAudioPlaybackComponentConfig::m_maximumDistance, "Max Distance", "Maximum distance for attenuation.")
  74. ;
  75. }
  76. }
  77. }
  78. EditorMiniAudioPlaybackComponent::EditorMiniAudioPlaybackComponent(const MiniAudioPlaybackComponentConfig& config)
  79. : BaseClass(config)
  80. {
  81. }
  82. void EditorMiniAudioPlaybackComponent::Activate()
  83. {
  84. BaseClass::Activate();
  85. }
  86. void EditorMiniAudioPlaybackComponent::Deactivate()
  87. {
  88. BaseClass::Deactivate();
  89. }
  90. AZ::u32 EditorMiniAudioPlaybackComponent::OnConfigurationChanged()
  91. {
  92. m_controller.OnConfigurationUpdated();
  93. return AZ::Edit::PropertyRefreshLevels::None;
  94. }
  95. AZ::Crc32 EditorMiniAudioPlaybackComponent::PlaySoundInEditor()
  96. {
  97. m_controller.Stop();
  98. m_controller.Play();
  99. return AZ::Edit::PropertyRefreshLevels::None;
  100. }
  101. AZ::Crc32 EditorMiniAudioPlaybackComponent::StopSoundInEditor()
  102. {
  103. m_controller.Stop();
  104. return AZ::Edit::PropertyRefreshLevels::None;
  105. }
  106. AZ::Crc32 EditorMiniAudioPlaybackComponent::OnVolumeChanged()
  107. {
  108. m_controller.SetVolume(m_controller.GetConfiguration().m_volume);
  109. return AZ::Edit::PropertyRefreshLevels::None;
  110. }
  111. } // namespace MiniAudio