]> git.localhorst.tv Git - blank.git/blobdiff - src/model/Instance.hpp
glm backwards compatibility
[blank.git] / src / model / Instance.hpp
index 6c073b8e2a08ceabd48880227fcebda5371a3be3..60e195087099fbfe8f28493d326a2680fdd3355a 100644 (file)
@@ -1,53 +1,42 @@
 #ifndef BLANK_MODEL_INSTANCE_HPP_
 #define BLANK_MODEL_INSTANCE_HPP_
 
+#include "Part.hpp"
+#include "../graphics/glm.hpp"
+
 #include <vector>
-#include <glm/glm.hpp>
 #include <glm/gtc/quaternion.hpp>
 
 
 namespace blank {
 
-class Model;
 class DirectionalLighting;
+class Model;
+class Part;
 
-// TODO: this doesn't have to be a tree, actually
-//       linearizing might be a good opportunity to optimize
 class Instance {
 
        friend class Model;
+       friend class Part;
 
 public:
        Instance();
+       ~Instance();
 
-       operator bool() const noexcept { return part_model; }
-       const Model &GetModel() const noexcept { return *part_model; }
-
-       const glm::vec3 &Position() const noexcept { return position; }
-       void Position(const glm::vec3 &p) noexcept { position = p; }
+       operator bool() const noexcept { return model; }
+       const Model &GetModel() const noexcept { return *model; }
 
-       const glm::quat &Orientation() const noexcept { return orientation; }
-       void Orientation(const glm::quat &o) noexcept { orientation = o; }
+       glm::mat4 BodyTransform() const noexcept;
+       Part::State &BodyState() noexcept;
 
-       glm::mat4 LocalTransform() const noexcept;
-       glm::mat4 GlobalTransform() const noexcept;
+       glm::mat4 EyesTransform() const noexcept;
+       Part::State &EyesState() noexcept;
 
-       void Render(const glm::mat4 &, DirectionalLighting &) const;
+       void Render(const glm::mat4 &, DirectionalLighting &);
 
 private:
-       Instance &AddPart();
-       bool HasParent() const noexcept { return parent; }
-       Instance &Parent() const noexcept { return *parent; }
-       bool IsRoot() const noexcept { return !HasParent(); }
-
-private:
-       const Model *part_model;
-       Instance *parent;
-
-       glm::vec3 position;
-       glm::quat orientation;
-
-       std::vector<Instance> parts;
+       const Model *model;
+       std::vector<Part::State> state;
 
 };