diff options
Diffstat (limited to 'engine-ocean/Game/Components/CollisionComponents/CylinderCollider.cpp')
-rw-r--r-- | engine-ocean/Game/Components/CollisionComponents/CylinderCollider.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/engine-ocean/Game/Components/CollisionComponents/CylinderCollider.cpp b/engine-ocean/Game/Components/CollisionComponents/CylinderCollider.cpp new file mode 100644 index 0000000..3dfded9 --- /dev/null +++ b/engine-ocean/Game/Components/CollisionComponents/CylinderCollider.cpp @@ -0,0 +1,47 @@ +#include "cylindercollider.h" +#include "Game/Components/CollisionComponents/BoundingTriangle.h" +#include "Graphics/modeltransform.h" + +CylinderCollider::CylinderCollider(glm::vec3 initial_pos, glm::vec3 initial_scale){ + m_scale = initial_scale; + + m_cyl.point = glm::vec2(initial_pos.x, initial_pos.z); + m_cyl.radius = .5f * glm::max(initial_scale.x, initial_scale.z); + m_cyl.height = 1.f * abs(initial_scale.y); + m_cyl.min = initial_pos.y - (initial_scale.y/2.f); + m_cyl.max = initial_pos.y + (initial_scale.y/2.f); + + m_cyl.aabbDimensions = abs(glm::vec3(2*m_cyl.radius, m_cyl.height, 2*m_cyl.radius)); + m_cyl.aabbCenterPos = initial_pos; + + updateBounds(); +} + +void CylinderCollider::updateCollisionPos(glm::vec3 new_pos){ + m_cyl.point = glm::vec2(new_pos.x, new_pos.z); // x and z loc + m_cyl.radius = .5f * m_scale.x; // x and z dim + m_cyl.height = 1.f * m_scale.y; // y dimensions + m_cyl.min = new_pos.y - (m_scale.y/2.f); // y coord + m_cyl.max = new_pos.y + (m_scale.y/2.f); // y coord + m_cyl.aabbCenterPos = new_pos; + + updateBounds(); +} + + +void CylinderCollider::updateBounds(){ + Bounds3f bounds; + bounds.min = glm::vec3(m_cyl.aabbCenterPos-glm::vec3(m_cyl.aabbDimensions/2.f)); + bounds.max = glm::vec3(m_cyl.aabbCenterPos+glm::vec3(m_cyl.aabbDimensions/2.f)); + + m_cyl.bounds = bounds; +} + + +Cylinder CylinderCollider::getCylinder(){ + return m_cyl; +} + + + + |