diff --git a/game/ai_actions.c b/game/ai_actions.c index 3a28d12..aa84de3 100644 --- a/game/ai_actions.c +++ b/game/ai_actions.c @@ -154,7 +154,8 @@ BzBTStatus aiHarvestRes(AIBlackboard *data, f32 dt) { i32 spareCapacity = worker->carryCapacity - worker->carry; BZ_ASSERT(spareCapacity >= 0); i32 collected = harvestEvent(harvestTarget, (HarvestEvent) { - .amount = BZ_MIN(1, spareCapacity) + .amount = BZ_MIN(1, spareCapacity), + .type = worker->carryRes }); worker->carry += collected; @@ -178,7 +179,8 @@ BzBTStatus aiDepositRes(AIBlackboard *data, f32 dt) { } depositEvent(depositTarget, (DepositEvent) { - .amount = worker->carry + .amount = worker->carry, + .type = worker->carryRes }); worker->carry = 0; diff --git a/game/components.c b/game/components.c index 43757bd..9390720 100644 --- a/game/components.c +++ b/game/components.c @@ -108,7 +108,7 @@ void igResource(ecs_world_t *ecs, void igOwner(ecs_world_t *ecs, ecs_entity_t entity, ecs_entity_t comp) { Owner *owner = ecs_get_mut_id(ecs, entity, comp); - igInputInt("PlayerID", &owner->player, 0, 0, 0); + igText("PlayerID: %d", owner->player); } void igSpatialGridID(ecs_world_t *ecs, diff --git a/game/components.h b/game/components.h index 60fbc70..2e7fa97 100644 --- a/game/components.h +++ b/game/components.h @@ -124,9 +124,11 @@ extern ECS_COMPONENT_DECLARE(Easing); * Event components *********************************************************/ typedef struct HarvestEvent { + ResourceType type; i32 amount; } HarvestEvent; typedef struct DepositEvent { + ResourceType type; i32 amount; } DepositEvent; diff --git a/game/systems/s_event.c b/game/systems/s_event.c index 130ecf6..9fa3aa9 100644 --- a/game/systems/s_event.c +++ b/game/systems/s_event.c @@ -22,6 +22,7 @@ i32 harvestEvent(ecs_entity_t entity, HarvestEvent event) { soundsPlay(sounds, SOUND_WOOD_PUNCH); Resource *res = ecs_get_mut(ECS, entity, Resource); + BZ_ASSERT(res->type == event.type); event.amount = BZ_MIN(event.amount, res->amount); res->amount -= event.amount; @@ -32,4 +33,24 @@ i32 harvestEvent(ecs_entity_t entity, HarvestEvent event) { } void depositEvent(ecs_entity_t entity, DepositEvent event) { + BZ_ASSERT(ecs_has(ECS, entity, Storage)); + BZ_ASSERT(ecs_has(ECS, entity, Owner)); + + Owner owner = *ecs_get(ECS, entity, Owner); + Game *game = ecs_singleton_get_mut(ECS, Game); + PlayerResources *res = &game->playerResources[owner.player]; + switch (event.type) { + case RES_WOOD: + res->wood += event.amount; + break; + case RES_GOLD: + res->gold += event.amount; + break; + case RES_FOOD: + res->food += event.amount; + break; + default: + BZ_ASSERT(false); + break; + } }