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}")