#pragma once #include #include #include #include #include "Runtime/Graphics/CCubeModel.hpp" #include "Runtime/RetroTypes.hpp" #include #include #include namespace metaforce { class CCubeSurface; class CMetroidModelInstance { u32 x0_visorFlags = 0; zeus::CTransform x4_worldXf; zeus::CAABox x34_worldAABB; const u8* x4c_materialData = nullptr; std::vector x50_surfaces; // was rstl::vector* std::vector> x60_positions; // was void* std::vector> x64_normals; // was void* std::vector x68_colors; // was void* std::vector> x6c_texCoords; // was void* std::vector> x70_packedTexCoords; // was void* public: CMetroidModelInstance() = default; CMetroidModelInstance(std::span modelHeader, const u8* materialData, std::span positions, std::span normals, std::span colors, std::span texCoords, std::span packedTexCoords, std::vector&& surfaces); [[nodiscard]] u32 GetFlags() const { return x0_visorFlags; } [[nodiscard]] const zeus::CAABox& GetBoundingBox() const { return x34_worldAABB; } [[nodiscard]] std::vector* GetSurfaces() { return &x50_surfaces; } [[nodiscard]] const std::vector* GetSurfaces() const { return &x50_surfaces; } [[nodiscard]] const u8* GetMaterialPointer() const { return x4c_materialData; } [[nodiscard]] std::span GetVertexPointer() const { return byte_span(x60_positions); } [[nodiscard]] std::span GetNormalPointer() const { return byte_span(x64_normals); } [[nodiscard]] std::span GetColorPointer() const { return byte_span(x68_colors); } [[nodiscard]] std::span GetTCPointer() const { return byte_span(x6c_texCoords); } [[nodiscard]] std::span GetPackedTCPointer() const { return byte_span(x70_packedTexCoords); } }; } // namespace metaforce