import json import os.path from extract_common import * writer = ExtractFileWriter("game_tileset") def extract_by_property(tiles, key): extracted = [] for tile in tiles: if 'properties' not in tile: continue props = tile['properties'] props = [True for prop in props if prop['name'] == key] if any(props): extracted.append(tile) return extracted def remove_properties(data, dst_file): data = json.loads(data) new_tiles = [] for tile in data['tiles']: v = {'id': tile['id']} if 'objectgroup' in tile: v['objectgroup'] = tile['objectgroup'] new_tiles.append(v) data['tiles'] = new_tiles del data['wangsets'] with open(dst_file, 'w') as f: # pprint.pprint(data, f) json.dump(data, f, indent=None, separators=(',', ':'), ensure_ascii=True) content = open("../rawAssets/game.tsj").read() all_tiles = json.loads(content)["tiles"] remove_properties(content, "../assets/game.tsj") terrain_tiles = extract_by_property(all_tiles, "terrain") building_tiles = extract_by_property(all_tiles, "building") entity_tiles = extract_by_property(all_tiles, "entity") item_tiles = extract_by_property(all_tiles, "item") ownership_tiles = extract_by_property(all_tiles, "ownership") particle_tiles = extract_by_property(all_tiles, "particle") writer.header_guard_start() script_name = os.path.basename(__file__) writer.output(f"// This file was generated by: {script_name}\n\n") writer.include("") writer.include("") writer.empty_line() writer.output_anim_sequence_struct() writer.output_anim_frame_struct() terrain_writer = EnumWriter(writer, terrain_tiles, "terrain") building_writer = EnumWriter(writer, building_tiles, "building") entity_writer = EnumWriter(writer, entity_tiles, "entity") ownership_writer = EnumWriter(writer, ownership_tiles, "owner") particle_write = EnumWriter(writer, particle_tiles, "particle") ownership_writer.output_enum() ownership_writer.output_tile_to_enum("getOwnerType") particle_write.output_enum() particle_write.output_enum_to_tile("getParticleTypeTile") particle_write.output_tile_to_enum("getParticleType") particle_write.output_enum_to_str("getParticleTypeStr") terrain_writer.output_enum() terrain_writer.output_tile_has_anim("terrainHasAnimation") terrain_writer.output_tile_anim_sequence("terrainGetAnimationSequence") terrain_writer.output_tile_anim_frame("terrainGetAnimationFrame") writer.empty_line() building_writer.output_enum() building_writer.output_tile_to_enum("getTileBuilding") building_writer.output_enum_to_tile("getBuildingTile") building_writer.output_enum_to_str("getBuildingStr") building_writer.output_enum_tile_size("getBuildingSize") writer.empty_line() 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") anim_writer.output_has_anim("entityHasAnimation") anim_writer.output_anim_length("entityGetAnimationLength") anim_writer.output_anim_sequence("entityGetAnimationSequence") anim_writer.output_anim_frame("entityGetAnimationFrame") # print(item_tiles) item_writer = EnumWriter(writer, item_tiles, "item", "item_anim") item_writer.output_enum() # item_writer.output_anim_enum() item_writer.output_enum_to_tile("getItemTile") # item_writer.output_has_handle("itemHasHandle") # item_writer.output_handle("itemGetHandle") tile_writer = EnumWriter(writer, all_tiles, "", "") TILE_WIDTH = 16 TILE_HEIGHT = 16 tile_writer.output_get_text_rect("getTextureRect", 256, TILE_WIDTH, TILE_HEIGHT) tile_writer.output_base_index("getTileBase", "player") tile_writer.output_index_tile_offset("getTileOffset", "player", 256, TILE_WIDTH, TILE_HEIGHT) vec2_transform = ["Vector2", "(Vector2) {0.0f, 0.0f}", lambda x: f"(Vector2) {{{x['x']}, {x['y']}}}"] rec_transform = ["Rectangle", "(Rectangle) { 0.0f, 0.0f, 0.0f, 0.0f}", lambda x: f"(Rectangle) {{{x['x']}, {TILE_HEIGHT - x['y'] - x['height']}, {x['width']}, {x['height']}}}"] tile_writer.output_has_object("hasItemHandlePoint", "handle") tile_writer.output_get_object("getItemHandlePoint", "handle", *vec2_transform) tile_writer.output_has_object("hasEntityHitBoxRec", "hitbox") tile_writer.output_get_object("getEntityHitBoxRec", "hitbox", *rec_transform) writer.header_guard_stop() writer.to_file("../game/game_tileset.h")