Add soldiers
This commit is contained in:
@@ -419,6 +419,150 @@
|
||||
"width":10,
|
||||
"x":276.667,
|
||||
"y":284.333
|
||||
},
|
||||
{
|
||||
"gid":540,
|
||||
"height":10,
|
||||
"id":10,
|
||||
"name":"soldier",
|
||||
"rotation":0,
|
||||
"type":"",
|
||||
"visible":true,
|
||||
"width":10,
|
||||
"x":353.333333333333,
|
||||
"y":235.666666666667
|
||||
},
|
||||
{
|
||||
"gid":540,
|
||||
"height":10,
|
||||
"id":11,
|
||||
"name":"soldier",
|
||||
"rotation":0,
|
||||
"type":"",
|
||||
"visible":true,
|
||||
"width":10,
|
||||
"x":367.666666666667,
|
||||
"y":236.393939393939
|
||||
},
|
||||
{
|
||||
"gid":540,
|
||||
"height":10,
|
||||
"id":12,
|
||||
"name":"soldier",
|
||||
"rotation":0,
|
||||
"type":"",
|
||||
"visible":true,
|
||||
"width":10,
|
||||
"x":367.909090909091,
|
||||
"y":221
|
||||
},
|
||||
{
|
||||
"gid":540,
|
||||
"height":10,
|
||||
"id":13,
|
||||
"name":"soldier",
|
||||
"rotation":0,
|
||||
"type":"",
|
||||
"visible":true,
|
||||
"width":10,
|
||||
"x":354.636363636364,
|
||||
"y":216.818181818182
|
||||
},
|
||||
{
|
||||
"gid":540,
|
||||
"height":10,
|
||||
"id":14,
|
||||
"name":"soldier",
|
||||
"rotation":0,
|
||||
"type":"",
|
||||
"visible":true,
|
||||
"width":10,
|
||||
"x":354.090909090909,
|
||||
"y":201.727272727273
|
||||
},
|
||||
{
|
||||
"gid":540,
|
||||
"height":10,
|
||||
"id":15,
|
||||
"name":"soldier",
|
||||
"rotation":0,
|
||||
"type":"",
|
||||
"visible":true,
|
||||
"width":10,
|
||||
"x":365.727272727273,
|
||||
"y":205.181818181818
|
||||
},
|
||||
{
|
||||
"gid":540,
|
||||
"height":10,
|
||||
"id":16,
|
||||
"name":"soldier",
|
||||
"rotation":0,
|
||||
"type":"",
|
||||
"visible":true,
|
||||
"width":10,
|
||||
"x":365.727272727273,
|
||||
"y":190.636363636364
|
||||
},
|
||||
{
|
||||
"gid":540,
|
||||
"height":10,
|
||||
"id":17,
|
||||
"name":"soldier",
|
||||
"rotation":0,
|
||||
"type":"",
|
||||
"visible":true,
|
||||
"width":10,
|
||||
"x":353.727272727273,
|
||||
"y":188.090909090909
|
||||
},
|
||||
{
|
||||
"gid":540,
|
||||
"height":10,
|
||||
"id":18,
|
||||
"name":"soldier",
|
||||
"rotation":0,
|
||||
"type":"",
|
||||
"visible":true,
|
||||
"width":10,
|
||||
"x":352.818181818182,
|
||||
"y":173.909090909091
|
||||
},
|
||||
{
|
||||
"gid":540,
|
||||
"height":10,
|
||||
"id":19,
|
||||
"name":"soldier",
|
||||
"rotation":0,
|
||||
"type":"",
|
||||
"visible":true,
|
||||
"width":10,
|
||||
"x":364.454545454545,
|
||||
"y":175.545454545455
|
||||
},
|
||||
{
|
||||
"gid":550,
|
||||
"height":10,
|
||||
"id":20,
|
||||
"name":"soldier",
|
||||
"rotation":0,
|
||||
"type":"",
|
||||
"visible":true,
|
||||
"width":10,
|
||||
"x":47.5,
|
||||
"y":179.25
|
||||
},
|
||||
{
|
||||
"gid":550,
|
||||
"height":10,
|
||||
"id":21,
|
||||
"name":"soldier",
|
||||
"rotation":0,
|
||||
"type":"",
|
||||
"visible":true,
|
||||
"width":10,
|
||||
"x":46.5,
|
||||
"y":167.5
|
||||
}],
|
||||
"opacity":1,
|
||||
"type":"objectgroup",
|
||||
@@ -438,7 +582,7 @@
|
||||
"y":0
|
||||
}],
|
||||
"nextlayerid":10,
|
||||
"nextobjectid":10,
|
||||
"nextobjectid":22,
|
||||
"orientation":"orthogonal",
|
||||
"renderorder":"right-down",
|
||||
"tiledversion":"1.10.2",
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<map version="1.10" tiledversion="1.10.2" orientation="orthogonal" renderorder="right-down" width="32" height="32" tilewidth="16" tileheight="16" infinite="0" nextlayerid="10" nextobjectid="10">
|
||||
<map version="1.10" tiledversion="1.10.2" orientation="orthogonal" renderorder="right-down" width="32" height="32" tilewidth="16" tileheight="16" infinite="0" nextlayerid="10" nextobjectid="22">
|
||||
<editorsettings>
|
||||
<export target="../assets/maps/tree_test.tmj" format="json"/>
|
||||
</editorsettings>
|
||||
@@ -266,6 +266,18 @@
|
||||
<object id="7" name="worker" gid="28" x="275.333" y="160.333" width="10" height="10"/>
|
||||
<object id="8" name="worker" gid="28" x="276" y="222.333" width="10" height="10"/>
|
||||
<object id="9" name="worker" gid="28" x="276.667" y="284.333" width="10" height="10"/>
|
||||
<object id="10" name="soldier" gid="540" x="353.333" y="235.667" width="10" height="10"/>
|
||||
<object id="11" name="soldier" gid="540" x="367.667" y="236.394" width="10" height="10"/>
|
||||
<object id="12" name="soldier" gid="540" x="367.909" y="221" width="10" height="10"/>
|
||||
<object id="13" name="soldier" gid="540" x="354.636" y="216.818" width="10" height="10"/>
|
||||
<object id="14" name="soldier" gid="540" x="354.091" y="201.727" width="10" height="10"/>
|
||||
<object id="15" name="soldier" gid="540" x="365.727" y="205.182" width="10" height="10"/>
|
||||
<object id="16" name="soldier" gid="540" x="365.727" y="190.636" width="10" height="10"/>
|
||||
<object id="17" name="soldier" gid="540" x="353.727" y="188.091" width="10" height="10"/>
|
||||
<object id="18" name="soldier" gid="540" x="352.818" y="173.909" width="10" height="10"/>
|
||||
<object id="19" name="soldier" gid="540" x="364.455" y="175.545" width="10" height="10"/>
|
||||
<object id="20" name="soldier" gid="550" x="47.5" y="179.25" width="10" height="10"/>
|
||||
<object id="21" name="soldier" gid="550" x="46.5" y="167.5" width="10" height="10"/>
|
||||
</objectgroup>
|
||||
<objectgroup id="9" name="game"/>
|
||||
</map>
|
||||
|
||||
@@ -506,6 +506,10 @@ class EnumWriter:
|
||||
x, y = k
|
||||
writer.output(f"base.width *= {x};\n")
|
||||
writer.output(f"base.height *= {y};\n")
|
||||
if x > 1:
|
||||
writer.output(f"base.x -= {(x - 1) * tile_width};\n")
|
||||
if y > 1:
|
||||
writer.output(f"base.y -= {(y - 1) * tile_height};\n")
|
||||
writer.output("break;\n")
|
||||
writer.unindent()
|
||||
writer.output("default: break;\n")
|
||||
|
||||
@@ -78,6 +78,7 @@ anim_writer = EnumWriter(writer, entity_tiles, "entity", "anim")
|
||||
anim_writer.output_enum()
|
||||
anim_writer.output_anim_enum()
|
||||
|
||||
anim_writer.output_tile_to_enum("getTileEntity")
|
||||
anim_writer.output_enum_to_tile("getEntityTile")
|
||||
anim_writer.output_enum_to_str("getEntityStr")
|
||||
anim_writer.output_anim_enum_to_str("getEntityAnimationStr")
|
||||
|
||||
Reference in New Issue
Block a user