[ADDED] simple collision logic for entities

This commit is contained in:
Menno
2021-05-28 11:37:21 +02:00
parent 51cdc520e0
commit 28400fb320
6 changed files with 140 additions and 0 deletions

View File

@@ -0,0 +1,38 @@
#include "collision_entity.h"
namespace entities
{
CollisionEntity::CollisionEntity(const models::TexturedModel& model, const glm::vec3& position,
const glm::vec3& rotation, float scale, const collision::Box& bounding_box)
: Entity(model, position, rotation, scale),
bounding_box(bounding_box)
{
const glm::vec3& center = bounding_box.center_pos;
const glm::vec3& size = bounding_box.size;
min_xyz = glm::vec3(center.x - size.x, center.y - size.y, center.z - size.z);
max_xyz = glm::vec3(center.x + size.x, center.y + size.y, center.z + size.z);
}
void CollisionEntity::OnCollide(const collision::Collision& collision)
{
if (on_collide != nullptr)
{
on_collide(collision);
}
}
bool CollisionEntity::IsColliding(const glm::vec3& point) const
{
return (point.x >= min_xyz.x && point.x <= max_xyz.x) &&
(point.y >= min_xyz.y && point.y <= max_xyz.y) &&
(point.z >= min_xyz.z && point.z <= max_xyz.z);
}
bool CollisionEntity::IsColliding(const CollisionEntity& e) const
{
return (min_xyz.x <= e.max_xyz.x && max_xyz.x >= e.min_xyz.x) &&
(min_xyz.y <= e.max_xyz.y && max_xyz.y >= e.min_xyz.y) &&
(min_xyz.z <= e.max_xyz.z && max_xyz.z >= e.min_xyz.z);
}
}