#pragma once #include "BaseFactory.h" struct Light_tRaw { uint8_t col[3]; /* diffuse light value (rgba) */ int8_t pad1; uint8_t colc[3]; /* copy of diffuse light value (rgba) */ int8_t pad2; int8_t dir[3]; /* direction of light (normalized) */ int8_t pad3; }; union LightRaw { Light_tRaw l; long long int force_structure_alignment[2]; }; struct Ambient_tRaw { uint8_t col[3]; /* ambient light value (rgba) */ int8_t pad1; uint8_t colc[3]; /* copy of ambient light value (rgba) */ int8_t pad2; }; union AmbientRaw { Ambient_tRaw l; long long int force_structure_alignment[1]; }; struct Lights1Raw { AmbientRaw a; LightRaw l[1]; }; class LightsData : public IParsedData { public: Lights1Raw mLights; LightsData(Lights1Raw lights) : mLights(lights) {} }; class LightsHeaderExporter : public BaseExporter { void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; }; class LightsBinaryExporter : public BaseExporter { void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; }; class LightsCodeExporter : public BaseExporter { void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; }; class LightsFactory : public BaseFactory { public: std::optional> parse(std::vector& buffer, YAML::Node& data) override; std::optional> parse_modding(std::vector& buffer, YAML::Node& data) override { return std::nullopt; } inline std::unordered_map> GetExporters() override { return { REGISTER(Code, LightsCodeExporter) REGISTER(Header, LightsHeaderExporter) REGISTER(Binary, LightsBinaryExporter) }; } bool SupportModdedAssets() override { return false; } };