X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmodel%2FPart.hpp;h=f71efc5425a1580a992ba1b857e38e8ef9797a44;hb=7e782291e0ce39eb2d4e8c1df28f682c313e6f8d;hp=029442bfabb5646f3dd22c45d5e45c3de80387a6;hpb=bc2806164f55b7ac48dbb6d224b7d4b55683decf;p=blank.git diff --git a/src/model/Part.hpp b/src/model/Part.hpp index 029442b..f71efc5 100644 --- a/src/model/Part.hpp +++ b/src/model/Part.hpp @@ -5,6 +5,7 @@ #include #include +#include #include #include #include @@ -14,35 +15,50 @@ namespace blank { class DirectionalLighting; class EntityMesh; +class Instance; class Model; +class Shape; +class ShapeRegistry; +class TextureIndex; +class TokenStreamReader; struct Part { - std::uint16_t id; - AABB bounds; +public: struct State { glm::vec3 position = glm::vec3(0.0f, 0.0f, 0.0f); glm::quat orientation = glm::quat(1.0f, 0.0f, 0.0f, 0.0f); - } initial; - const EntityMesh *mesh; + }; Part(); ~Part(); + void Read(TokenStreamReader &, TextureIndex &, const ShapeRegistry &); + Part &AddChild(); const std::list &Children() const noexcept { return children; } std::uint16_t Enumerate(std::uint16_t) noexcept; void Index(std::vector &) noexcept; - glm::mat4 LocalTransform(const std::vector &) const noexcept; - glm::mat4 GlobalTransform(const std::vector &) const noexcept; + glm::mat4 LocalTransform(const Instance &) const noexcept; + glm::mat4 GlobalTransform(const Instance &) const noexcept; - void Render(const glm::mat4 &, const std::vector &, DirectionalLighting &) const; + void Render( + const glm::mat4 &, + const Instance &, + DirectionalLighting &) const; private: const Part *parent; + const Shape *shape; std::list children; + std::vector tex_map; + mutable std::unique_ptr mesh; + State initial; + glm::vec3 hsl_mod; + glm::vec3 rgb_mod; + std::uint16_t id; };