diff options
| author | MegaMech <MegaMech@users.noreply.github.com> | 2024-03-31 20:45:23 -0600 |
|---|---|---|
| committer | Lywx <kiritodev01@gmail.com> | 2024-04-01 10:59:57 -0600 |
| commit | c319ece8b6346502da2c56f66739095340ac6ac0 (patch) | |
| tree | 2208ab4733ebe9defd46ae038e975201444ed4c2 | |
| parent | a9788a3954faf80d516af1bd8a0991d0520ab05c (diff) | |
Implement tables for LightsFactory
| -rw-r--r-- | src/factories/LightsFactory.cpp | 95 |
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; } |
