#ifndef _DNAMP1_DEAFBABE_HPP_ #define _DNAMP1_DEAFBABE_HPP_ #include "../DNACommon/DeafBabe.hpp" namespace Retro { namespace DNAMP1 { struct DeafBabe : BigDNA { DECL_DNA enum class BspNodeType : atUint32 { Invalid, Branch, Leaf }; struct Material : BigDNA { DECL_DNA Value<atUint32> material; bool fireThrough() const {return material >> 18 & 0x1;} void setFireThrough(bool v) {material &= ~0x40000; material |= v << 18;} enum class Type { Mat0, MatGround, Mat2, MatStone, MatHardStone, MatMetal, Mat6, Mat7, Mat8, MatLeaves }; Type type() const {return Type(material & 0xff);} void setType(Type t) {material &= ~0xff; material |= atUint32(t);} }; struct Edge : BigDNA { DECL_DNA Value<atUint16> verts[2]; atUint16 findCommon(const Edge& other) const { if (verts[0] == other.verts[0] || verts[0] == other.verts[1]) return verts[0]; if (verts[1] == other.verts[0] || verts[1] == other.verts[1]) return verts[1]; return -1; } }; struct Triangle : BigDNA { DECL_DNA Value<atUint16> edges[3]; }; Value<atUint32> unk1; Value<atUint32> length; Value<atUint32> magic; Value<atUint32> version; Value<atVec3f> aabb[2]; Value<BspNodeType> rootNodeType; Value<atUint32> bspSize; Buffer<DNA_COUNT(bspSize)> bspTree; Value<atUint32> materialCount; Vector<Material, DNA_COUNT(materialCount)> materials; Value<atUint32> vertMatsCount; Vector<atUint8, DNA_COUNT(vertMatsCount)> vertMats; Value<atUint32> edgeMatsCount; Vector<atUint8, DNA_COUNT(edgeMatsCount)> edgeMats; Value<atUint32> triMatsCount; Vector<atUint8, DNA_COUNT(triMatsCount)> triMats; Value<atUint32> edgeVertsCount; Vector<Edge, DNA_COUNT(edgeVertsCount)> edgeVertConnections; Value<atUint32> triangleEdgesCount; Vector<Triangle, DNA_COUNT(triangleEdgesCount / 3)> triangleEdgeConnections; Value<atUint32> vertCount; Vector<atVec3f, DNA_COUNT(vertCount)> verts; /* Dummy MP2 member */ void insertNoClimb(HECL::BlenderConnection::PyOutStream&) const {} static void BlenderInit(HECL::BlenderConnection::PyOutStream& os); void sendToBlender(HECL::BlenderConnection::PyOutStream& os) const { DeafBabeSendToBlender(os, *this); } }; } } #endif // _DNAMP1_DEAFBABE_HPP_