#ifndef __DNAMP1_MREA_HPP__ #define __DNAMP1_MREA_HPP__ #include "../DNACommon/DNACommon.hpp" #include "CMDLMaterials.hpp" #include "CSKR.hpp" namespace DataSpec::DNAMP1 { struct MREA { struct Header : BigDNA { AT_DECL_DNA Value magic; Value version; Value localToWorldMtx[3]; Value meshCount; Value secCount; Value geomSecIdx; Value sclySecIdx; Value collisionSecIdx; Value unkSecIdx; Value lightSecIdx; Value visiSecIdx; Value pathSecIdx; Value arotSecIdx; Vector secSizes; }; struct MeshHeader : BigDNA { AT_DECL_DNA struct VisorFlags : BigDNA { AT_DECL_DNA Value flags; enum class ThermalLevel { Cool, Hot, Warm }; static const char* GetThermalLevelStr(ThermalLevel t) { switch (t) { case ThermalLevel::Cool: return "COOL"; case ThermalLevel::Hot: return "HOT"; case ThermalLevel::Warm: return "WARM"; default: break; } return nullptr; } bool disableEnviro() const {return flags >> 1 & 0x1;} void setDisableEnviro(bool v) {flags &= ~0x2; flags |= v << 1;} bool disableThermal() const {return flags >> 2 & 0x1;} void setDisableThermal(bool v) {flags &= ~0x4; flags |= v << 2;} bool disableXray() const {return flags >> 3 & 0x1;} void setDisableXray(bool v) {flags &= ~0x8; flags |= v << 3;} ThermalLevel thermalLevel() const {return ThermalLevel(flags >> 4 & 0x3);} void setThermalLevel(ThermalLevel v) {flags &= ~0x30; flags |= atUint32(v) << 4;} const char* thermalLevelStr() const {return GetThermalLevelStr(thermalLevel());} void setFromBlenderProps(const std::unordered_map& props); } visorFlags; Value xfMtx[3]; Value aabb[2]; }; struct BabeDeadLight : BigDNA { AT_DECL_DNA enum class LightType : atUint32 { LocalAmbient, Directional, Custom, Spot, Spot2, LocalAmbient2 }; enum class Falloff : atUint32 { Constant, Linear, Quadratic }; Value lightType; Value color; Value position; Value direction; Value q; Value spotCutoff; Value unk5; Value castShadows; Value unk7; Value falloff; Value unk9; }; static void ReadBabeDeadToBlender_1_2(hecl::blender::PyOutStream& os, athena::io::IStreamReader& rs); static void AddCMDLRigPairs(PAKEntryReadStream& rs, PAKRouter& pakRouter, std::unordered_map>& addTo); static UniqueID32 GetPATHId(PAKEntryReadStream& rs); static bool Extract(const SpecBase& dataSpec, PAKEntryReadStream& rs, const hecl::ProjectPath& outPath, PAKRouter& pakRouter, const PAK::Entry& entry, bool, hecl::blender::Token& btok, std::function); static void Name(const SpecBase& dataSpec, PAKEntryReadStream& rs, PAKRouter& pakRouter, PAK::Entry& entry); using ColMesh = hecl::blender::ColMesh; using Light = hecl::blender::Light; static bool Cook(const hecl::ProjectPath& outPath, const hecl::ProjectPath& inPath, const std::vector& meshes, const ColMesh& cMesh, const std::vector& lights, hecl::blender::Token& btok, const hecl::blender::Matrix4f* xf, bool pc); }; } #endif