From 3f30bb5079fe24f620d88da7a24f95368f090a8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Madar=C3=A1sz?= Date: Sun, 16 Oct 2022 14:27:56 +0200 Subject: [PATCH] fix underlying comp cache issue --- code/foundation/src/core/rules_default.c | 2 +- code/foundation/src/models/entity.c | 21 ++++++--------------- code/foundation/src/packets/pkt_00_init.c | 7 ------- code/foundation/src/systems/systems.c | 3 ++- code/foundation/src/world/world.c | 12 +++++++----- 5 files changed, 16 insertions(+), 29 deletions(-) diff --git a/code/foundation/src/core/rules_default.c b/code/foundation/src/core/rules_default.c index feeb7d5..a416e3d 100644 --- a/code/foundation/src/core/rules_default.c +++ b/code/foundation/src/core/rules_default.c @@ -8,7 +8,7 @@ game_rulesdef game_rules = { .item_pick_radius = 25.0f, .item_merger_radius = 75.0f, .item_attract_radius = 75.0f, - .item_attract_force = .98f, + .item_attract_force = 1.98f, .item_container_reach_radius = 105.0f, .item_drop_pickup_time = 2.5f, .item_drop_merger_time = 6.5f, diff --git a/code/foundation/src/models/entity.c b/code/foundation/src/models/entity.c index 13be9a1..3c62a07 100644 --- a/code/foundation/src/models/entity.c +++ b/code/foundation/src/models/entity.c @@ -18,19 +18,10 @@ uint64_t entity_spawn(uint16_t class_id) { entity_wake(e); if (class_id != EKIND_SERVER) { - ecs_set(world_ecs(), e, Velocity, {0}); - Position *pos = ecs_get_mut(world_ecs(), e, Position); -#if 1 - pos->x=(float)(rand() % world_dim()); - pos->y=(float)(rand() % world_dim()); - entity_set_position(e, pos->x, pos->y); -#else - pos->x=350.0f; - pos->y=88.0f; -#endif - librg_entity_track(world_tracker(), e); - librg_entity_chunk_set(world_tracker(), e, librg_chunk_from_realpos(world_tracker(), pos->x, pos->y, 0)); + ecs_set(world_ecs(), e, Velocity, {0}); + entity_set_position(e, (float)(rand() % world_dim()), (float)(rand() % world_dim())); + librg_entity_owner_set(world_tracker(), e, (int64_t)e); } @@ -69,7 +60,7 @@ void entity_despawn(uint64_t ent_id) { } void entity_set_position(uint64_t ent_id, float x, float y) { - Position *p = ecs_get_mut(world_ecs(), ent_id, Position); + Position *p = ecs_get_mut_ex(world_ecs(), ent_id, Position); p->x = x; p->y = y; librg_entity_chunk_set(world_tracker(), ent_id, librg_chunk_from_realpos(world_tracker(), x, y, 0)); @@ -77,7 +68,7 @@ void entity_set_position(uint64_t ent_id, float x, float y) { } void entity_wake(uint64_t ent_id) { - StreamInfo *si = ecs_get_mut(world_ecs(), ent_id, StreamInfo); + StreamInfo *si = ecs_get_mut_ex(world_ecs(), ent_id, StreamInfo); si->tick_delay = 0.0f; si->last_update = 0.0f; } @@ -108,6 +99,6 @@ void entity_update_action_timers() { } bool entity_can_stream(uint64_t ent_id) { - StreamInfo *si = ecs_get_mut(world_ecs(), ent_id, StreamInfo); + StreamInfo *si = ecs_get_mut_ex(world_ecs(), ent_id, StreamInfo); return (si->last_update < get_cached_time()); } diff --git a/code/foundation/src/packets/pkt_00_init.c b/code/foundation/src/packets/pkt_00_init.c index df847d4..e671410 100644 --- a/code/foundation/src/packets/pkt_00_init.c +++ b/code/foundation/src/packets/pkt_00_init.c @@ -29,14 +29,7 @@ int32_t pkt_00_init_handler(pkt_header *header) { uint64_t peer_id = (uint64_t)header->udata; uint64_t ent_id = player_spawn(NULL); - Position *pos = ecs_get_mut(world_ecs(), ent_id, Position); - -#if 1 entity_set_position(ent_id, world_dim()/2.0f + rand()%15*15.0f, world_dim()/2.0f + rand()%15*15.0f); -#else - pos->x = rand()%world_dim(); - pos->y = rand()%world_dim(); -#endif zpl_printf("[INFO] initializing player entity id: %d with view id: %d for peer id: %d...\n", ent_id, table.view_id, peer_id); ecs_set(world_ecs(), ent_id, ClientInfo, {.peer = peer_id, .view_id = header->view_id, .active = false }); diff --git a/code/foundation/src/systems/systems.c b/code/foundation/src/systems/systems.c index ab10f0a..69e15ea 100644 --- a/code/foundation/src/systems/systems.c +++ b/code/foundation/src/systems/systems.c @@ -37,7 +37,8 @@ void IntegratePositions(ecs_iter_t *it) { if (ecs_get(it->world, it->entities[i], IsInVehicle)) { continue; } - if (zpl_abs(v[i].x) >= 0.001f || zpl_abs(v[i].y) >= 0.001f) { + if (zpl_abs(v[i].x) >= 0.001f || zpl_abs(v[i].y) >= 0.001f) + { // NOTE(zaklaus): world bounds { float w = (float)world_dim(); diff --git a/code/foundation/src/world/world.c b/code/foundation/src/world/world.c index 6b847c6..347ee85 100644 --- a/code/foundation/src/world/world.c +++ b/code/foundation/src/world/world.c @@ -76,7 +76,7 @@ entity_view *world_build_entity_view(int64_t e) { view.inside_vehicle = ecs_get(world_ecs(), e, IsInVehicle) != 0 ? true : false; Inventory *inv = 0; - if ((inv = ecs_get_mut_if(world_ecs(), e, Inventory))) { + if ((inv = ecs_get_mut_if_ex(world_ecs(), e, Inventory))) { view.has_items = true; for (int i = 0; i < ITEMS_INVENTORY_SIZE; i += 1) { @@ -92,7 +92,7 @@ entity_view *world_build_entity_view(int64_t e) { if (world_entity_valid(in->storage_ent)){ ItemContainer *ic = 0; - if ((ic = ecs_get_mut_if(world_ecs(), in->storage_ent, ItemContainer))){ + if ((ic = ecs_get_mut_if_ex(world_ecs(), in->storage_ent, ItemContainer))){ view.has_storage_items = true; for (int i = 0; i < ITEMS_CONTAINER_SIZE; i += 1) { @@ -640,8 +640,10 @@ bool world_entity_valid(ecs_entity_t e) { return ecs_is_alive(world_ecs(), e); } -void * world_component_cached(ecs_world_t *world, ecs_entity_t entity, ecs_id_t id) { - // return ecs_get_mut_id(world, entity, id); +void * world_component_cached(ecs_world_t *world_ecs, ecs_entity_t entity, ecs_id_t id) { + if (!component_cache.entries || world.ecs_stage == NULL) { + return ecs_get_mut_id(world_ecs, entity, id); + } static char buffer[256] = {0}; zpl_snprintf(buffer, 256, "%llu_%llu", entity, id); @@ -650,7 +652,7 @@ void * world_component_cached(ecs_world_t *world, ecs_entity_t entity, ecs_id_t zpl_uintptr *value = world_component_cache_get(&component_cache, uid); if (!value) { - void *the_value = ecs_get_mut_id(world, entity, id); + void *the_value = ecs_get_mut_id(world_ecs, entity, id); world_component_cache_set(&component_cache, uid, (zpl_uintptr)the_value); value = world_component_cache_get(&component_cache, uid); }