diff --git a/addons/Wwise/native/src/scene/ak_event.cpp b/addons/Wwise/native/src/scene/ak_event.cpp index 2963471e..a09d3357 100644 --- a/addons/Wwise/native/src/scene/ak_event.cpp +++ b/addons/Wwise/native/src/scene/ak_event.cpp @@ -33,6 +33,22 @@ void AkEvent2D::_bind_methods() ADD_ALL_AK_EVENT_SIGNALS; } +void AkEvent2D::check_signal_connections() +{ + for (const auto& entry : AkUtils::get_singleton()->event_callback_signals) + { + AkUtils::AkCallbackType type = entry.first; + StringName signal = entry.second; + + TypedArray connections = get_signal_connection_list(signal); + + if (!connections.is_empty()) + { + callback_type |= type; + } + } +} + AkEvent2D::AkEvent2D() { event["name"] = ""; @@ -56,19 +72,6 @@ void AkEvent2D::_enter_tree() soundengine->register_game_obj(this, get_name()); } - for (const auto& entry : AkUtils::get_singleton()->event_callback_signals) - { - AkUtils::AkCallbackType type = entry.first; - StringName signal = entry.second; - - TypedArray connections = get_signal_connection_list(signal); - - if (!connections.is_empty()) - { - callback_type |= type; - } - } - handle_game_event(AkUtils::GameEvent::GAMEEVENT_ENTER_TREE); } @@ -106,6 +109,8 @@ void AkEvent2D::post_event() if (soundengine) { + check_signal_connections(); + if (callback_type) { playing_id = soundengine->post_event_id_callback( @@ -195,6 +200,22 @@ void AkEvent3D::_bind_methods() ADD_ALL_AK_EVENT_SIGNALS; } +void AkEvent3D::check_signal_connections() +{ + for (const auto& entry : AkUtils::get_singleton()->event_callback_signals) + { + AkUtils::AkCallbackType type = entry.first; + StringName signal = entry.second; + + TypedArray connections = get_signal_connection_list(signal); + + if (!connections.is_empty()) + { + callback_type |= type; + } + } +} + AkEvent3D::AkEvent3D() { event["name"] = ""; @@ -218,19 +239,6 @@ void AkEvent3D::_enter_tree() soundengine->register_game_obj(this, get_name()); } - for (const auto& entry : AkUtils::get_singleton()->event_callback_signals) - { - AkUtils::AkCallbackType type = entry.first; - StringName signal = entry.second; - - TypedArray connections = get_signal_connection_list(signal); - - if (!connections.is_empty()) - { - callback_type |= type; - } - } - if (is_environment_aware) { // todo(alex): set up raycast and get the listener for AK::SoundEngine::SetObjectObstructionAndOcclusion @@ -290,6 +298,8 @@ void AkEvent3D::post_event() if (soundengine) { + check_signal_connections(); + if (callback_type) { playing_id = soundengine->post_event_id_callback( diff --git a/addons/Wwise/native/src/scene/ak_event.h b/addons/Wwise/native/src/scene/ak_event.h index 2e2be842..ab4c106e 100644 --- a/addons/Wwise/native/src/scene/ak_event.h +++ b/addons/Wwise/native/src/scene/ak_event.h @@ -29,6 +29,8 @@ class AkEvent2D : public Node2D AkUtils::GameEvent trigger_on = AkUtils::GameEvent::GAMEEVENT_NONE; AkUtils::GameEvent stop_on = AkUtils::GameEvent::GAMEEVENT_NONE; + void check_signal_connections(); + public: AkEvent2D(); virtual void _enter_tree() override; @@ -79,6 +81,8 @@ class AkEvent3D : public Node3D AkUtils::GameEvent trigger_on = AkUtils::GameEvent::GAMEEVENT_NONE; AkUtils::GameEvent stop_on = AkUtils::GameEvent::GAMEEVENT_NONE; + void check_signal_connections(); + public: AkEnvironmentData* environment_data = nullptr;