Add soldiers
This commit is contained in:
@@ -419,6 +419,150 @@
|
|||||||
"width":10,
|
"width":10,
|
||||||
"x":276.667,
|
"x":276.667,
|
||||||
"y":284.333
|
"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,
|
"opacity":1,
|
||||||
"type":"objectgroup",
|
"type":"objectgroup",
|
||||||
@@ -438,7 +582,7 @@
|
|||||||
"y":0
|
"y":0
|
||||||
}],
|
}],
|
||||||
"nextlayerid":10,
|
"nextlayerid":10,
|
||||||
"nextobjectid":10,
|
"nextobjectid":22,
|
||||||
"orientation":"orthogonal",
|
"orientation":"orthogonal",
|
||||||
"renderorder":"right-down",
|
"renderorder":"right-down",
|
||||||
"tiledversion":"1.10.2",
|
"tiledversion":"1.10.2",
|
||||||
|
|||||||
@@ -8,9 +8,15 @@ ecs_entity_t entityCreateEmpty() {
|
|||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
ecs_entity_t entityCreateWorker(const Position position, Game *game) {
|
ecs_entity_t entityCreateBaseUnit(const Position position, Player player,
|
||||||
const Size size = {10.0f, 10.0f};
|
EntityType type, AnimType startAnim, Game *game) {
|
||||||
BzTileset *tileset = &game->tileset;
|
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_entity_t e = entityCreateEmpty();
|
||||||
ecs_set_ptr(ECS, e, Position, &position);
|
ecs_set_ptr(ECS, e, Position, &position);
|
||||||
ecs_set_ptr(ECS, e, Size, &size);
|
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, Orientation, {0.0f});
|
||||||
ecs_set(ECS, e, Velocity, {});
|
ecs_set(ECS, e, Velocity, {});
|
||||||
ecs_set(ECS, e, Steering, {});
|
ecs_set(ECS, e, Steering, {});
|
||||||
TextureRegion workerRegion = {
|
ecs_set(ECS, e, Owner, {player});
|
||||||
tileset->tiles,
|
|
||||||
bzTilesetGetTileRegion(tileset, ENTITY_WORKER)
|
|
||||||
};
|
|
||||||
ecs_set_ptr(ECS, e, TextureRegion, &workerRegion);
|
|
||||||
ecs_set(ECS, e, Animation, {
|
|
||||||
.entityType = ENTITY_WORKER,
|
|
||||||
.animType = ANIM_IDLE,
|
|
||||||
|
|
||||||
.sequence = entityGetAnimationSequence(ENTITY_WORKER, ANIM_IDLE),
|
|
||||||
|
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,
|
.tileset = tileset,
|
||||||
.curFrame = 0,
|
.curFrame = 0,
|
||||||
.elapsed = 0.0f,
|
.elapsed = 0.0f,
|
||||||
});
|
});
|
||||||
|
}
|
||||||
ecs_set(ECS, e, BzBTState, {
|
ecs_set(ECS, e, BzBTState, {
|
||||||
.root = NULL,
|
.root = NULL,
|
||||||
.nodeStatePool = game->pools.btNodeState
|
.nodeStatePool = game->pools.btNodeState
|
||||||
@@ -46,8 +53,20 @@ ecs_entity_t entityCreateWorker(const Position position, Game *game) {
|
|||||||
.acceleration = 80.0f,
|
.acceleration = 80.0f,
|
||||||
.maxSpeed = 15.0f,
|
.maxSpeed = 15.0f,
|
||||||
.deceleration = 0.1f,
|
.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, {
|
ecs_set(ECS, e, Worker, {
|
||||||
.collectSpeed = 0.8f,
|
.collectSpeed = 0.8f,
|
||||||
.depositSpeed = 0.2f,
|
.depositSpeed = 0.2f,
|
||||||
@@ -58,7 +77,6 @@ ecs_entity_t entityCreateWorker(const Position position, Game *game) {
|
|||||||
Arms arms = {.primary = right};
|
Arms arms = {.primary = right};
|
||||||
ecs_set_ptr(ECS, e, Arms, &arms);
|
ecs_set_ptr(ECS, e, Arms, &arms);
|
||||||
ecs_set(ECS, right, Arm, {.offset = 45.0f, 4.5f});
|
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, Size, {8, 8});
|
||||||
ecs_set(ECS, right, Rotation, { 0.0f });
|
ecs_set(ECS, right, Rotation, { 0.0f });
|
||||||
|
|||||||
@@ -6,6 +6,9 @@
|
|||||||
|
|
||||||
ecs_entity_t entityCreateEmpty();
|
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
|
#endif //PIXELDEFENSE_ENTITY_FACTORY_H
|
||||||
|
|||||||
@@ -482,6 +482,89 @@ typedef enum AnimType {
|
|||||||
ANIM_NONE = -1,
|
ANIM_NONE = -1,
|
||||||
} AnimType;
|
} 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) {
|
static BzTileID getEntityTile(EntityType type) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case ENTITY_WORKER: return 27;
|
case ENTITY_WORKER: return 27;
|
||||||
@@ -813,6 +896,7 @@ static Rectangle getTextureRect(BzTileID tile) {
|
|||||||
case 2596:
|
case 2596:
|
||||||
base.width *= 1;
|
base.width *= 1;
|
||||||
base.height *= 2;
|
base.height *= 2;
|
||||||
|
base.y -= 16;
|
||||||
break;
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,20 +31,31 @@ bool initEntityObjectsLayer(BzTileMap *map, BzTileObjectGroup *objectGroup) {
|
|||||||
//if (i == 1) break;
|
//if (i == 1) break;
|
||||||
BzTileObject object = objectGroup->objects[i];
|
BzTileObject object = objectGroup->objects[i];
|
||||||
Position pos = (Position) { object.shape.x, object.shape.y };
|
Position pos = (Position) { object.shape.x, object.shape.y };
|
||||||
entityCreateWorker(pos, game);
|
BzTileID gid = bzTilesetGetTileID(objectTileset, object.gid);
|
||||||
/*ecs_set(ECS, e, Animation, {
|
BzTileID baseGid = getTileBase(gid);
|
||||||
.entityType=ENTITY_WORKER,
|
Player player = PLAYER_RED;
|
||||||
.tileset = objectTileset,
|
if (baseGid != gid)
|
||||||
.curFrame=0,
|
player = PLAYER_BLUE;
|
||||||
.frameDuration=0.6f + (i % 10) * 0.05f,
|
EntityType entity = getTileEntity(baseGid);
|
||||||
.elapsed=i * 0.1f,
|
switch (entity) {
|
||||||
});
|
case ENTITY_GOBLIN:
|
||||||
*/
|
break;
|
||||||
//EntityArms arms = {
|
case ENTITY_MAGE:
|
||||||
// .left=createEntity(ECS),
|
break;
|
||||||
// .right=createEntity(ECS),
|
case ENTITY_ORC:
|
||||||
//};
|
break;
|
||||||
//ecs_set_ptr(ECS, e, EntityArms, &arms);
|
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;
|
return true;
|
||||||
|
|
||||||
|
|||||||
@@ -242,8 +242,8 @@ void drawMainMenuUI(Game *game, f32 dt) {
|
|||||||
if (uiMainMenuButton("Play")) {
|
if (uiMainMenuButton("Play")) {
|
||||||
setScreen(game, SCREEN_GAME);
|
setScreen(game, SCREEN_GAME);
|
||||||
unloadMap(game);
|
unloadMap(game);
|
||||||
//loadMap(game, "assets/maps/tree_test.tmj");
|
loadMap(game, "assets/maps/tree_test.tmj");
|
||||||
loadMap(game, "assets/maps/map_01.tmj");
|
//loadMap(game, "assets/maps/map_01.tmj");
|
||||||
}
|
}
|
||||||
if (uiMainMenuButton("Settings")) {
|
if (uiMainMenuButton("Settings")) {
|
||||||
setScreen(game, SCREEN_SETTINGS);
|
setScreen(game, SCREEN_SETTINGS);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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>
|
<editorsettings>
|
||||||
<export target="../assets/maps/tree_test.tmj" format="json"/>
|
<export target="../assets/maps/tree_test.tmj" format="json"/>
|
||||||
</editorsettings>
|
</editorsettings>
|
||||||
@@ -266,6 +266,18 @@
|
|||||||
<object id="7" name="worker" gid="28" x="275.333" y="160.333" width="10" height="10"/>
|
<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="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="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>
|
||||||
<objectgroup id="9" name="game"/>
|
<objectgroup id="9" name="game"/>
|
||||||
</map>
|
</map>
|
||||||
|
|||||||
@@ -506,6 +506,10 @@ class EnumWriter:
|
|||||||
x, y = k
|
x, y = k
|
||||||
writer.output(f"base.width *= {x};\n")
|
writer.output(f"base.width *= {x};\n")
|
||||||
writer.output(f"base.height *= {y};\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.output("break;\n")
|
||||||
writer.unindent()
|
writer.unindent()
|
||||||
writer.output("default: break;\n")
|
writer.output("default: break;\n")
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ anim_writer = EnumWriter(writer, entity_tiles, "entity", "anim")
|
|||||||
anim_writer.output_enum()
|
anim_writer.output_enum()
|
||||||
anim_writer.output_anim_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_tile("getEntityTile")
|
||||||
anim_writer.output_enum_to_str("getEntityStr")
|
anim_writer.output_enum_to_str("getEntityStr")
|
||||||
anim_writer.output_anim_enum_to_str("getEntityAnimationStr")
|
anim_writer.output_anim_enum_to_str("getEntityAnimationStr")
|
||||||
|
|||||||
Reference in New Issue
Block a user