#include "components.h" #include "unit_ai.h" #include "unit_actions.h" ECS_TAG_DECLARE(GameEntity); ECS_COMPONENT_DECLARE(Resource); ECS_COMPONENT_DECLARE(TilePosition); ECS_COMPONENT_DECLARE(TileSize); ECS_COMPONENT_DECLARE(Owner); ECS_COMPONENT_DECLARE(SpatialGridID); ECS_COMPONENT_DECLARE(Position); ECS_COMPONENT_DECLARE(Size); ECS_COMPONENT_DECLARE(Velocity); ECS_COMPONENT_DECLARE(Rotation); ECS_COMPONENT_DECLARE(Orientation); ECS_COMPONENT_DECLARE(Steering); ECS_COMPONENT_DECLARE(TargetPosition); ECS_COMPONENT_DECLARE(Path); ECS_COMPONENT_DECLARE(TextureRegion); ECS_COMPONENT_DECLARE(Animation); ECS_COMPONENT_DECLARE(Easing); ECS_COMPONENT_DECLARE(Arms); ECS_COMPONENT_DECLARE(Arm); ECS_COMPONENT_DECLARE(UnitAI); ECS_COMPONENT_DECLARE(UnitAction); ECS_TAG_DECLARE(Selectable); ECS_TAG_DECLARE(Selected); ECS_COMPONENT_DECLARE(Worker); ECS_COMPONENT_DECLARE(Unit); ECS_TAG_DECLARE(Storage); ECS_TAG_DECLARE(Harvestable); ECS_TAG_DECLARE(Buildable); ECS_TAG_DECLARE(Workable); ECS_TAG_DECLARE(Attackable); void initComponentIDs(ecs_world_t *ecs) { ECS_TAG_DEFINE(ecs, GameEntity); ECS_COMPONENT_DEFINE(ecs, Resource); ECS_COMPONENT_DEFINE(ecs, TilePosition); ECS_COMPONENT_DEFINE(ecs, TileSize); ECS_COMPONENT_DEFINE(ecs, Owner); ECS_COMPONENT_DEFINE(ecs, SpatialGridID); ECS_COMPONENT_DEFINE(ecs, Position); ECS_COMPONENT_DEFINE(ecs, Size); ECS_COMPONENT_DEFINE(ecs, Velocity); ECS_COMPONENT_DEFINE(ecs, Rotation); ECS_COMPONENT_DEFINE(ecs, Orientation); ECS_COMPONENT_DEFINE(ecs, Steering); ECS_COMPONENT_DEFINE(ecs, TargetPosition); ECS_COMPONENT_DEFINE(ecs, Path); ECS_COMPONENT_DEFINE(ecs, TextureRegion); ECS_COMPONENT_DEFINE(ecs, Animation); ECS_COMPONENT_DEFINE(ecs, Easing); ECS_COMPONENT_DEFINE(ecs, Arms); ECS_COMPONENT_DEFINE(ecs, Arm); ECS_COMPONENT_DEFINE(ecs, UnitAI); ECS_COMPONENT_DEFINE(ecs, UnitAction); ECS_TAG_DEFINE(ecs, Selectable); ECS_TAG_DEFINE(ecs, Selected); ECS_COMPONENT_DEFINE(ecs, Worker); ECS_COMPONENT_DEFINE(ecs, Unit); ECS_TAG_DEFINE(ecs, Storage); ECS_TAG_DEFINE(ecs, Harvestable); ECS_TAG_DEFINE(ecs, Buildable); ECS_TAG_DEFINE(ecs, Workable); ECS_TAG_DEFINE(ecs, Attackable); } #include void igTagCheckbox(const char *label, ecs_world_t *ecs, ecs_entity_t entity, ecs_entity_t tag) { bool hasTag = ecs_has_id(ecs, entity, tag); igCheckbox(label, &hasTag); if (hasTag) ecs_add_id(ecs, entity, tag); else ecs_remove_id(ecs, entity, tag); } void igResource(const char *label, ecs_world_t *ecs, ecs_entity_t entity, ecs_entity_t comp) { if (!ecs_has_id(ecs, entity, comp)) return; igSeparatorText(label); Resource *res = ecs_get_mut_id(ecs, entity, comp); const char *resStrings[RES_COUNT]; for (i32 i = 0; i < RES_COUNT; i++) { resStrings[i] = getResourceTypePrettyName(i); } int curType = res->type; igCombo_Str_arr("Type", &curType, resStrings, RES_COUNT, -1); res->type = curType; igInputInt("Amount", &res->amount, 1, 10, 0); } void igVec2(const char *label, ecs_world_t *ecs, ecs_entity_t entity, ecs_entity_t comp) { if (!ecs_has_id(ecs, entity, comp)) return; igSeparatorText(label); Vector2 *vec = ecs_get_mut_id(ecs, entity, comp); igPushID_Str(label); igInputFloat("X", &vec->x, 1.0f, 10.0f, "%.2f", 0); igInputFloat("Y", &vec->y, 1.0f, 10.0f, "%.2f", 0); igPopID(); }