Add entity_factory

This commit is contained in:
2024-01-04 16:40:39 +01:00
parent c83f0fb666
commit cc6b1c1a35
7 changed files with 81 additions and 48 deletions

View File

@@ -3,6 +3,7 @@
#include <flecs.h>
#include "components.h"
#include "entity_factory.h"
#include "game_state.h"
#include "map_layers.h"
@@ -31,9 +32,8 @@ bool initEntityObjectsLayer(BzTileMap *map, BzTileObjectGroup *objectGroup) {
for (i32 i = 0; i < objectGroup->objectCount; i++) {
if (i == 1) break;
BzTileObject object = objectGroup->objects[i];
ecs_entity_t e = createWorker((Position) {object.shape.x, object.shape.y},
(Size) {object.shape.sizeX, object.shape.sizeY},
game->entityGrid, objectTileset, object.gid);
Position pos = (Position) { object.shape.x, object.shape.y };
entityCreateWorker(pos, game);
/*ecs_set(ECS, e, Animation, {
.entityType=ENTITY_WORKER,
.tileset = objectTileset,
@@ -76,7 +76,7 @@ bool initBuildingsLayer(BzTileMap *map, BzTileLayer *layer) {
const i32 tileWidth = map->tileWidth;
const i32 tileHeight = map->tileHeight;
ecs_entity_t e = entityCreate(ECS);
ecs_entity_t e = entityCreateEmpty();
Size size = {.x = tileSize.sizeX * tileWidth, .y = tileSize.sizeY * tileHeight };
ecs_set_ptr(ECS, e, Size, &size);
ecs_set(ECS, e, Position, {
@@ -117,7 +117,7 @@ bool initTreesLayer(BzTileMap *map, BzTileLayer *layer) {
f32 sizeY = tileset->tileHeight;
f32 posX = layer->offsetX + x * sizeX;
f32 posY = layer->offsetY + y * sizeY;
ecs_entity_t e = entityCreate(ECS);
ecs_entity_t e = entityCreateEmpty();
SpatialGridID gridID = bzSpatialGridInsert(game->entityGrid, &e, posX, posY, sizeX, sizeY);
ecs_set(ECS, e, SpatialGridID, {gridID});
posX += sizeX * 0.5f;
@@ -135,35 +135,3 @@ bool initTreesLayer(BzTileMap *map, BzTileLayer *layer) {
}
return true;
}
ecs_entity_t createWorker(Position position, Size size, BzSpatialGrid *grid, BzTileset *tileset, BzTile gid) {
ecs_entity_t e = entityCreate(ECS);
ecs_set_ptr(ECS, e, Position, &position);
ecs_set_ptr(ECS, e, Size, &size);
BzSpatialGridID spatialID = bzSpatialGridInsert(grid, &e,
position.x, position.y,
size.x, size.y);
ecs_set(ECS, e, SpatialGridID, {spatialID});
ecs_set(ECS, e, Rotation, {0.0f});
ecs_set(ECS, e, Velocity, {});
ecs_set(ECS, e, Steering, {});
ecs_set(ECS, e, TextureRegion, {tileset->tiles, bzTilesetGetTileRegion(tileset, gid)});
ecs_set(ECS, e, Animation, {
.entityType = ENTITY_WORKER,
.animType = ANIM_IDLE,
.sequence = entityGetAnimationSequence(ENTITY_WORKER, ANIM_IDLE),
.tileset = tileset,
.curFrame = 0,
.elapsed = 0.0f,
});
ecs_set(ECS, e, UnitAction, {NULL, NULL});
ecs_add_id(ECS, e, Selectable);
ecs_add_id(ECS, e, Unit);
ecs_set(ECS, e, Worker, {
.collectSpeed = 0.8f,
.depositSpeed = 0.2f,
.carryCapacity = 5,
});
return e;
}