From 2c9d0c6cff448cc2a97838de315a1d6c2a004f93 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Mon, 26 Jan 2026 00:18:43 -0600 Subject: [PATCH] Fixed duskdefs --- assets/CMakeLists.txt | 1 + assets/item/CMakeLists.txt | 20 ++++++++ src/item/item.csv => assets/item/items.csv | 0 assets/untitled.tiled-project | 14 ------ assets/untitled.tiled-session | 56 ---------------------- src/item/item.h | 11 +---- src/item/itemtype.h | 20 -------- tools/CMakeLists.txt | 1 + tools/csv_to_enum/CMakeLists.txt | 35 ++++++++++++++ tools/csv_to_enum/__main__.py | 50 +++++++++++++++++++ tools/env_to_h/CMakeLists.txt | 4 +- tools/env_to_h/__main__.py | 1 - 12 files changed, 111 insertions(+), 102 deletions(-) create mode 100644 assets/item/CMakeLists.txt rename src/item/item.csv => assets/item/items.csv (100%) delete mode 100644 assets/untitled.tiled-project delete mode 100644 assets/untitled.tiled-session delete mode 100644 src/item/itemtype.h create mode 100644 tools/csv_to_enum/CMakeLists.txt create mode 100644 tools/csv_to_enum/__main__.py diff --git a/assets/CMakeLists.txt b/assets/CMakeLists.txt index ce61067..37ce0c1 100644 --- a/assets/CMakeLists.txt +++ b/assets/CMakeLists.txt @@ -15,6 +15,7 @@ add_subdirectory(locale) add_asset(SCRIPT init.lua) # Subdirs +add_subdirectory(item) add_subdirectory(entity) add_subdirectory(map) add_subdirectory(ui) diff --git a/assets/item/CMakeLists.txt b/assets/item/CMakeLists.txt new file mode 100644 index 0000000..91e0942 --- /dev/null +++ b/assets/item/CMakeLists.txt @@ -0,0 +1,20 @@ +# Copyright (c) 2026 Dominic Masters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +dusk_csv_to_enum( + ${CMAKE_CURRENT_LIST_DIR}/items.csv + item/itemtype.h + itemtype_t + ITEM_TYPE + type +) + +dusk_csv_to_enum( + ${CMAKE_CURRENT_LIST_DIR}/items.csv + item/itemid.h + itemid_t + ITEM_ID + id +) \ No newline at end of file diff --git a/src/item/item.csv b/assets/item/items.csv similarity index 100% rename from src/item/item.csv rename to assets/item/items.csv diff --git a/assets/untitled.tiled-project b/assets/untitled.tiled-project deleted file mode 100644 index d0eb592..0000000 --- a/assets/untitled.tiled-project +++ /dev/null @@ -1,14 +0,0 @@ -{ - "automappingRulesFile": "", - "commands": [ - ], - "compatibilityVersion": 1100, - "extensionsPath": "extensions", - "folders": [ - "." - ], - "properties": [ - ], - "propertyTypes": [ - ] -} diff --git a/assets/untitled.tiled-session b/assets/untitled.tiled-session deleted file mode 100644 index 2bfebc1..0000000 --- a/assets/untitled.tiled-session +++ /dev/null @@ -1,56 +0,0 @@ -{ - "Map/SizeTest": { - "height": 4300, - "width": 2 - }, - "activeFile": "map/untitled.tmx", - "expandedProjectPaths": [ - "tileset", - ".", - "map" - ], - "file.lastUsedOpenFilter": "All Files (*)", - "fileStates": { - "entity/entities.tsx": { - "scaleInDock": 1, - "scaleInEditor": 1 - }, - "map/prarie.tsx": { - "scaleInDock": 1, - "scaleInEditor": 11 - }, - "map/untitled.tmx": { - "scale": 2, - "selectedLayer": 0, - "viewCenter": { - "x": 285.5, - "y": 162.75 - } - }, - "tileset/prarie.tsx": { - "scaleInDock": 1, - "scaleInEditor": 1 - } - }, - "last.imagePath": "/home/yourwishes/htdocs/dusk/assets/tileset", - "map.lastUsedFormat": "tmx", - "map.tileHeight": 16, - "map.tileWidth": 16, - "openFiles": [ - "entity/entities.tsx", - "map/untitled.tmx", - "tileset/prarie.tsx" - ], - "project": "untitled.tiled-project", - "recentFiles": [ - "entity/entities.tsx", - "tileset/prarie.tsx", - "map/untitled.tmx", - "map/prarie.tsx" - ], - "tileset.lastUsedFormat": "tsx", - "tileset.tileSize": { - "height": 16, - "width": 16 - } -} diff --git a/src/item/item.h b/src/item/item.h index 8f09aee..8a99b68 100644 --- a/src/item/item.h +++ b/src/item/item.h @@ -6,18 +6,11 @@ */ #pragma once -#include "itemtype.h" +#include "item/itemtype.h" +#include "item/itemid.h" typedef struct { itemtype_t type; } item_t; -typedef enum { - ITEM_ID_NULL = 0, - - ITEM_ID_POTION, - ITEM_ID_POTATO, - ITEM_ID_APPLE -} itemid_t; - extern const item_t ITEMS[]; \ No newline at end of file diff --git a/src/item/itemtype.h b/src/item/itemtype.h deleted file mode 100644 index c63d246..0000000 --- a/src/item/itemtype.h +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) 2026 Dominic Masters - * - * This software is released under the MIT License. - * https://opensource.org/licenses/MIT - */ - -#pragma once -#include "dusk.h" - -typedef enum { - ITEM_TYPE_NULL = 0, - - ITEM_TYPE_MEDICINE, - ITEM_TYPE_INGREDIENT, - ITEM_TYPE_FOOD, - ITEM_TYPE_KEYITEM, - - ITEM_TYPE_COUNT -} itemtype_t; \ No newline at end of file diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 72d1f95..913325b 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -5,6 +5,7 @@ add_subdirectory(run_python) add_subdirectory(env_to_h) +add_subdirectory(csv_to_enum) # Function that adds an asset to be compiled function(add_asset ASSET_TYPE ASSET_PATH) diff --git a/tools/csv_to_enum/CMakeLists.txt b/tools/csv_to_enum/CMakeLists.txt new file mode 100644 index 0000000..236bb48 --- /dev/null +++ b/tools/csv_to_enum/CMakeLists.txt @@ -0,0 +1,35 @@ +# Copyright (c) 2026 Dominic Masters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +function(dusk_csv_to_enum INPUT_PATH OUTPUT_NAME_RELATIVE TYPEDEF PREFIX TAKE_COLUMN) + set(NULL_ENTRY TRUE) + set(COUNT_ENTRY TRUE) + + # Take NULL_ENTRY and COUNT_ENTRY from ARGN + foreach(ARG IN LISTS ARGN) + if(ARG STREQUAL "NO_NULL_ENTRY") + set(NULL_ENTRY FALSE) + elseif(ARG STREQUAL "NO_COUNT_ENTRY") + set(COUNT_ENTRY FALSE) + endif() + endforeach() + + set(DUSK_DEFS_TARGET_NAME "DUSK_DEFS_${OUTPUT_NAME_RELATIVE}") + string(REPLACE "." "_" DUSK_DEFS_TARGET_NAME ${DUSK_DEFS_TARGET_NAME}) + string(REPLACE "/" "_" DUSK_DEFS_TARGET_NAME ${DUSK_DEFS_TARGET_NAME}) + + dusk_run_python( + ${DUSK_DEFS_TARGET_NAME} + tools.csv_to_enum + --csv ${INPUT_PATH} + --output ${DUSK_GENERATED_HEADERS_DIR}/${OUTPUT_NAME_RELATIVE} + --typedef ${TYPEDEF} + --prefix ${PREFIX} + --take-column ${TAKE_COLUMN} + --null-entry ${NULL_ENTRY} + --count-entry ${COUNT_ENTRY} + ) + add_dependencies(${DUSK_LIBRARY_TARGET_NAME} ${DUSK_DEFS_TARGET_NAME}) +endfunction() \ No newline at end of file diff --git a/tools/csv_to_enum/__main__.py b/tools/csv_to_enum/__main__.py new file mode 100644 index 0000000..5ba7a82 --- /dev/null +++ b/tools/csv_to_enum/__main__.py @@ -0,0 +1,50 @@ +import argparse +import os +import csv + +parser = argparse.ArgumentParser(description="Convert CSV to .h defines") +parser.add_argument("--csv", required=True, help="Path to CSV file") +parser.add_argument("--output", required=True, help="Path to output .h file") +parser.add_argument("--prefix", default="", help="Prefix for each define") +parser.add_argument("--typedef", required=True, help="Typedef name for the enum") +parser.add_argument("--take-column", required=True, help="Column name to take the values for the enum for") +parser.add_argument("--null-entry", default=None, help="Optional name for a NULL/INVALID entry") +parser.add_argument("--count-entry", default=None, help="Optional name for a COUNT entry") +args = parser.parse_args() + +outHeader = "" +outHeader += "#include \"dusk.h\"\n\n" +with open(args.csv, newline='') as csvfile: + reader = csv.reader(csvfile) + + headers = next(reader) + if args.take_column not in headers: + raise ValueError(f"Column '{args.take_column}' not found in CSV headers") + take_column_index = headers.index(args.take_column) + + # Extract entries + entries = [] + for row in reader: + value = row[take_column_index] + clean_define_name = value.replace(" ", "_").upper() + if clean_define_name in entries: + continue # Avoid duplicates + entries.append(clean_define_name) + + # Gen enum. + outHeader += f"typedef enum {{\n" + if args.null_entry == "TRUE": + outHeader += f" {args.prefix}_NULL = 0,\n\n" + + for entry in entries: + outHeader += f" {args.prefix}_{entry},\n" + + if args.count_entry == "TRUE": + outHeader += f"\n {args.prefix}_COUNT,\n" + + outHeader += f"}} {args.typedef};\n\n" + +# Write to output file (mkdirp if needed) +os.makedirs(os.path.dirname(args.output), exist_ok=True) +with open(args.output, 'w') as outFile: + outFile.write(outHeader) \ No newline at end of file diff --git a/tools/env_to_h/CMakeLists.txt b/tools/env_to_h/CMakeLists.txt index 17a4678..b97b1a2 100644 --- a/tools/env_to_h/CMakeLists.txt +++ b/tools/env_to_h/CMakeLists.txt @@ -8,8 +8,8 @@ function(dusk_env_to_h INPUT_PATH OUTPUT_NAME_RELATIVE) dusk_run_python( ${DUSK_DEFS_TARGET_NAME} tools.env_to_h - --env ${INPUT_PATH} - --output ${DUSK_BUILT_ASSETS_DIR}/${OUTPUT_NAME_RELATIVE} + --env "${CMAKE_CURRENT_LIST_DIR}/${INPUT_PATH}" + --output ${DUSK_GENERATED_HEADERS_DIR}/${OUTPUT_NAME_RELATIVE} ) add_dependencies(${DUSK_LIBRARY_TARGET_NAME} ${DUSK_DEFS_TARGET_NAME}) endfunction() \ No newline at end of file diff --git a/tools/env_to_h/__main__.py b/tools/env_to_h/__main__.py index 96c399d..0e604de 100644 --- a/tools/env_to_h/__main__.py +++ b/tools/env_to_h/__main__.py @@ -11,7 +11,6 @@ args = parser.parse_args() load_dotenv(dotenv_path=args.env) fileDefs = dotenv_values(dotenv_path=args.env) - outHeader = "" outHeader += "#include \"dusk.h\"\n\n" for key, value in fileDefs.items():