From d788de863719726a4e98dd5900ac4865b86e597a Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Sun, 25 Jan 2026 21:07:31 -0600 Subject: [PATCH] Starting refactor of tools, thank gosh --- CMakeLists.txt | 26 +++++--- cmake/modules/csvtoenum.cmake | 66 ------------------- src/item/CMakeLists.txt | 21 +----- tools/CMakeLists.txt | 2 + .../bundle/__main__.py} | 12 ++-- tools/assetstool/assethelpers.py | 2 +- tools/assetstool/processasset.py | 12 ++-- tools/assetstool/processimage.py | 8 +-- tools/assetstool/processlanguage.py | 8 +-- tools/assetstool/processmap.py | 12 ++-- tools/assetstool/processpalette.py | 4 +- tools/assetstool/processscript.py | 8 +-- tools/assetstool/processtileset.py | 8 +-- tools/csvtoenum.py | 49 -------------- tools/dusk/chunk.py | 12 ++-- tools/dusk/entity.py | 4 +- tools/dusk/map.py | 6 +- tools/dusk/region.py | 4 +- tools/dusk/tile.py | 2 +- tools/editor.py | 6 +- tools/editortool/cutscenetool.py | 4 +- tools/editortool/map/camera.py | 2 +- tools/editortool/map/chunkpanel.py | 2 +- tools/editortool/map/entitypanel.py | 4 +- tools/editortool/map/grid.py | 2 +- tools/editortool/map/mapinfopanel.py | 2 +- tools/editortool/map/mapleftpanel.py | 6 +- tools/editortool/map/menubar.py | 2 +- tools/editortool/map/regionpanel.py | 4 +- tools/editortool/map/selectbox.py | 4 +- tools/editortool/maptool.py | 20 +++--- tools/run_python/CMakeLists.txt | 19 ++++++ 32 files changed, 120 insertions(+), 223 deletions(-) delete mode 100644 cmake/modules/csvtoenum.cmake rename tools/{assettool.py => asset/bundle/__main__.py} (80%) delete mode 100644 tools/csvtoenum.py create mode 100644 tools/run_python/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 2e026e8..ad30d73 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,14 +113,24 @@ if(ENABLE_TESTS) endif() # Build assets -add_custom_target(DUSK_ASSETS_BUILT ALL - COMMAND - ${Python3_EXECUTABLE} ${DUSK_TOOLS_DIR}/assettool.py - --assets ${DUSK_GAME_ASSETS_DIR} - --output-assets ${DUSK_BUILT_ASSETS_DIR} - --output-file ${DUSK_BUILD_DIR}/dusk.dsk - --headers-dir ${DUSK_GENERATED_HEADERS_DIR} - --input ${DUSK_ASSETS} +# add_custom_target(DUSK_ASSETS_BUILT ALL +# COMMAND +# ${Python3_EXECUTABLE} ${DUSK_TOOLS_DIR}/assettool.py +# --assets ${DUSK_GAME_ASSETS_DIR} +# --output-assets ${DUSK_BUILT_ASSETS_DIR} +# --output-file ${DUSK_BUILD_DIR}/dusk.dsk +# --headers-dir ${DUSK_GENERATED_HEADERS_DIR} +# --input ${DUSK_ASSETS} +# ) +# add_dependencies(${DUSK_LIBRARY_TARGET_NAME} DUSK_ASSETS_BUILT) +dusk_run_python( + DUSK_ASSETS_BUILT + tools.asset.bundle + --assets ${DUSK_ASSETS_DIR} + --output-assets ${DUSK_BUILT_ASSETS_DIR} + --output-file ${DUSK_BUILD_DIR}/dusk.dsk + --headers-dir ${DUSK_GENERATED_HEADERS_DIR} + --input ${DUSK_ASSETS} ) add_dependencies(${DUSK_LIBRARY_TARGET_NAME} DUSK_ASSETS_BUILT) diff --git a/cmake/modules/csvtoenum.cmake b/cmake/modules/csvtoenum.cmake deleted file mode 100644 index 961f3b9..0000000 --- a/cmake/modules/csvtoenum.cmake +++ /dev/null @@ -1,66 +0,0 @@ -# csvtoenum( ) -# Example: -# csvtoenum(myfile.csv outhead.h itemtype_t id ITEM_TYPE_) -# -# Will generate a header with: -# typedef enum { -# ITEM_TYPE_NULL, -# ITEM_TYPE_FOO, -# ... -# ITEM_TYPE_COUNT, -# } itemtype_t; - -function(csvtoenum CSV_FILE OUT_HEADER C_TYPE TAKE_COLUMN PREFIX_COLUMN) - # Read the CSV file - file(READ "${CSV_FILE}" CSV_CONTENTS) - string(REPLACE "\r\n" "\n" CSV_CONTENTS "${CSV_CONTENTS}") - string(REPLACE "\r" "\n" CSV_CONTENTS "${CSV_CONTENTS}") - string(REGEX REPLACE "\n+$" "" CSV_CONTENTS "${CSV_CONTENTS}") - string(REPLACE "\n" ";" CSV_LINES "${CSV_CONTENTS}") - - # Get header row and find column indices - list(GET CSV_LINES 0 HEADER_ROW) - string(REPLACE "," ";" HEADER_LIST "${HEADER_ROW}") - set(COLUMN_INDEX -1) - set(PREFIX_INDEX -1) - set(IDX 0) - foreach(COL ${HEADER_LIST}) - if(COL STREQUAL "${TAKE_COLUMN}") - set(COLUMN_INDEX ${IDX}) - endif() - if(COL STREQUAL "${PREFIX_COLUMN}") - set(PREFIX_INDEX ${IDX}) - endif() - math(EXPR IDX "${IDX} + 1") - endforeach() - if(COLUMN_INDEX EQUAL -1) - message(FATAL_ERROR "csvtoenum: TAKE_COLUMN '${TAKE_COLUMN}' not found in header of ${CSV_FILE}") - endif() - if(PREFIX_INDEX EQUAL -1) - message(FATAL_ERROR "csvtoenum: PREFIX_COLUMN '${PREFIX_COLUMN}' not found in header of ${CSV_FILE}") - endif() - - # Prepare enum entries - set(ENUM_ENTRIES " ${PREFIX_COLUMN}NULL,") - set(ROW_IDX 1) - list(LENGTH CSV_LINES NUM_LINES) - while(ROW_IDX LESS NUM_LINES) - list(GET CSV_LINES ${ROW_IDX} ROW) - string(REPLACE "," ";" ROW_LIST "${ROW}") - list(LENGTH ROW_LIST ROW_LEN) - if(ROW_LEN GREATER COLUMN_INDEX) - list(GET ROW_LIST ${COLUMN_INDEX} ENTRY) - list(GET ROW_LIST ${PREFIX_INDEX} PREFIX) - # Only add if ENTRY is not empty - string(STRIP "${ENTRY}" ENTRY) - if(NOT ENTRY STREQUAL "") - set(ENUM_ENTRIES "${ENUM_ENTRIES}\n ${PREFIX}${ENTRY},") - endif() - endif() - math(EXPR ROW_IDX "${ROW_IDX} + 1") - endwhile() - set(ENUM_ENTRIES "${ENUM_ENTRIES}\n ${PREFIX_COLUMN}COUNT,") - - # Write header file - file(WRITE "${OUT_HEADER}" "/**\n * Auto-generated by csvtoenum.cmake\n * Source: ${CSV_FILE}\n */\n\ntypedef enum {\n${ENUM_ENTRIES}\n} ${C_TYPE};\n") -endfunction() \ No newline at end of file diff --git a/src/item/CMakeLists.txt b/src/item/CMakeLists.txt index 013eff9..2090c3c 100644 --- a/src/item/CMakeLists.txt +++ b/src/item/CMakeLists.txt @@ -3,29 +3,10 @@ # This software is released under the MIT License. # https://opensource.org/licenses/MIT -include(cmake/modules/csvtoenum.cmake) - # Sources target_sources(${DUSK_LIBRARY_TARGET_NAME} PUBLIC item.c inventory.c backpack.c -) - -# Generate itemtype_t enum from CSV -set(ITEM_CSV "${CMAKE_CURRENT_LIST_DIR}/itemtypes.csv") -set(ITEM_HEADER "${CMAKE_CURRENT_LIST_DIR}/itemtypes2.h") -csvtoenum(${ITEM_CSV} ${ITEM_HEADER} itemtype_t id ITEM_TYPE_) - -add_custom_command( - OUTPUT ${OUTPUT_FULL_PATH} - COMMAND ${CMAKE_COMMAND} - -DENV_FILE=${INPUT_FULL_PATH} - -DOUT_HEADER=${OUTPUT_FULL_PATH} - -P ${CMAKE_SOURCE_DIR}/cmake/modules/envtoh.cmake - DEPENDS ${INPUT_FULL_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules/envtoh.cmake - COMMENT "Generating ${OUTPUT_NAME_RELATIVE}" -) -add_custom_target(${OUTPUT_NAME_RELATIVE}_header DEPENDS ${OUTPUT_FULL_PATH}) -add_dependencies(${DUSK_LIBRARY_TARGET_NAME} ${OUTPUT_NAME_RELATIVE}_header) \ No newline at end of file +) \ No newline at end of file diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 23973f3..7986058 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -3,6 +3,8 @@ # This software is released under the MIT License. # https://opensource.org/licenses/MIT +add_subdirectory(run_python) + # Function that adds an asset to be compiled function(add_asset ASSET_TYPE ASSET_PATH) set(FULL_ASSET_PATH "${CMAKE_CURRENT_LIST_DIR}/${ASSET_PATH}") diff --git a/tools/assettool.py b/tools/asset/bundle/__main__.py similarity index 80% rename from tools/assettool.py rename to tools/asset/bundle/__main__.py index 87c9d5d..acf5526 100644 --- a/tools/assettool.py +++ b/tools/asset/bundle/__main__.py @@ -1,10 +1,10 @@ import sys, os -from assetstool.args import args -from assetstool.processasset import processAsset -from assetstool.processpalette import processPaletteList -from assetstool.processtileset import processTilesetList -from assetstool.processlanguage import processLanguageList -from assetstool.assethelpers import getBuiltAssetsRelativePath +from tools.assetstool.args import args +from tools.assetstool.processasset import processAsset +from tools.assetstool.processpalette import processPaletteList +from tools.assetstool.processtileset import processTilesetList +from tools.assetstool.processlanguage import processLanguageList +from tools.assetstool.assethelpers import getBuiltAssetsRelativePath import zipfile # Parse input file args. diff --git a/tools/assetstool/assethelpers.py b/tools/assetstool/assethelpers.py index 231dca8..d3682f8 100644 --- a/tools/assetstool/assethelpers.py +++ b/tools/assetstool/assethelpers.py @@ -1,5 +1,5 @@ import os -from assetstool.args import args +from tools.assetstool.args import args def getAssetRelativePath(fullPath): # Get the relative path to the asset diff --git a/tools/assetstool/processasset.py b/tools/assetstool/processasset.py index 1cfad1e..8e0f516 100644 --- a/tools/assetstool/processasset.py +++ b/tools/assetstool/processasset.py @@ -1,11 +1,11 @@ import sys # from processtileset import processTileset -from assetstool.processimage import processImage -from assetstool.processpalette import processPalette -from assetstool.processtileset import processTileset -from assetstool.processmap import processMap -from assetstool.processlanguage import processLanguage -from assetstool.processscript import processScript +from tools.assetstool.processimage import processImage +from tools.assetstool.processpalette import processPalette +from tools.assetstool.processtileset import processTileset +from tools.assetstool.processmap import processMap +from tools.assetstool.processlanguage import processLanguage +from tools.assetstool.processscript import processScript processedAssets = [] diff --git a/tools/assetstool/processimage.py b/tools/assetstool/processimage.py index 139b0b1..4b8701b 100644 --- a/tools/assetstool/processimage.py +++ b/tools/assetstool/processimage.py @@ -1,10 +1,10 @@ import os import sys from PIL import Image -from assetstool.processpalette import extractPaletteFromImage, palettes -from assetstool.args import args -from assetstool.assethelpers import getAssetRelativePath -from assetstool.assetcache import assetGetCache, assetCache +from tools.assetstool.processpalette import extractPaletteFromImage, palettes +from tools.assetstool.args import args +from tools.assetstool.assethelpers import getAssetRelativePath +from tools.assetstool.assetcache import assetGetCache, assetCache images = [] diff --git a/tools/assetstool/processlanguage.py b/tools/assetstool/processlanguage.py index 30673bb..8bb09a7 100644 --- a/tools/assetstool/processlanguage.py +++ b/tools/assetstool/processlanguage.py @@ -1,9 +1,9 @@ import sys import os -from assetstool.args import args -from assetstool.assetcache import assetCache, assetGetCache -from assetstool.assethelpers import getAssetRelativePath -from dusk.defs import defs +from tools.assetstool.args import args +from tools.assetstool.assetcache import assetCache, assetGetCache +from tools.assetstool.assethelpers import getAssetRelativePath +from tools.dusk.defs import defs import polib import re diff --git a/tools/assetstool/processmap.py b/tools/assetstool/processmap.py index 833a0db..42cb8e3 100644 --- a/tools/assetstool/processmap.py +++ b/tools/assetstool/processmap.py @@ -2,12 +2,12 @@ import struct import sys import os import json -from assetstool.args import args -from assetstool.assetcache import assetCache, assetGetCache -from assetstool.assethelpers import getAssetRelativePath -from dusk.defs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH, CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, CHUNK_TILE_COUNT -from dusk.map import Map -from dusk.chunk import Chunk +from tools.assetstool.args import args +from tools.assetstool.assetcache import assetCache, assetGetCache +from tools.assetstool.assethelpers import getAssetRelativePath +from tools.dusk.defs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH, CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, CHUNK_TILE_COUNT +from tools.dusk.map import Map +from tools.dusk.chunk import Chunk def convertModelData(modelData): # TLDR; Model data stores things efficiently with indices, but we buffer it diff --git a/tools/assetstool/processpalette.py b/tools/assetstool/processpalette.py index 487a95b..aa45408 100644 --- a/tools/assetstool/processpalette.py +++ b/tools/assetstool/processpalette.py @@ -1,8 +1,8 @@ import os from PIL import Image import datetime -from assetstool.args import args -from assetstool.assetcache import assetCache, assetGetCache +from tools.assetstool.args import args +from tools.assetstool.assetcache import assetCache, assetGetCache palettes = [] diff --git a/tools/assetstool/processscript.py b/tools/assetstool/processscript.py index a3aebcf..394aacb 100644 --- a/tools/assetstool/processscript.py +++ b/tools/assetstool/processscript.py @@ -1,9 +1,9 @@ import sys import os -from assetstool.args import args -from assetstool.assetcache import assetCache, assetGetCache -from assetstool.assethelpers import getAssetRelativePath -from dusk.defs import fileDefs +from tools.assetstool.args import args +from tools.assetstool.assetcache import assetCache, assetGetCache +from tools.assetstool.assethelpers import getAssetRelativePath +from tools.dusk.defs import fileDefs def processScript(asset): cache = assetGetCache(asset['path']) diff --git a/tools/assetstool/processtileset.py b/tools/assetstool/processtileset.py index 1208d1a..fcaa2ee 100644 --- a/tools/assetstool/processtileset.py +++ b/tools/assetstool/processtileset.py @@ -3,10 +3,10 @@ import sys import os import datetime from xml.etree import ElementTree -from assetstool.processimage import processImage -from assetstool.assethelpers import getAssetRelativePath -from assetstool.args import args -from assetstool.assetcache import assetGetCache, assetCache +from tools.assetstool.processimage import processImage +from tools.assetstool.assethelpers import getAssetRelativePath +from tools.assetstool.args import args +from tools.assetstool.assetcache import assetGetCache, assetCache tilesets = [] diff --git a/tools/csvtoenum.py b/tools/csvtoenum.py deleted file mode 100644 index b91d252..0000000 --- a/tools/csvtoenum.py +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env python3 -""" -csvtoenum.py: Generate a C enum header from a CSV file. -Usage: - python csvtoenum.py -""" -import sys -import csv - -def main(): - if len(sys.argv) != 6: - print("Usage: csvtoenum.py ", file=sys.stderr) - sys.exit(1) - csv_file, out_header, c_type, take_column, prefix_column = sys.argv[1:6] - - with open(csv_file, newline='') as f: - reader = csv.DictReader(f) - if take_column not in reader.fieldnames: - print(f"TAKE_COLUMN '{take_column}' not found in CSV header", file=sys.stderr) - sys.exit(2) - if prefix_column not in reader.fieldnames: - print(f"PREFIX_COLUMN '{prefix_column}' not found in CSV header", file=sys.stderr) - sys.exit(2) - entries = [] - for row in reader: - entry = row[take_column].strip() - prefix = row[prefix_column].strip() - if entry: - entries.append(f" {prefix}{entry},") - - # Compose enum - enum_entries = [f" {prefix_column}NULL,"] - enum_entries.extend(entries) - enum_entries.append(f" {prefix_column}COUNT,") - enum_body = "\n".join(enum_entries) - header = f"""/** - * Auto-generated by csvtoenum.py - * Source: {csv_file} - */ - -typedef enum {{ -{enum_body} -}} {c_type}; -""" - with open(out_header, 'w') as f: - f.write(header) - -if __name__ == "__main__": - main() diff --git a/tools/dusk/chunk.py b/tools/dusk/chunk.py index e5d416f..12f98c7 100644 --- a/tools/dusk/chunk.py +++ b/tools/dusk/chunk.py @@ -1,11 +1,11 @@ import json import os -from dusk.event import Event -from dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, CHUNK_VERTEX_COUNT_MAX, TILE_SHAPE_NULL -from dusk.tile import Tile -from dusk.entity import Entity -from dusk.region import Region -from editortool.map.vertexbuffer import VertexBuffer +from tools.dusk.event import Event +from tools.dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, CHUNK_VERTEX_COUNT_MAX, TILE_SHAPE_NULL +from tools.dusk.tile import Tile +from tools.dusk.entity import Entity +from tools.dusk.region import Region +from tools.editortool.map.vertexbuffer import VertexBuffer from OpenGL.GL import * class Chunk: diff --git a/tools/dusk/entity.py b/tools/dusk/entity.py index b7d7990..08b2568 100644 --- a/tools/dusk/entity.py +++ b/tools/dusk/entity.py @@ -1,5 +1,5 @@ -from dusk.defs import ENTITY_TYPE_NULL, ENTITY_TYPE_NPC, CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH -from editortool.map.vertexbuffer import VertexBuffer +from tools.dusk.defs import ENTITY_TYPE_NULL, ENTITY_TYPE_NPC, CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH +from tools.editortool.map.vertexbuffer import VertexBuffer class Entity: def __init__(self, chunk, localX=0, localY=0, localZ=0): diff --git a/tools/dusk/map.py b/tools/dusk/map.py index 5c44c4a..358e87d 100644 --- a/tools/dusk/map.py +++ b/tools/dusk/map.py @@ -1,11 +1,11 @@ import json import sys -from dusk.event import Event +from tools.dusk.event import Event from PyQt5.QtWidgets import QFileDialog, QMessageBox from PyQt5.QtCore import QTimer import os -from dusk.chunk import Chunk -from dusk.defs import MAP_WIDTH, MAP_HEIGHT, MAP_DEPTH, CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH +from tools.dusk.chunk import Chunk +from tools.dusk.defs import MAP_WIDTH, MAP_HEIGHT, MAP_DEPTH, CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH import traceback MAP_DEFAULT_PATH = os.path.join(os.path.dirname(__file__), '../../assets/map/') diff --git a/tools/dusk/region.py b/tools/dusk/region.py index e4b4511..b25c900 100644 --- a/tools/dusk/region.py +++ b/tools/dusk/region.py @@ -1,5 +1,5 @@ -from dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH -from editortool.map.vertexbuffer import VertexBuffer +from tools.dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH +from tools.editortool.map.vertexbuffer import VertexBuffer from OpenGL.GL import * from OpenGL.GLU import * diff --git a/tools/dusk/tile.py b/tools/dusk/tile.py index 601d0b0..8f91a33 100644 --- a/tools/dusk/tile.py +++ b/tools/dusk/tile.py @@ -1,5 +1,5 @@ from OpenGL.GL import * -from dusk.defs import ( +from tools.dusk.defs import ( TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH, CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, TILE_SHAPE_NULL, TILE_SHAPE_FLOOR, diff --git a/tools/editor.py b/tools/editor.py index 705bcd9..7b197f7 100755 --- a/tools/editor.py +++ b/tools/editor.py @@ -6,9 +6,9 @@ from PyQt5.QtWidgets import ( ) from OpenGL.GL import * from OpenGL.GLU import * -from editortool.maptool import MapWindow -from editortool.langtool import LangToolWindow -from editortool.cutscenetool import CutsceneToolWindow +from tools.editortool.maptool import MapWindow +from tools.editortool.langtool import LangToolWindow +from tools.editortool.cutscenetool import CutsceneToolWindow DEFAULT_TOOL = None DEFAULT_TOOL = "map" diff --git a/tools/editortool/cutscenetool.py b/tools/editortool/cutscenetool.py index 81d7e19..e6eb75c 100644 --- a/tools/editortool/cutscenetool.py +++ b/tools/editortool/cutscenetool.py @@ -1,7 +1,7 @@ from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QListWidget, QListWidgetItem, QMenuBar, QAction, QFileDialog, QMessageBox from PyQt5.QtGui import QKeySequence -from editortool.cutscene.cutsceneitemeditor import CutsceneItemEditor -from editortool.cutscene.cutscenemenubar import CutsceneMenuBar +from tools.editortool.cutscene.cutsceneitemeditor import CutsceneItemEditor +from tools.editortool.cutscene.cutscenemenubar import CutsceneMenuBar import sys class CutsceneToolWindow(QMainWindow): diff --git a/tools/editortool/map/camera.py b/tools/editortool/map/camera.py index a32945a..e7854fa 100644 --- a/tools/editortool/map/camera.py +++ b/tools/editortool/map/camera.py @@ -2,7 +2,7 @@ import math import time from OpenGL.GL import * from OpenGL.GLU import * -from dusk.defs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH, RPG_CAMERA_PIXELS_PER_UNIT, RPG_CAMERA_Z_OFFSET, RPG_CAMERA_FOV +from tools.dusk.defs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH, RPG_CAMERA_PIXELS_PER_UNIT, RPG_CAMERA_Z_OFFSET, RPG_CAMERA_FOV class Camera: def __init__(self, parent): diff --git a/tools/editortool/map/chunkpanel.py b/tools/editortool/map/chunkpanel.py index dd85d33..0ad87e4 100644 --- a/tools/editortool/map/chunkpanel.py +++ b/tools/editortool/map/chunkpanel.py @@ -1,5 +1,5 @@ from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QGridLayout, QTreeWidget, QTreeWidgetItem, QComboBox -from dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, TILE_SHAPES +from tools.dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, TILE_SHAPES class ChunkPanel(QWidget): def __init__(self, parent): diff --git a/tools/editortool/map/entitypanel.py b/tools/editortool/map/entitypanel.py index 495807c..5ca2fd8 100644 --- a/tools/editortool/map/entitypanel.py +++ b/tools/editortool/map/entitypanel.py @@ -1,7 +1,7 @@ from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QComboBox, QHBoxLayout, QPushButton, QLineEdit, QListWidget, QListWidgetItem from PyQt5.QtCore import Qt -from dusk.entity import Entity -from dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, ENTITY_TYPES, ENTITY_TYPE_NULL +from tools.dusk.entity import Entity +from tools.dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, ENTITY_TYPES, ENTITY_TYPE_NULL class EntityPanel(QWidget): def __init__(self, parent): diff --git a/tools/editortool/map/grid.py b/tools/editortool/map/grid.py index 6908bb7..5697c50 100644 --- a/tools/editortool/map/grid.py +++ b/tools/editortool/map/grid.py @@ -1,5 +1,5 @@ from OpenGL.GL import * -from dusk.defs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH +from tools.dusk.defs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH class Grid: def __init__(self, lines=1000): diff --git a/tools/editortool/map/mapinfopanel.py b/tools/editortool/map/mapinfopanel.py index f0232d2..2d0f612 100644 --- a/tools/editortool/map/mapinfopanel.py +++ b/tools/editortool/map/mapinfopanel.py @@ -1,5 +1,5 @@ from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QHBoxLayout, QMessageBox -from dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH +from tools.dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH class MapInfoPanel(QWidget): def __init__(self, parent): diff --git a/tools/editortool/map/mapleftpanel.py b/tools/editortool/map/mapleftpanel.py index 080d0ad..949b7d8 100644 --- a/tools/editortool/map/mapleftpanel.py +++ b/tools/editortool/map/mapleftpanel.py @@ -1,7 +1,7 @@ from PyQt5.QtWidgets import QWidget, QVBoxLayout, QGridLayout, QPushButton, QTabWidget, QLabel -from editortool.map.chunkpanel import ChunkPanel -from editortool.map.entitypanel import EntityPanel -from editortool.map.regionpanel import RegionPanel +from tools.editortool.map.chunkpanel import ChunkPanel +from tools.editortool.map.entitypanel import EntityPanel +from tools.editortool.map.regionpanel import RegionPanel class MapLeftPanel(QWidget): def __init__(self, parent): diff --git a/tools/editortool/map/menubar.py b/tools/editortool/map/menubar.py index 0c2ba06..5084ed1 100644 --- a/tools/editortool/map/menubar.py +++ b/tools/editortool/map/menubar.py @@ -1,7 +1,7 @@ import os from PyQt5.QtWidgets import QAction, QMenuBar, QFileDialog from PyQt5.QtGui import QKeySequence -from dusk.map import MAP_DEFAULT_PATH +from tools.dusk.map import MAP_DEFAULT_PATH class MapMenubar: def __init__(self, parent): diff --git a/tools/editortool/map/regionpanel.py b/tools/editortool/map/regionpanel.py index 5a0f2b9..c2f1ee4 100644 --- a/tools/editortool/map/regionpanel.py +++ b/tools/editortool/map/regionpanel.py @@ -1,7 +1,7 @@ from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QComboBox, QHBoxLayout, QPushButton, QLineEdit, QListWidget, QListWidgetItem from PyQt5.QtCore import Qt -from dusk.entity import Entity -from dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, ENTITY_TYPES, ENTITY_TYPE_NULL +from tools.dusk.entity import Entity +from tools.dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, ENTITY_TYPES, ENTITY_TYPE_NULL class RegionPanel(QWidget): def __init__(self, parent): diff --git a/tools/editortool/map/selectbox.py b/tools/editortool/map/selectbox.py index 07766d0..9af53ca 100644 --- a/tools/editortool/map/selectbox.py +++ b/tools/editortool/map/selectbox.py @@ -1,7 +1,7 @@ import OpenGL.GL as gl -from dusk.defs import defs +from tools.dusk.defs import defs import colorsys -from dusk.defs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH +from tools.dusk.defs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH class SelectBox: def __init__(self, parent): diff --git a/tools/editortool/maptool.py b/tools/editortool/maptool.py index 586aac0..b561da7 100644 --- a/tools/editortool/maptool.py +++ b/tools/editortool/maptool.py @@ -1,16 +1,16 @@ import os from PyQt5.QtWidgets import QMainWindow, QWidget, QHBoxLayout, QMessageBox from PyQt5.QtCore import Qt -from editortool.map.glwidget import GLWidget -from editortool.map.mapleftpanel import MapLeftPanel -from editortool.map.mapinfopanel import MapInfoPanel -from editortool.map.menubar import MapMenubar -from editortool.map.statusbar import StatusBar -from dusk.map import Map -from dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, TILE_SHAPE_NULL, TILE_SHAPE_FLOOR -from editortool.map.selectbox import SelectBox -from editortool.map.camera import Camera -from editortool.map.grid import Grid +from tools.editortool.map.glwidget import GLWidget +from tools.editortool.map.mapleftpanel import MapLeftPanel +from tools.editortool.map.mapinfopanel import MapInfoPanel +from tools.editortool.map.menubar import MapMenubar +from tools.editortool.map.statusbar import StatusBar +from tools.dusk.map import Map +from tools.dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, TILE_SHAPE_NULL, TILE_SHAPE_FLOOR +from tools.editortool.map.selectbox import SelectBox +from tools.editortool.map.camera import Camera +from tools.editortool.map.grid import Grid class MapWindow(QMainWindow): def __init__(self): diff --git a/tools/run_python/CMakeLists.txt b/tools/run_python/CMakeLists.txt new file mode 100644 index 0000000..efad0c4 --- /dev/null +++ b/tools/run_python/CMakeLists.txt @@ -0,0 +1,19 @@ +# Copyright (c) 2026 Dominic Masters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +# Copyright (c) 2026 Dominic Masters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +function(dusk_run_python CMAKE_TARGET_NAME PYTHON_MODULE) + find_package(Python3 COMPONENTS Interpreter REQUIRED) + + add_custom_target(${CMAKE_TARGET_NAME} ALL + WORKING_DIRECTORY ${DUSK_ROOT_DIR} + COMMAND + ${Python3_EXECUTABLE} -m ${PYTHON_MODULE} ${ARGN} + ) +endfunction() \ No newline at end of file