diff --git a/scripts/extract_tileset_classes.py b/scripts/extract_tileset_classes.py index e899144..392b824 100755 --- a/scripts/extract_tileset_classes.py +++ b/scripts/extract_tileset_classes.py @@ -23,7 +23,8 @@ for tile in tiles: type = tile["type"] types[type].append(id) -enum_name = os.path.basename(path).split(".")[0].capitalize() +enum_identifier = os.path.basename(path).split(".")[0].capitalize() +enum_name = enum_identifier.upper() indent_level = 0 indent_offset = 4 @@ -40,15 +41,22 @@ def enum_string(name): script_name = os.path.basename(__file__) print(f"// This file was generated by: {script_name}") print() +print("#include ") +print("#include ") +print() +print() # ============================ -print(f"{indent()}typedef struct {enum_name} {{") +enum_none = enum_string("none") +enum_count = enum_string("count") + +print(f"{indent()}typedef enum {enum_name} {{") indent_level += indent_offset -print(f"{indent()}{enum_string('name')}") +print(f"{indent()}{enum_none},") for enum in types: print(f"{indent()}{enum_string(enum)},") -print(f"{indent()}{enum_name}_COUNT") +print(f"{indent()}{enum_count}") indent_level -= indent_offset print(f"{indent()}}} {enum_name};") @@ -59,7 +67,7 @@ print() print(f"{indent()}static bool getTileBuilding(BzTile tile) {{") indent_level += indent_offset -print(f"{indent()}switch (type) {{") +print(f"{indent()}switch (tile) {{") for enum, ids in types.items(): indent_level += indent_offset for id in ids: @@ -88,8 +96,9 @@ print() print(f"{indent()}static {enum_name} getBuildingFromStr(const char *str) {{") indent_level += indent_offset +# trie would be much better for type in types: - print(f"{indent()}if (strncmp(\"{type}\", str, {len(type)}) return {enum_string(type)};") + print(f"{indent()}if (strncmp(\"{type}\", str, {len(type)})) return {enum_string(type)};") print(f"{indent()}else return {enum_string('none')};") indent_level -= indent_offset