#pragma once #include #include "flecs.h" #include "Tick.hpp" #include "Inventory.hpp" struct ResourceInfo { uint16_t ResourceID; }; struct ResourceHealth { uint16_t MaxHealth{}; uint16_t Health{}; uint16_t RenewalTicks{}; uint16_t Renewal{}; }; struct ResourceTick : public TickAccumulator {}; struct Renewing {}; inline void Flecs_Resource(flecs::world& world) { world.component() .member("ResourceID"); world.component() .member("MaxHealth") .member("Health") .member("RenewalTicks") .member("Renewal"); world.component() .is_a(); world.component() .add(); world.system() .without() .with() .each([](ResourceInfo info, ResourceTick tick, WorldInventory& worldInventory) { if (tick.Finished()) worldInventory.AddItems(info.ResourceID, 1); }); } inline void Resource_Ore_Helper(const flecs::entity& entity, uint16_t resourceID, uint16_t gatherTicks) { ResourceInfo info{}; info.ResourceID = resourceID; ResourceTick tick{}; tick.MaxTick = gatherTicks; entity.add(info); entity.add(tick); }