From e41837001eae9f59e890028b717e15271baabd47 Mon Sep 17 00:00:00 2001 From: Klemen Plestenjak Date: Wed, 7 Feb 2024 12:00:02 +0100 Subject: [PATCH] Fix pop consuming --- game/building_factory.c | 2 +- game/systems/s_entity.c | 19 ++++++++++--------- game/systems/s_ui.c | 1 + game/systems/systems.c | 4 ++-- game/systems/systems.h | 2 -- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/game/building_factory.c b/game/building_factory.c index 7c635e3..99ec63c 100644 --- a/game/building_factory.c +++ b/game/building_factory.c @@ -99,7 +99,7 @@ ecs_entity_t placeBuilding(Game *game, BuildingType type, .slots[0] = { .entityType = ENTITY_WORKER, .numRecruiting = 0, - .recruitTime = 5.0f, + .recruitTime = 4.0f, .elapsed = 0.0f, } }); diff --git a/game/systems/s_entity.c b/game/systems/s_entity.c index 38ec385..ac29748 100644 --- a/game/systems/s_entity.c +++ b/game/systems/s_entity.c @@ -55,40 +55,40 @@ void updateTextureOwnerTile(ecs_iter_t *it) { void buildingAddPopCapacity(ecs_iter_t *it) { Game *game = ecs_singleton_get_mut(ECS, Game); AddPopCapacity *addPop = ecs_field(it, AddPopCapacity, 1); - Owner *owner = ecs_field(it, Owner, 2); for (i32 i = 0; i < it->count; i++) { - PlayerResources *res = &game->playerResources[owner[i].player]; + Player player = ecs_get(ECS, it->entities[i], Owner)->player; + PlayerResources *res = &game->playerResources[player]; res->popCapacity += addPop[i].amount; } } void buildingRemovePopCapacity(ecs_iter_t *it) { Game *game = ecs_singleton_get_mut(ECS, Game); AddPopCapacity *addPop = ecs_field(it, AddPopCapacity, 1); - Owner *owner = ecs_field(it, Owner, 2); for (i32 i = 0; i < it->count; i++) { - PlayerResources *res = &game->playerResources[owner->player]; + Player player = ecs_get(ECS, it->entities[i], Owner)->player; + PlayerResources *res = &game->playerResources[player]; res->popCapacity -= addPop[i].amount; } } void entityConsumePopCapacity(ecs_iter_t *it) { Game *game = ecs_singleton_get_mut(ECS, Game); ConsumePopCapacity *pop = ecs_field(it, ConsumePopCapacity, 1); - Owner *owner = ecs_field(it, Owner, 2); for (i32 i = 0; i < it->count; i++) { - PlayerResources *res = &game->playerResources[owner[i].player]; + Player player = ecs_get(ECS, it->entities[i], Owner)->player; + PlayerResources *res = &game->playerResources[player]; res->pop += pop[i].amount; } } void entityUnConsumePopCapacity(ecs_iter_t *it) { Game *game = ecs_singleton_get_mut(ECS, Game); ConsumePopCapacity *pop = ecs_field(it, ConsumePopCapacity, 1); - Owner *owner = ecs_field(it, Owner, 2); for (i32 i = 0; i < it->count; i++) { - PlayerResources *res = &game->playerResources[owner[i].player]; + Player player = ecs_get(ECS, it->entities[i], Owner)->player; + PlayerResources *res = &game->playerResources[player]; res->pop -= pop[i].amount; } } @@ -260,7 +260,8 @@ void updateBuildingRecruitment(ecs_iter_t *it) { slot->elapsed += dt; if (slot->elapsed >= slot->recruitTime) { slot->elapsed = 0; - bzLogInfo("spawned"); + PlayerResources *playerRes = &game->playerResources[player]; + playerRes->pop--; entityRecruit(slot->entityType, placePos, player, game); slot->numRecruiting--; } diff --git a/game/systems/s_ui.c b/game/systems/s_ui.c index c097eb5..a3cb9bf 100644 --- a/game/systems/s_ui.c +++ b/game/systems/s_ui.c @@ -207,6 +207,7 @@ void drawGameUI(Game *game, f32 dt) { if (selected) { i32 res[RES_COUNT] = {0,}; getEntityCost(slot->entityType, res); + playerRes->pop++; playerRes->food -= res[RES_FOOD]; playerRes->wood -= res[RES_WOOD]; playerRes->gold -= res[RES_GOLD]; diff --git a/game/systems/systems.c b/game/systems/systems.c index 5328873..0ac7eb5 100644 --- a/game/systems/systems.c +++ b/game/systems/systems.c @@ -94,8 +94,8 @@ void setupSystems() { ECS_OBSERVER(ECS, buildingAddPopCapacity, EcsOnSet, AddPopCapacity, Owner); ECS_OBSERVER(ECS, buildingRemovePopCapacity, EcsOnRemove, AddPopCapacity, Owner); - ECS_OBSERVER(ECS, entityConsumePopCapacity, EcsOnSet, ConsumePopCapacity, Owner); - ECS_OBSERVER(ECS, entityUnConsumePopCapacity, EcsOnRemove, ConsumePopCapacity, Owner); + ECS_OBSERVER(ECS, entityConsumePopCapacity, EcsOnSet, ConsumePopCapacity); + ECS_OBSERVER(ECS, entityUnConsumePopCapacity, EcsOnRemove, ConsumePopCapacity); ECS_SYSTEM(ECS, entityUpdateSpatialID, EcsOnUpdate, Position, HitBox, Velocity, SpatialGridID); ECS_SYSTEM(ECS, entityUpdateKinematic, EcsOnUpdate, Position, Velocity, Steering, Unit); diff --git a/game/systems/systems.h b/game/systems/systems.h index 04e67e7..c8e4944 100644 --- a/game/systems/systems.h +++ b/game/systems/systems.h @@ -91,13 +91,11 @@ void buildingRemovePopCapacity(ecs_iter_t *it); /* Observer (for consuming pop capacity) * 0: Game (singleton) * 1: ConsumePopCapacity - * 2: Owner */ void entityConsumePopCapacity(ecs_iter_t *it); /* Observer (for unconsuming pop capacity) * 0: Game (singleton) * 1: ConsumePopCapacity - * 2: Owner */ void entityUnConsumePopCapacity(ecs_iter_t *it);