Add get item handle point

This commit is contained in:
2024-01-23 16:41:24 +01:00
parent 811f22f7bc
commit f3acb1a0a3
3 changed files with 107 additions and 0 deletions

View File

@@ -1565,4 +1565,53 @@ static Vector2 getTileOffset(BzTileID tile, i32 idx) {
}
}
static bool hasItemHandlePoint(BzTile tile) {
switch (tile) {
case 7680:
case 7681:
case 7682:
case 7936:
case 7937:
case 7938:
case 7939:
case 7942:
case 7943:
case 8192:
case 8193:
case 8194:
case 8195:
case 8196:
case 8197:
case 8198:
case 8199:
case 8200:
case 8201:
return true;
default: return false;
}
}
static Vector2 getItemHandlePoint(BzTile tile) {
switch (tile) {
case 7680: return (Vector2) {5, 11};
case 7681: return (Vector2) {4, 11};
case 7682: return (Vector2) {4, 12};
case 7936: return (Vector2) {8, 8};
case 7937: return (Vector2) {8, 8};
case 7938: return (Vector2) {8, 8};
case 7939: return (Vector2) {10, 6};
case 7942: return (Vector2) {7, 7.5};
case 7943: return (Vector2) {7, 9};
case 8192: return (Vector2) {4, 12};
case 8193: return (Vector2) {6, 10};
case 8194: return (Vector2) {3, 13};
case 8195: return (Vector2) {5, 11};
case 8196: return (Vector2) {6, 10};
case 8197: return (Vector2) {6, 10};
case 8198: return (Vector2) {5, 11};
case 8199: return (Vector2) {5, 11};
case 8200: return (Vector2) {4, 12};
case 8201: return (Vector2) {4, 12};
default: return (Vector2) {0, 0};
}
}
#endif // GAME_TILESET_H

View File

@@ -582,3 +582,58 @@ class EnumWriter:
writer.block_end()
writer.empty_line()
def output_has_object(self, func_name, name):
writer = self.writer
tiles = {}
for tile in self.all_tiles:
if 'objectgroup' not in tile:
continue
objects = tile['objectgroup']['objects']
for object in objects:
if object['name'] == name:
tiles[tile['id']] = object
break
writer.output(f"static bool {func_name}(BzTile tile) ")
writer.block_start()
writer.output("switch (tile) ")
writer.block_start()
for k, v in tiles.items():
writer.output(f"case {k}:\n")
writer.indent()
writer.output("return true;\n")
writer.unindent()
writer.output(f"default: return false;\n")
writer.block_end()
writer.block_end()
def output_get_object(self, func_name, name, ret_type, default_ret, transform):
writer = self.writer
tiles = {}
for tile in self.all_tiles:
if 'objectgroup' not in tile:
continue
objects = tile['objectgroup']['objects']
for object in objects:
if object['name'] == name:
tiles[tile['id']] = object
break
writer.output(f"static {ret_type} {func_name}(BzTile tile) ")
writer.block_start()
writer.output("switch (tile) ")
writer.block_start()
for k, v in tiles.items():
ret = transform(v)
writer.output(f"case {k}: return {ret};\n")
writer.output(f"default: return {default_ret};\n")
writer.block_end()
writer.block_end()

View File

@@ -94,6 +94,9 @@ tile_writer.output_get_text_rect("getTextureRect", 256, 16, 16)
tile_writer.output_base_index("getTileBase", "player")
tile_writer.output_index_tile_offset("getTileOffset", "player", 256, 16, 16)
tile_writer.output_has_object("hasItemHandlePoint", "handle")
tile_writer.output_get_object("getItemHandlePoint", "handle", "Vector2", "(Vector2) {0, 0}", lambda x: f"(Vector2) {{{x['x']}, {x['y']}}}")
writer.header_guard_stop()