Add soldiers
This commit is contained in:
@@ -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, ®ion);
|
||||
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 });
|
||||
|
||||
@@ -6,6 +6,9 @@
|
||||
|
||||
ecs_entity_t entityCreateEmpty();
|
||||
|
||||
ecs_entity_t entityCreateWorker(const Position position, Game *game);
|
||||
ecs_entity_t entityCreateBaseUnit(const Position position, Player player,
|
||||
EntityType type, AnimType startAnim, Game *game);
|
||||
ecs_entity_t entityCreateSoldier(const Position position, Player player, Game *game);
|
||||
ecs_entity_t entityCreateWorker(const Position position, Player player, Game *game);
|
||||
|
||||
#endif //PIXELDEFENSE_ENTITY_FACTORY_H
|
||||
|
||||
@@ -482,6 +482,89 @@ typedef enum AnimType {
|
||||
ANIM_NONE = -1,
|
||||
} AnimType;
|
||||
|
||||
static EntityType getTileEntity(BzTileID tile) {
|
||||
switch (tile) {
|
||||
case 27:
|
||||
case 28:
|
||||
case 29:
|
||||
case 30:
|
||||
case 31:
|
||||
case 32:
|
||||
case 33:
|
||||
case 34:
|
||||
case 35:
|
||||
case 36:
|
||||
return ENTITY_WORKER;
|
||||
case 539:
|
||||
case 540:
|
||||
case 541:
|
||||
case 542:
|
||||
case 543:
|
||||
case 544:
|
||||
case 545:
|
||||
case 546:
|
||||
case 547:
|
||||
case 548:
|
||||
return ENTITY_SOLDIER;
|
||||
case 1051:
|
||||
case 1052:
|
||||
case 1053:
|
||||
case 1054:
|
||||
case 1055:
|
||||
case 1056:
|
||||
case 1057:
|
||||
case 1058:
|
||||
case 1059:
|
||||
case 1060:
|
||||
return ENTITY_WARRIOR;
|
||||
case 1563:
|
||||
case 1564:
|
||||
case 1565:
|
||||
case 1566:
|
||||
case 1567:
|
||||
case 1568:
|
||||
case 1569:
|
||||
case 1570:
|
||||
case 1571:
|
||||
case 1572:
|
||||
return ENTITY_MAGE;
|
||||
case 2075:
|
||||
case 2076:
|
||||
case 2077:
|
||||
case 2078:
|
||||
case 2079:
|
||||
case 2080:
|
||||
case 2081:
|
||||
case 2082:
|
||||
case 2083:
|
||||
case 2084:
|
||||
return ENTITY_ORC;
|
||||
case 2587:
|
||||
case 2588:
|
||||
case 2589:
|
||||
case 2590:
|
||||
case 2591:
|
||||
case 2592:
|
||||
case 2593:
|
||||
case 2594:
|
||||
case 2595:
|
||||
case 2596:
|
||||
return ENTITY_GOBLIN;
|
||||
case 7424:
|
||||
return ENTITY_WOOD;
|
||||
case 7425:
|
||||
return ENTITY_STONE;
|
||||
case 7426:
|
||||
return ENTITY_APPLE;
|
||||
case 7427:
|
||||
return ENTITY_GOLD;
|
||||
case 7428:
|
||||
return ENTITY_POP;
|
||||
default:
|
||||
return ENTITY_COUNT;
|
||||
}
|
||||
}
|
||||
|
||||
static BzTileID getEntityTile(EntityType type) {
|
||||
switch (type) {
|
||||
case ENTITY_WORKER: return 27;
|
||||
@@ -813,6 +896,7 @@ static Rectangle getTextureRect(BzTileID tile) {
|
||||
case 2596:
|
||||
base.width *= 1;
|
||||
base.height *= 2;
|
||||
base.y -= 16;
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
@@ -31,20 +31,31 @@ bool initEntityObjectsLayer(BzTileMap *map, BzTileObjectGroup *objectGroup) {
|
||||
//if (i == 1) break;
|
||||
BzTileObject object = objectGroup->objects[i];
|
||||
Position pos = (Position) { object.shape.x, object.shape.y };
|
||||
entityCreateWorker(pos, game);
|
||||
/*ecs_set(ECS, e, Animation, {
|
||||
.entityType=ENTITY_WORKER,
|
||||
.tileset = objectTileset,
|
||||
.curFrame=0,
|
||||
.frameDuration=0.6f + (i % 10) * 0.05f,
|
||||
.elapsed=i * 0.1f,
|
||||
});
|
||||
*/
|
||||
//EntityArms arms = {
|
||||
// .left=createEntity(ECS),
|
||||
// .right=createEntity(ECS),
|
||||
//};
|
||||
//ecs_set_ptr(ECS, e, EntityArms, &arms);
|
||||
BzTileID gid = bzTilesetGetTileID(objectTileset, object.gid);
|
||||
BzTileID baseGid = getTileBase(gid);
|
||||
Player player = PLAYER_RED;
|
||||
if (baseGid != gid)
|
||||
player = PLAYER_BLUE;
|
||||
EntityType entity = getTileEntity(baseGid);
|
||||
switch (entity) {
|
||||
case ENTITY_GOBLIN:
|
||||
break;
|
||||
case ENTITY_MAGE:
|
||||
break;
|
||||
case ENTITY_ORC:
|
||||
break;
|
||||
case ENTITY_SOLDIER:
|
||||
entityCreateSoldier(pos, player, game);
|
||||
break;
|
||||
case ENTITY_WARRIOR:
|
||||
break;
|
||||
case ENTITY_WORKER:
|
||||
entityCreateWorker(pos, player, game);
|
||||
break;
|
||||
default:
|
||||
BZ_ASSERT(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
|
||||
@@ -242,8 +242,8 @@ void drawMainMenuUI(Game *game, f32 dt) {
|
||||
if (uiMainMenuButton("Play")) {
|
||||
setScreen(game, SCREEN_GAME);
|
||||
unloadMap(game);
|
||||
//loadMap(game, "assets/maps/tree_test.tmj");
|
||||
loadMap(game, "assets/maps/map_01.tmj");
|
||||
loadMap(game, "assets/maps/tree_test.tmj");
|
||||
//loadMap(game, "assets/maps/map_01.tmj");
|
||||
}
|
||||
if (uiMainMenuButton("Settings")) {
|
||||
setScreen(game, SCREEN_SETTINGS);
|
||||
|
||||
Reference in New Issue
Block a user