AreaSW and Area2DSW: fix premature return in call_queries
This commit is contained in:
parent
4e44a15176
commit
89ce63a84f
2 changed files with 104 additions and 108 deletions
|
@ -200,19 +200,14 @@ void AreaSW::set_monitorable(bool p_monitorable) {
|
|||
|
||||
void AreaSW::call_queries() {
|
||||
if (monitor_callback_id && !monitored_bodies.empty()) {
|
||||
Object *obj = ObjectDB::get_instance(monitor_callback_id);
|
||||
if (obj) {
|
||||
Variant res[5];
|
||||
Variant *resptr[5];
|
||||
for (int i = 0; i < 5; i++) {
|
||||
resptr[i] = &res[i];
|
||||
}
|
||||
|
||||
Object *obj = ObjectDB::get_instance(monitor_callback_id);
|
||||
if (!obj) {
|
||||
monitored_bodies.clear();
|
||||
monitor_callback_id = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
for (Map<BodyKey, BodyState>::Element *E = monitored_bodies.front(); E;) {
|
||||
if (E->get().state == 0) { // Nothing happened
|
||||
Map<BodyKey, BodyState>::Element *next = E->next();
|
||||
|
@ -234,22 +229,21 @@ void AreaSW::call_queries() {
|
|||
Variant::CallError ce;
|
||||
obj->call(monitor_callback_method, (const Variant **)resptr, 5, ce);
|
||||
}
|
||||
} else {
|
||||
monitored_bodies.clear();
|
||||
monitor_callback_id = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (area_monitor_callback_id && !monitored_areas.empty()) {
|
||||
Object *obj = ObjectDB::get_instance(area_monitor_callback_id);
|
||||
if (obj) {
|
||||
Variant res[5];
|
||||
Variant *resptr[5];
|
||||
for (int i = 0; i < 5; i++) {
|
||||
resptr[i] = &res[i];
|
||||
}
|
||||
|
||||
Object *obj = ObjectDB::get_instance(area_monitor_callback_id);
|
||||
if (!obj) {
|
||||
monitored_areas.clear();
|
||||
area_monitor_callback_id = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
for (Map<BodyKey, BodyState>::Element *E = monitored_areas.front(); E;) {
|
||||
if (E->get().state == 0) { // Nothing happened
|
||||
Map<BodyKey, BodyState>::Element *next = E->next();
|
||||
|
@ -271,6 +265,10 @@ void AreaSW::call_queries() {
|
|||
Variant::CallError ce;
|
||||
obj->call(area_monitor_callback_method, (const Variant **)resptr, 5, ce);
|
||||
}
|
||||
} else {
|
||||
monitored_areas.clear();
|
||||
area_monitor_callback_id = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -200,19 +200,14 @@ void Area2DSW::set_monitorable(bool p_monitorable) {
|
|||
|
||||
void Area2DSW::call_queries() {
|
||||
if (monitor_callback_id && !monitored_bodies.empty()) {
|
||||
Object *obj = ObjectDB::get_instance(monitor_callback_id);
|
||||
if (obj) {
|
||||
Variant res[5];
|
||||
Variant *resptr[5];
|
||||
for (int i = 0; i < 5; i++) {
|
||||
resptr[i] = &res[i];
|
||||
}
|
||||
|
||||
Object *obj = ObjectDB::get_instance(monitor_callback_id);
|
||||
if (!obj) {
|
||||
monitored_bodies.clear();
|
||||
monitor_callback_id = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
for (Map<BodyKey, BodyState>::Element *E = monitored_bodies.front(); E;) {
|
||||
if (E->get().state == 0) { // Nothing happened
|
||||
Map<BodyKey, BodyState>::Element *next = E->next();
|
||||
|
@ -234,22 +229,21 @@ void Area2DSW::call_queries() {
|
|||
Variant::CallError ce;
|
||||
obj->call(monitor_callback_method, (const Variant **)resptr, 5, ce);
|
||||
}
|
||||
} else {
|
||||
monitored_bodies.clear();
|
||||
monitor_callback_id = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (area_monitor_callback_id && !monitored_areas.empty()) {
|
||||
Object *obj = ObjectDB::get_instance(area_monitor_callback_id);
|
||||
if (obj) {
|
||||
Variant res[5];
|
||||
Variant *resptr[5];
|
||||
for (int i = 0; i < 5; i++) {
|
||||
resptr[i] = &res[i];
|
||||
}
|
||||
|
||||
Object *obj = ObjectDB::get_instance(area_monitor_callback_id);
|
||||
if (!obj) {
|
||||
monitored_areas.clear();
|
||||
area_monitor_callback_id = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
for (Map<BodyKey, BodyState>::Element *E = monitored_areas.front(); E;) {
|
||||
if (E->get().state == 0) { // Nothing happened
|
||||
Map<BodyKey, BodyState>::Element *next = E->next();
|
||||
|
@ -271,6 +265,10 @@ void Area2DSW::call_queries() {
|
|||
Variant::CallError ce;
|
||||
obj->call(area_monitor_callback_method, (const Variant **)resptr, 5, ce);
|
||||
}
|
||||
} else {
|
||||
monitored_areas.clear();
|
||||
area_monitor_callback_id = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue