Add soldiers

This commit is contained in:
2024-01-23 20:31:23 +01:00
parent 777ebeadc4
commit 07d1852fb9
9 changed files with 313 additions and 36 deletions

View File

@@ -8,9 +8,15 @@ ecs_entity_t entityCreateEmpty() {
return e;
}
ecs_entity_t entityCreateWorker(const Position position, Game *game) {
const Size size = {10.0f, 10.0f};
ecs_entity_t entityCreateBaseUnit(const Position position, Player player,
EntityType type, AnimType startAnim, Game *game) {
BzTileset *tileset = &game->tileset;
TextureRegion region = {
tileset->tiles,
getTextureRect(getEntityTile(type))
};
const Size size = {10.0f * region.rec.width / 16.0f, 10.0f * region.rec.height / 16.0f};
bzLogInfo("%.2f %.2f", size.x, size.y);
ecs_entity_t e = entityCreateEmpty();
ecs_set_ptr(ECS, e, Position, &position);
ecs_set_ptr(ECS, e, Size, &size);
@@ -22,20 +28,21 @@ ecs_entity_t entityCreateWorker(const Position position, Game *game) {
ecs_set(ECS, e, Orientation, {0.0f});
ecs_set(ECS, e, Velocity, {});
ecs_set(ECS, e, Steering, {});
TextureRegion workerRegion = {
tileset->tiles,
bzTilesetGetTileRegion(tileset, ENTITY_WORKER)
};
ecs_set_ptr(ECS, e, TextureRegion, &workerRegion);
ecs_set(ECS, e, Animation, {
.entityType = ENTITY_WORKER,
.animType = ANIM_IDLE,
ecs_set(ECS, e, Owner, {player});
.sequence = entityGetAnimationSequence(ENTITY_WORKER, ANIM_IDLE),
.tileset = tileset,
.curFrame = 0,
.elapsed = 0.0f,
});
ecs_set_ptr(ECS, e, TextureRegion, &region);
if (startAnim != ANIM_NONE) {
ecs_set(ECS, e, Animation, {
.entityType = type,
.animType = startAnim,
.sequence = entityGetAnimationSequence(type, startAnim),
.tileset = tileset,
.curFrame = 0,
.elapsed = 0.0f,
});
}
ecs_set(ECS, e, BzBTState, {
.root = NULL,
.nodeStatePool = game->pools.btNodeState
@@ -46,8 +53,20 @@ ecs_entity_t entityCreateWorker(const Position position, Game *game) {
.acceleration = 80.0f,
.maxSpeed = 15.0f,
.deceleration = 0.1f,
.unitType = ENTITY_WORKER
.unitType = type
});
return e;
}
ecs_entity_t entityCreateSoldier(const Position position, Player player, Game *game) {
ecs_entity_t e = entityCreateBaseUnit(position, player, ENTITY_SOLDIER, ANIM_IDLE, game);
return e;
}
ecs_entity_t entityCreateWorker(const Position position, Player player, Game *game) {
BzTileset *tileset = &game->tileset;
ecs_entity_t e = entityCreateBaseUnit(position, player, ENTITY_WORKER, ANIM_IDLE, game);
ecs_set(ECS, e, Worker, {
.collectSpeed = 0.8f,
.depositSpeed = 0.2f,
@@ -58,7 +77,6 @@ ecs_entity_t entityCreateWorker(const Position position, Game *game) {
Arms arms = {.primary = right};
ecs_set_ptr(ECS, e, Arms, &arms);
ecs_set(ECS, right, Arm, {.offset = 45.0f, 4.5f});
ecs_set(ECS, e, Owner, {PLAYER_RED});
ecs_set(ECS, right, Size, {8, 8});
ecs_set(ECS, right, Rotation, { 0.0f });