Add get item handle point
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user