summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2024-03-31 20:45:23 -0600
committerLywx <kiritodev01@gmail.com>2024-04-01 10:59:57 -0600
commitc319ece8b6346502da2c56f66739095340ac6ac0 (patch)
tree2208ab4733ebe9defd46ae038e975201444ed4c2
parenta9788a3954faf80d516af1bd8a0991d0520ab05c (diff)
Implement tables for LightsFactory
-rw-r--r--src/factories/LightsFactory.cpp95
1 files changed, 75 insertions, 20 deletions
diff --git a/src/factories/LightsFactory.cpp b/src/factories/LightsFactory.cpp
index b1cd91e..beaacd2 100644
--- a/src/factories/LightsFactory.cpp
+++ b/src/factories/LightsFactory.cpp
@@ -12,39 +12,94 @@ ExportResult LightsHeaderExporter::Export(std::ostream &write, std::shared_ptr<I
return std::nullopt;
}
- write << "extern Lights1 " << symbol << ";\n";
+ const auto offset = GetSafeNode<uint32_t>(node, "offset");
+ const auto searchTable = Companion::Instance->SearchTable(offset);
+
+ if(searchTable.has_value()){
+ const auto [name, start, end, mode] = searchTable.value();
+
+ if(start != offset){
+ return std::nullopt;
+ }
+
+ write << "extern Lights1" << name << "[];\n";
+ } else {
+ write << "extern Lights1 " << symbol << ";\n";
+ }
return std::nullopt;
}
ExportResult LightsCodeExporter::Export(std::ostream &write, std::shared_ptr<IParsedData> raw, std::string& entryName, YAML::Node &node, std::string* replacement ) {
auto light = std::static_pointer_cast<LightsData>(raw)->mLights;
auto symbol = GetSafeNode(node, "symbol", entryName);
+ const auto offset = GetSafeNode<uint32_t>(node, "offset");
+ const auto searchTable = Companion::Instance->SearchTable(offset);
- write << "Lights1 " << symbol << " = gdSPDefLights1(\n";
+ if(searchTable.has_value()){
+ const auto [name, start, end, mode] = searchTable.value();
+
- // Ambient
- auto r = (int16_t) light.a.l.col[0];
- auto g = (int16_t) light.a.l.col[1];
- auto b = (int16_t) light.a.l.col[2];
+ if(start == offset){
+ write << "Lights1 " << name << "[] = {\n";
+ }
- // Diffuse
- auto r2 = (int16_t) light.l[0].l.col[0];
- auto g2 = (int16_t) light.l[0].l.col[1];
- auto b2 = (int16_t) light.l[0].l.col[2];
+ // Ambient
+ auto r = (int16_t) light.a.l.col[0];
+ auto g = (int16_t) light.a.l.col[1];
+ auto b = (int16_t) light.a.l.col[2];
- // Direction
- auto x = (int16_t) light.l[0].l.dir[0];
- auto y = (int16_t) light.l[0].l.dir[1];
- auto z = (int16_t) light.l[0].l.dir[2];
+ // Diffuse
+ auto r2 = (int16_t) light.l[0].l.col[0];
+ auto g2 = (int16_t) light.l[0].l.col[1];
+ auto b2 = (int16_t) light.l[0].l.col[2];
+
+ // Direction
+ auto x = (int16_t) light.l[0].l.dir[0];
+ auto y = (int16_t) light.l[0].l.dir[1];
+ auto z = (int16_t) light.l[0].l.dir[2];
+
+ SPDLOG_INFO("Read light: {:X} {:X} {:X} {:X} {:X}", r, g, b, r2, g2);
+
+ write << fourSpaceTab << "gdSPDefLights1(\n";
- SPDLOG_INFO("Read light: {:X} {:X} {:X} {:X} {:X}", r, g, b, r2, g2);
+ write << fourSpaceTab;
+ write << r << ", " << g << ", " << b << ",\n";
+ write << fourSpaceTab;
+ write << r2 << ", " << g2 << ", " << b2 << ", " << x << ", " << y << ", " << z << "\n";
- write << fourSpaceTab;
- write << r << ", " << g << ", " << b << ",\n";
- write << fourSpaceTab;
- write << r2 << ", " << g2 << ", " << b2 << ", " << x << ", " << y << ", " << z << "\n";
+ write << fourSpaceTab << "),\n";
- write << ");\n\n";
+ if (end == offset) {
+ write << "};\n\n";
+ }
+
+ } else {
+ write << "Lights1 " << symbol << " = gdSPDefLights1(\n";
+
+ // Ambient
+ auto r = (int16_t) light.a.l.col[0];
+ auto g = (int16_t) light.a.l.col[1];
+ auto b = (int16_t) light.a.l.col[2];
+
+ // Diffuse
+ auto r2 = (int16_t) light.l[0].l.col[0];
+ auto g2 = (int16_t) light.l[0].l.col[1];
+ auto b2 = (int16_t) light.l[0].l.col[2];
+
+ // Direction
+ auto x = (int16_t) light.l[0].l.dir[0];
+ auto y = (int16_t) light.l[0].l.dir[1];
+ auto z = (int16_t) light.l[0].l.dir[2];
+
+ SPDLOG_INFO("Read light: {:X} {:X} {:X} {:X} {:X}", r, g, b, r2, g2);
+
+ write << fourSpaceTab;
+ write << r << ", " << g << ", " << b << ",\n";
+ write << fourSpaceTab;
+ write << r2 << ", " << g2 << ", " << b2 << ", " << x << ", " << y << ", " << z << "\n";
+
+ write << ");\n\n";
+ }
return std::nullopt;
}