From 0afd309b26f0191eb22ca3c2f3a40a8147b79830 Mon Sep 17 00:00:00 2001 From: lilacLunatic <8488221+lilacLunatic@users.noreply.github.com> Date: Tue, 29 Apr 2025 12:54:16 -0300 Subject: [PATCH 1/2] Components getXML --- fast64_internal/oot/exporter/scene/actors.py | 51 ++++++++++++++++++- fast64_internal/oot/exporter/scene/general.py | 43 +++++++++++++++- fast64_internal/oot/exporter/scene/header.py | 6 +-- .../oot/exporter/scene/pathways.py | 27 +++++++++- fast64_internal/oot/exporter/scene/rooms.py | 19 +++++-- 5 files changed, 134 insertions(+), 12 deletions(-) diff --git a/fast64_internal/oot/exporter/scene/actors.py b/fast64_internal/oot/exporter/scene/actors.py index 8f7735b6e..7195a4442 100644 --- a/fast64_internal/oot/exporter/scene/actors.py +++ b/fast64_internal/oot/exporter/scene/actors.py @@ -36,6 +36,23 @@ def getEntryC(self): + ("\n" + indent + "},\n") ) + def getEntryXML(self) + """Returns a single transition actor entry as an XML ``str``""" + + rot = self.rot[len("DEF_TO_BINANG("):-1] + data = indent + "\n" + + return data @dataclass class SceneTransitionActors: @@ -118,6 +135,13 @@ def getC(self): return transActorList + def getXML(self): + """Returns the transition actor list as an XML string""" + data = "\n" + for actor in self.entries: + data += actor.getXML(); + data += "\n" + return data @dataclass class EntranceActor(Actor): @@ -131,6 +155,16 @@ def getEntryC(self): return indent + "{ " + f"{self.spawnIndex}, {self.roomIndex}" + " },\n" + def getEntryXML(self) + """Returns a single spawn entry as an XML ``str``""" + + rot = self.rot[len("DEF_TO_BINANG("):-1] + data = indent + "\n" + + return data + @dataclass class SceneEntranceActors: @@ -189,7 +223,6 @@ def getCmd(self): def getC(self): """Returns the spawn actor array""" - spawnActorList = CData() listName = f"ActorEntry {self.name}" @@ -203,6 +236,14 @@ def getC(self): return spawnActorList + def getXML(self): + """Returns the spawn list as an XML string""" + data = "\n" + for actor in self.entries: + data += actor.getXML(); + data += "\n" + return data + @dataclass class SceneSpawns(Utility): @@ -234,3 +275,11 @@ def getC(self): ) return spawnList + + def getXML(self): + """Returns the spawn list as an XML string""" + data = "\n" + for actor in self.entries: + data += actor.getXML(); + data += "\n" + return data diff --git a/fast64_internal/oot/exporter/scene/general.py b/fast64_internal/oot/exporter/scene/general.py index 2a1638dea..7d5ce0f98 100644 --- a/fast64_internal/oot/exporter/scene/general.py +++ b/fast64_internal/oot/exporter/scene/general.py @@ -142,6 +142,37 @@ def getC(self): return lightSettingsC + def getXML(self): + """Returns a ``str`` containing the XML data of env. light settings""" + + data = "\n" + for i, light in enumerate(self.settings): + data += indent *1 + "\n" + data += "\n" + return data @dataclass class SceneInfos: @@ -219,8 +250,7 @@ class SceneExits(Utility): def new(name: str, props: OOTSceneHeaderProperty): # TODO: proper implementation of exits - exitList: list[tuple[int, str]] = [] - for i, exitProp in enumerate(props.exitList): + exitList: list[tuple[int, str]] = [] for i, exitProp in enumerate(props.exitList): if exitProp.exitIndex != "Custom": raise PluginError("ERROR: Exits are unfinished, please use 'Custom'.") exitList.append((i, exitProp.exitIndexCustom)) @@ -249,3 +279,12 @@ def getC(self): ) return exitListC + + def getXML(self): + """Returns a ``str`` containing the XML data of the exit array""" + + data = "\n" + for (exitId, name) in self.exitList: + data += indent * 1 + "\n" + data += "\n" + return data diff --git a/fast64_internal/oot/exporter/scene/header.py b/fast64_internal/oot/exporter/scene/header.py index 72bc8d32f..4d7838ad7 100644 --- a/fast64_internal/oot/exporter/scene/header.py +++ b/fast64_internal/oot/exporter/scene/header.py @@ -69,14 +69,10 @@ def getC(self): return headerData - @dataclass class SceneAlternateHeader: """This class stores alternate header data for the scene""" - name: str - - childNight: Optional[SceneHeader] = field(init=False, default=None) - adultDay: Optional[SceneHeader] = field(init=False, default=None) + name: str childNight: Optional[SceneHeader] = field(init=False, default=None) adultDay: Optional[SceneHeader] = field(init=False, default=None) adultNight: Optional[SceneHeader] = field(init=False, default=None) cutscenes: list[SceneHeader] = field(init=False, default_factory=list) diff --git a/fast64_internal/oot/exporter/scene/pathways.py b/fast64_internal/oot/exporter/scene/pathways.py index 331af8dbe..3491fe88c 100644 --- a/fast64_internal/oot/exporter/scene/pathways.py +++ b/fast64_internal/oot/exporter/scene/pathways.py @@ -1,7 +1,7 @@ from dataclasses import dataclass, field from mathutils import Matrix from bpy.types import Object -from ....utility import PluginError, CData, indent +from ....utility import PluginError, CData, indent, writeXMLData from ...oot_utility import getObjectList from ..utility import Utility @@ -34,6 +34,18 @@ def getC(self): return pathData + def getXML(self): + """Returns the pathway position list as an XML ``str``""" + data = "\n" + pathDataElement = indent * 1 + "\n" + for point in self.points: + pointData = indent * 2 + "\n" + pathDataElement += pointData + data += pathDataElement + data += "\n" @dataclass class ScenePathways: @@ -92,3 +104,16 @@ def getC(self): pathData.append(pathListData) return pathData + + def getXML(self, dirPath): + """Returns an XML ``str`` containing the data of the pathway array""" + + data = "\n" + for path in self.pathList: + filePath = os.join(dirPath, path.name) + pathToXML = path.toXML() + writeXMLData(pathToXML, filePath) + data += indent * 1 + f"\n" + data += "\n" + return data + diff --git a/fast64_internal/oot/exporter/scene/rooms.py b/fast64_internal/oot/exporter/scene/rooms.py index 6948ef6bb..78defab7b 100644 --- a/fast64_internal/oot/exporter/scene/rooms.py +++ b/fast64_internal/oot/exporter/scene/rooms.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from mathutils import Matrix from bpy.types import Object -from ....utility import PluginError, CData, indent +from ....utility import PluginError, CData, indent, writeXMLData from ...oot_utility import getObjectList from ...oot_model_classes import OOTModel from ..room import Room @@ -47,8 +47,7 @@ def new(name: str, sceneName: str, model: OOTModel, sceneObj: Object, transform: sceneName, saveTexturesAsPNG, ) - - for i in range(min(roomDict.keys()), len(roomDict)): +for i in range(min(roomDict.keys()), len(roomDict)): if i not in roomDict: raise PluginError(f"Room indices are not consecutive. Missing room index: {i}") @@ -97,3 +96,17 @@ def getC(self, useDummyRoomList: bool): roomList.source += "};\n\n" return roomList + + def getXML(self, useDummyRoomList: bool, dirPath): + """Returns the XML ``str`` containing the room list data""" + + data = "\n" + for entry in self.entries: + filePath = os.join(dirPath, entry.name) + ## TODO: figure out VromStart/VromEnd + entryPathData = indent * 1 + f"\n" + data += entryPathData + + #writeXMLData() + data += "\n" + return data From 0d122e3d319bb2314926b9732a1749c1c28960a4 Mon Sep 17 00:00:00 2001 From: lilacLunatic <8488221+lilacLunatic@users.noreply.github.com> Date: Tue, 29 Apr 2025 13:00:13 -0300 Subject: [PATCH 2/2] what happened here... --- fast64_internal/oot/exporter/scene/actors.py | 1 + fast64_internal/oot/exporter/scene/general.py | 3 ++- fast64_internal/oot/exporter/scene/header.py | 6 +++++- fast64_internal/oot/exporter/scene/rooms.py | 3 ++- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/fast64_internal/oot/exporter/scene/actors.py b/fast64_internal/oot/exporter/scene/actors.py index 7195a4442..e1b4af4f7 100644 --- a/fast64_internal/oot/exporter/scene/actors.py +++ b/fast64_internal/oot/exporter/scene/actors.py @@ -223,6 +223,7 @@ def getCmd(self): def getC(self): """Returns the spawn actor array""" + spawnActorList = CData() listName = f"ActorEntry {self.name}" diff --git a/fast64_internal/oot/exporter/scene/general.py b/fast64_internal/oot/exporter/scene/general.py index 7d5ce0f98..a9cea9e6f 100644 --- a/fast64_internal/oot/exporter/scene/general.py +++ b/fast64_internal/oot/exporter/scene/general.py @@ -250,7 +250,8 @@ class SceneExits(Utility): def new(name: str, props: OOTSceneHeaderProperty): # TODO: proper implementation of exits - exitList: list[tuple[int, str]] = [] for i, exitProp in enumerate(props.exitList): + exitList: list[tuple[int, str]] = [] + for i, exitProp in enumerate(props.exitList): if exitProp.exitIndex != "Custom": raise PluginError("ERROR: Exits are unfinished, please use 'Custom'.") exitList.append((i, exitProp.exitIndexCustom)) diff --git a/fast64_internal/oot/exporter/scene/header.py b/fast64_internal/oot/exporter/scene/header.py index 4d7838ad7..72bc8d32f 100644 --- a/fast64_internal/oot/exporter/scene/header.py +++ b/fast64_internal/oot/exporter/scene/header.py @@ -69,10 +69,14 @@ def getC(self): return headerData + @dataclass class SceneAlternateHeader: """This class stores alternate header data for the scene""" - name: str childNight: Optional[SceneHeader] = field(init=False, default=None) adultDay: Optional[SceneHeader] = field(init=False, default=None) + name: str + + childNight: Optional[SceneHeader] = field(init=False, default=None) + adultDay: Optional[SceneHeader] = field(init=False, default=None) adultNight: Optional[SceneHeader] = field(init=False, default=None) cutscenes: list[SceneHeader] = field(init=False, default_factory=list) diff --git a/fast64_internal/oot/exporter/scene/rooms.py b/fast64_internal/oot/exporter/scene/rooms.py index 78defab7b..a9ff939fc 100644 --- a/fast64_internal/oot/exporter/scene/rooms.py +++ b/fast64_internal/oot/exporter/scene/rooms.py @@ -47,7 +47,8 @@ def new(name: str, sceneName: str, model: OOTModel, sceneObj: Object, transform: sceneName, saveTexturesAsPNG, ) -for i in range(min(roomDict.keys()), len(roomDict)): + + for i in range(min(roomDict.keys()), len(roomDict)): if i not in roomDict: raise PluginError(f"Room indices are not consecutive. Missing room index: {i}")