@@ -54,8 +54,18 @@ void AkEnvironmentData::add_highest_priority_environments()
54
54
{
55
55
if (aux_array_data.data .size () < active_environments.size ())
56
56
{
57
+ Vector<int > invalid_indices;
58
+
57
59
for (int i = 0 ; i < active_environments.size (); i++)
58
60
{
61
+ Variant environment = active_environments[i];
62
+
63
+ if (!UtilityFunctions::is_instance_valid (environment))
64
+ {
65
+ invalid_indices.push_back (i);
66
+ continue ;
67
+ }
68
+
59
69
const AkEnvironment* env = Object::cast_to<AkEnvironment>(active_environments[i].operator godot::Object*());
60
70
61
71
if (env)
@@ -68,26 +78,37 @@ void AkEnvironmentData::add_highest_priority_environments()
68
78
continue ;
69
79
}
70
80
71
- for (int i = 0 ; i < aux_array_data.data .size (); i++)
81
+ bool exists = false ;
82
+ for (int j = 0 ; j < aux_array_data.data .size (); j++)
72
83
{
73
- Dictionary current_aux_data = aux_array_data.data [i];
74
- if (current_aux_data.has (" aux_bus_id" ))
84
+ Dictionary current_aux_data = aux_array_data.data [j];
85
+ if (current_aux_data.has (" aux_bus_id" ) &&
86
+ (uint32_t )current_aux_data[" aux_bus_id" ] == aux_bus->get_id ())
75
87
{
76
- if ((uint32_t )current_aux_data[" aux_bus_id" ] == aux_bus->get_id ())
77
- {
78
- continue ;
79
- }
88
+ exists = true ;
89
+ break ;
80
90
}
81
91
}
82
92
83
- Dictionary aux_data;
84
- uint32_t id = aux_bus->get_id ();
85
- aux_data[" control_value" ] = 1 .0f ;
86
- aux_data[" aux_bus_id" ] = id;
87
- aux_array_data.data .append (aux_data);
93
+ if (!exists)
94
+ {
95
+ Dictionary aux_data;
96
+ aux_data[" control_value" ] = 1 .0f ;
97
+ aux_data[" aux_bus_id" ] = aux_bus->get_id ();
98
+ aux_array_data.data .append (aux_data);
99
+ }
88
100
}
89
101
}
90
102
}
103
+
104
+ if (!invalid_indices.is_empty ())
105
+ {
106
+ for (int i = invalid_indices.size () - 1 ; i >= 0 ; i--)
107
+ {
108
+ active_environments.remove_at (invalid_indices[i]);
109
+ }
110
+ have_environments_changed = true ;
111
+ }
91
112
}
92
113
}
93
114
0 commit comments