#include "Block.hpp"
#include "Chunk.hpp"
-#include "../model/Model.hpp"
+#include "../model/geometry.hpp"
+#include "../model/EntityModel.hpp"
+#include <string>
#include <glm/glm.hpp>
#include <glm/gtc/quaternion.hpp>
namespace blank {
-class Ray;
class Shape;
class Entity {
void SetShape(const Shape *, const glm::vec3 &color);
void SetShapeless() noexcept;
+ const std::string &Name() const noexcept { return name; }
+ void Name(const std::string &n) { name = n; }
+
+ const AABB &Bounds() const noexcept { return bounds; }
+ void Bounds(const AABB &b) noexcept { bounds = b; }
+
+ bool WorldCollidable() const noexcept { return world_collision; }
+ void WorldCollidable(bool b) noexcept { world_collision = b; }
+
const glm::vec3 &Velocity() const noexcept { return velocity; }
void Velocity(const glm::vec3 &) noexcept;
const Chunk::Pos ChunkCoords() const noexcept { return chunk; }
+ glm::vec3 AbsolutePosition() const noexcept {
+ return glm::vec3(chunk * Chunk::Extent()) + position;
+ }
+
const glm::quat &AngularVelocity() const noexcept { return angular_velocity; }
void AngularVelocity(const glm::quat &) noexcept;
glm::mat4 Transform(const Chunk::Pos &chunk_offset) const noexcept;
Ray Aim(const Chunk::Pos &chunk_offset) const noexcept;
+ void Remove() noexcept { remove = true; }
+ bool CanRemove() const noexcept { return remove; }
+
void Update(int dt) noexcept;
void Draw() noexcept;
private:
const Shape *shape;
- Model model;
+ EntityModel model;
+
+ std::string name;
+
+ AABB bounds;
glm::vec3 velocity;
Block::Pos position;
glm::quat angular_velocity;
glm::mat4 rotation;
+ bool world_collision;
+ bool remove;
+
};
}