Skip to content

Commit

Permalink
Merge pull request #87 from alessandrofama/akevent-callback-signals
Browse files Browse the repository at this point in the history
Improve signal connection handling in AkEvent nodes
  • Loading branch information
alessandrofama authored Oct 19, 2023
2 parents 5b49b4f + 5c477e1 commit e662385
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 26 deletions.
62 changes: 36 additions & 26 deletions addons/Wwise/native/src/scene/ak_event.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<Dictionary> connections = get_signal_connection_list(signal);

if (!connections.is_empty())
{
callback_type |= type;
}
}
}

AkEvent2D::AkEvent2D()
{
event["name"] = "";
Expand All @@ -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<Dictionary> connections = get_signal_connection_list(signal);

if (!connections.is_empty())
{
callback_type |= type;
}
}

handle_game_event(AkUtils::GameEvent::GAMEEVENT_ENTER_TREE);
}

Expand Down Expand Up @@ -106,6 +109,8 @@ void AkEvent2D::post_event()

if (soundengine)
{
check_signal_connections();

if (callback_type)
{
playing_id = soundengine->post_event_id_callback(
Expand Down Expand Up @@ -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<Dictionary> connections = get_signal_connection_list(signal);

if (!connections.is_empty())
{
callback_type |= type;
}
}
}

AkEvent3D::AkEvent3D()
{
event["name"] = "";
Expand All @@ -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<Dictionary> 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
Expand Down Expand Up @@ -290,6 +298,8 @@ void AkEvent3D::post_event()

if (soundengine)
{
check_signal_connections();

if (callback_type)
{
playing_id = soundengine->post_event_id_callback(
Expand Down
4 changes: 4 additions & 0 deletions addons/Wwise/native/src/scene/ak_event.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand Down

0 comments on commit e662385

Please sign in to comment.