Skip to content

Commit 4dcc63e

Browse files
#1746 Fix issue where ecs_field_is_set didn't work for single-term observers
1 parent 9a61041 commit 4dcc63e

File tree

6 files changed

+487
-5
lines changed

6 files changed

+487
-5
lines changed

distr/flecs.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14334,10 +14334,10 @@ void flecs_emit_forward_id(
1433414334
it->up_fields = 1;
1433514335

1433614336
int32_t storage_i = ecs_table_type_to_column_index(tgt_table, column);
14337+
it->trs[0] = &tgt_table->_->records[column];
1433714338
if (storage_i != -1) {
14338-
ecs_assert(cr->type_info != NULL, ECS_INTERNAL_ERROR, NULL);
1433914339
ecs_column_t *c = &tgt_table->data.columns[storage_i];
14340-
it->trs[0] = &tgt_table->_->records[column];
14340+
ecs_assert(cr->type_info != NULL, ECS_INTERNAL_ERROR, NULL);
1434114341
ECS_CONST_CAST(int32_t*, it->sizes)[0] = c->ti->size; /* safe, see above */
1434214342
}
1434314343

@@ -15676,6 +15676,8 @@ void flecs_uni_observer_invoke(
1567615676
int32_t event_cur = it->event_cur;
1567715677
ecs_entity_t old_system = flecs_stage_set_system(
1567815678
world->stages[0], o->entity);
15679+
ecs_flags32_t cur_set_fields = it->set_fields;
15680+
it->set_fields = 1;
1567915681

1568015682
ecs_query_t *query = o->query;
1568115683
it->query = query;
@@ -15755,6 +15757,7 @@ void flecs_uni_observer_invoke(
1575515757

1575615758
it->event = event;
1575715759
it->event_cur = event_cur;
15760+
it->set_fields = cur_set_fields;
1575815761

1575915762
ecs_log_pop_3();
1576015763

src/observable.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -542,10 +542,10 @@ void flecs_emit_forward_id(
542542
it->up_fields = 1;
543543

544544
int32_t storage_i = ecs_table_type_to_column_index(tgt_table, column);
545+
it->trs[0] = &tgt_table->_->records[column];
545546
if (storage_i != -1) {
546-
ecs_assert(cr->type_info != NULL, ECS_INTERNAL_ERROR, NULL);
547547
ecs_column_t *c = &tgt_table->data.columns[storage_i];
548-
it->trs[0] = &tgt_table->_->records[column];
548+
ecs_assert(cr->type_info != NULL, ECS_INTERNAL_ERROR, NULL);
549549
ECS_CONST_CAST(int32_t*, it->sizes)[0] = c->ti->size; /* safe, see above */
550550
}
551551

src/observer.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,8 @@ void flecs_uni_observer_invoke(
361361
int32_t event_cur = it->event_cur;
362362
ecs_entity_t old_system = flecs_stage_set_system(
363363
world->stages[0], o->entity);
364+
ecs_flags32_t cur_set_fields = it->set_fields;
365+
it->set_fields = 1;
364366

365367
ecs_query_t *query = o->query;
366368
it->query = query;
@@ -440,6 +442,7 @@ void flecs_uni_observer_invoke(
440442

441443
it->event = event;
442444
it->event_cur = event_cur;
445+
it->set_fields = cur_set_fields;
443446

444447
ecs_log_pop_3();
445448

test/core/project.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1826,6 +1826,22 @@
18261826
"create_multi_observer_after_in_use_w_delete_component",
18271827
"on_set_override_after_on_add",
18281828
"on_set_two_overrides_after_on_add",
1829+
"1_term_on_add_is_set",
1830+
"1_term_on_remove_is_set",
1831+
"1_term_on_set_is_set",
1832+
"1_term_on_add_is_set_component",
1833+
"1_term_on_remove_is_set_component",
1834+
"2_terms_on_add_is_set",
1835+
"2_terms_on_remove_is_set",
1836+
"2_terms_on_set_is_set",
1837+
"2_terms_on_add_is_set_component",
1838+
"2_terms_on_remove_is_set_component",
1839+
"1_term_on_add_yield_existing_is_set",
1840+
"1_term_on_add_yield_existing_is_set_component",
1841+
"1_term_on_set_yield_existing_is_set",
1842+
"2_terms_on_add_yield_existing_is_set",
1843+
"2_terms_on_add_yield_existing_is_set_component",
1844+
"2_terms_on_set_yield_existing_is_set",
18291845
"cache_test_1",
18301846
"cache_test_2",
18311847
"cache_test_3",

0 commit comments

Comments
 (0)