diff --git a/Assets/Audio/Master.bank b/Assets/Audio/Master.bank index a1b4e563..f6cce22f 100644 Binary files a/Assets/Audio/Master.bank and b/Assets/Audio/Master.bank differ diff --git a/Assets/Audio/Master.strings.bank b/Assets/Audio/Master.strings.bank index ecad89fe..d858d0f6 100644 Binary files a/Assets/Audio/Master.strings.bank and b/Assets/Audio/Master.strings.bank differ diff --git a/Assets/Audio/Music.bank b/Assets/Audio/Music.bank new file mode 100644 index 00000000..3885d5df Binary files /dev/null and b/Assets/Audio/Music.bank differ diff --git a/Assets/Audio/SFX.bank b/Assets/Audio/SFX.bank new file mode 100644 index 00000000..7a7b0bbe Binary files /dev/null and b/Assets/Audio/SFX.bank differ diff --git a/Assets/Audio/UI.bank b/Assets/Audio/UI.bank new file mode 100644 index 00000000..78ed9460 Binary files /dev/null and b/Assets/Audio/UI.bank differ diff --git a/Assets/Scripts/SC_PlayerController.cs b/Assets/Scripts/SC_PlayerController.cs index 56e4c185..189622ac 100644 --- a/Assets/Scripts/SC_PlayerController.cs +++ b/Assets/Scripts/SC_PlayerController.cs @@ -81,6 +81,7 @@ public class PlayerController : Script protected override void awake() { + Audio.PlayBGMOnce2D("event:/Music/player_undetected"); //default setup isMoveKeyPress = false; holdItem = false; @@ -135,6 +136,7 @@ public class PlayerController : Script { //Rotation(); + MoveKey(); Move(); Sprint(); diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index c913030b..e98d895a 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -84,12 +84,32 @@ namespace SHADE LoadBank((AUDIO_FOLDER_PATH + "Master.bank").data()); LoadBank((AUDIO_FOLDER_PATH + "Master.strings.bank").data()); //LoadBank((AUDIO_FOLDER_PATH + "Music.bank").data()); - LoadBank((AUDIO_FOLDER_PATH + "footsteps.bank").data()); + //LoadBank((AUDIO_FOLDER_PATH + "footsteps.bank").data()); + LoadBank((AUDIO_FOLDER_PATH + "Music.bank").data()); + LoadBank((AUDIO_FOLDER_PATH + "SFX.bank").data()); + LoadBank((AUDIO_FOLDER_PATH + "UI.bank").data()); //auto clip = CreateAudioClip("event:/Characters/sfx_footsteps_human"); //clip->Play(); //PlayEventOnce("event:/Characters/sfx_footsteps_raccoon"); //PlayEventOnce("event:/SFX/Dawn/Dawn_Attack"); + + #ifdef SHEDITOR + + // Subscribe to Editor State Change Events + const std::shared_ptr ON_PLAY_RECEIVER{ std::make_shared>(this, &SHAudioSystem::onPlay) }; + const ReceiverPtr ON_PLAY_RECEIVER_PTR = std::dynamic_pointer_cast(ON_PLAY_RECEIVER); + SHEventManager::SubscribeTo(SH_EDITOR_ON_PLAY_EVENT, ON_PLAY_RECEIVER_PTR); + + const std::shared_ptr ON_STOP_RECEIVER{ std::make_shared>(this, &SHAudioSystem::onStop) }; + const ReceiverPtr ON_STOP_RECEIVER_PTR = std::dynamic_pointer_cast(ON_STOP_RECEIVER); + SHEventManager::SubscribeTo(SH_EDITOR_ON_STOP_EVENT, ON_STOP_RECEIVER_PTR); + + const std::shared_ptr ON_PAUSE_RECEIVER{ std::make_shared>(this, &SHAudioSystem::onPause) }; + const ReceiverPtr ON_PAUSE_RECEIVER_PTR = std::dynamic_pointer_cast(ON_PAUSE_RECEIVER); + SHEventManager::SubscribeTo(SH_EDITOR_ON_PAUSE_EVENT, ON_PAUSE_RECEIVER_PTR); + + #endif } void SHADE::SHAudioSystem::Run(double dt) @@ -179,7 +199,6 @@ namespace SHADE it->second->createInstance(&event); if (event) { - event->setVolume(masterVolume * (isSFX ? sfxVolume : bgmVolume)); if (spatial) { @@ -285,6 +304,7 @@ namespace SHADE if (channel->isPlaying(&isPlaying) == FMOD_OK && isPlaying) channel->stop(); } + masterGroup->stop(); } std::optional SHAudioSystem::GetEventGUID(const char* path) @@ -410,6 +430,7 @@ namespace SHADE void SHAudioSystem::SetPaused(bool pause) { paused = pause; + masterGroup->setPaused(pause); for (auto const& channel : audioChannels) { channel->setPaused(paused); @@ -552,6 +573,27 @@ namespace SHADE return value; } + SHEventHandle SHAudioSystem::onStop(SHEventPtr onStopEvent) + { + StopAllSounds(); + + return onStopEvent->handle; + } + + SHEventHandle SHAudioSystem::onPause(SHEventPtr onStopEvent) + { + SetPaused(true); + + return onStopEvent->handle; + } + SHEventHandle SHAudioSystem::onPlay(SHEventPtr onStopEvent) + { + if(GetPaused()) + SetPaused(false); + + return onStopEvent->handle; + } + } #pragma warning(pop) diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h index 7196b40d..777334e6 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h @@ -10,6 +10,8 @@ #include "Math/Vector/SHVec3.h" #include #include +#include "Events/SHEvent.h" + #include "SH_API.h" #define AUDIO_SYS_MAX_CHANNELS 1024 @@ -104,6 +106,10 @@ namespace SHADE std::vector* denseListener; AudioClipID clipID = 0; + + SHEventHandle onPlay(SHEventPtr onStopEvent); + SHEventHandle onStop(SHEventPtr onStopEvent); + SHEventHandle onPause(SHEventPtr onStopEvent); }; } diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index f240e321..5f5d32f1 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -19,6 +19,7 @@ #include "Camera/SHCameraComponent.h" #include "Camera/SHCameraArmComponent.h" #include "SHEditorComponentView.h" +#include "AudioSystem/SHAudioListenerComponent.h" namespace SHADE { @@ -128,10 +129,16 @@ namespace SHADE if (auto cameraComponent = SHComponentManager::GetComponent_s(eid)) { DrawComponent(cameraComponent); - }if (auto cameraArmComponent = SHComponentManager::GetComponent_s(eid)) + } + if (auto cameraArmComponent = SHComponentManager::GetComponent_s(eid)) { DrawComponent(cameraArmComponent); } + if (auto listenerComponent = SHComponentManager::GetComponent_s(eid)) + { + DrawComponent(listenerComponent); + } + ImGui::Separator(); // Render Scripts SHScriptEngine* scriptEngine = static_cast(SHSystemManager::GetSystem()); @@ -143,6 +150,7 @@ namespace SHADE DrawAddComponentButton(eid); DrawAddComponentButton(eid); DrawAddComponentButton(eid); + DrawAddComponentButton(eid); // Components that require Transforms