Source code for RWESharp.Core.LevelRenderer

import sys
import traceback

from PySide6.QtCore import QThread, Qt
from PySide6.QtWidgets import QProgressDialog
import os
import subprocess
from RWESharp.info import PATH_LEVELS, PATH_DRIZZLE, ISWIN

drizzle = os.path.join(PATH_DRIZZLE, "Drizzle.ConsoleApp.exe" if ISWIN else "Drizzle.ConsoleApp")
levelrenderstack = []

[docs] class LevelRenderer:
[docs] @staticmethod def render_level(level_path: str): path, name = os.path.split(level_path) dialog = QProgressDialog(f"Rendering level {name}", "Cancel", 0, 1) dialog.show() codethread = LevelRenderer.RenderProcess(level_path, dialog, len(levelrenderstack)) levelrenderstack.append(codethread) # battling python's garbage collection codethread.start()
[docs] class RenderProcess(QThread): def __init__(self, level, dialog: QProgressDialog, stackindex): super().__init__() self.setObjectName("LevelRenderer") self.level = level self.dialog = dialog self.stackindex = stackindex
[docs] def run(self, /): try: proc = subprocess.Popen([drizzle, "render", self.level], stdout=subprocess.PIPE, executable=drizzle) except PermissionError: self.dialog.setLabelText("Permission denied!\nGive Drizzle.ConsoleApp permission to execute") return except: traceback.print_exc() return self.dialog.canceled.connect(proc.terminate) while True: char = proc.stdout.readline() if not char: return decoded = char.decode() self.dialog.setLabelText(decoded) print(decoded)
if __name__ == '__main__': from PySide6.QtWidgets import QApplication app = QApplication() LevelRenderer.render_level(os.path.join(PATH_LEVELS, "HE_LEG.txt")) sys.exit(app.exec())