From 3fdd24d95143065d92c298bceb920ef6de04f26c Mon Sep 17 00:00:00 2001 From: Klemen Plestenjak Date: Fri, 10 Nov 2023 05:39:38 +0100 Subject: [PATCH] Add size detection --- scripts/extract_tileset_classes.py | 41 +++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/scripts/extract_tileset_classes.py b/scripts/extract_tileset_classes.py index 392b824..536db41 100755 --- a/scripts/extract_tileset_classes.py +++ b/scripts/extract_tileset_classes.py @@ -98,10 +98,49 @@ 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)}) == 0) return {enum_string(type)};") print(f"{indent()}else return {enum_string('none')};") indent_level -= indent_offset print(f"{indent()}}}") +# ============================ + +print(f"{indent()}static void getBuildingSize({enum_name} type, BzTile *outWidth, BzTile *outHeight) {{") +indent_level += indent_offset +print(f"{indent()} switch (type) {{") +indent_level += indent_offset +for enum, ids in types.items(): + print(f"{indent()}case {enum_string(enum)}:") + indent_level += indent_offset + w = 1 + h = 1 + for curr, next in zip(ids, ids[1:]): + if next > curr + 1: + h += 1 + elif h == 1: + w += 1 + print(f"{indent()}if (outWidth) *outWidth = {w};") + print(f"{indent()}if (outHeight) *outHeight = {h};") + print(f"{indent()}break;") + indent_level -= indent_offset + +print(f"{indent()}default:") +indent_level += indent_offset +print(f"{indent()}if (outWidth) *outWidth = 0;") +print(f"{indent()}if (outHeight) *outHeight = 0;") +print(f"{indent()}break;") +indent_level -= indent_offset +indent_level -= indent_offset +print(f"{indent()}}}") + + +indent_level -= indent_offset +indent_level -= indent_offset + +indent_level -= indent_offset +print(f"{indent()}}}") +print() + + # ============================