1#include "ObjectCollisionConvexHull.hh"
11 : m_points(points), m_initRadius(70.0f), m_worldPoints(points.size()), m_worldRadius(70.0f) {
12 ASSERT(points.size() < 0x100);
16ObjectCollisionConvexHull::~ObjectCollisionConvexHull() =
default;
20 if (scale.x != 1.0f) {
25 for (
size_t i = 0; i < m_points.size(); ++i) {
29 for (
size_t i = 0; i < m_points.size(); ++i) {
36void ObjectCollisionConvexHull::transform(
const EGG::Matrix34f &mat,
const EGG::Vector3f &scale,
37 const EGG::Vector3f &speed) {
38 m_translation = speed;
40 if (scale.x == 0.0f) {
41 for (
size_t i = 0; i < m_points.size(); ++i) {
42 m_worldPoints[i] = mat.ps_multVector(m_points[i]);
46 temp.makeS(EGG::Vector3f(scale.x, scale.x, scale.x));
47 temp = mat.multiplyTo(temp);
49 for (
size_t i = 0; i < m_points.size(); ++i) {
50 m_worldPoints[i] = temp.ps_multVector(m_points[i]);
56const EGG::Vector3f &ObjectCollisionConvexHull::getSupport(
const EGG::Vector3f &v)
const {
57 const EGG::Vector3f *result = &m_worldPoints[0];
58 f32 maxDot = v.dot(*result);
60 for (
size_t i = 1; i < m_worldPoints.size(); ++i) {
61 const auto &iter = m_worldPoints[i];
62 f32 iterDot = v.dot(iter);
64 if (maxDot < iterDot) {
80 ASSERT(count < 0x100);
82 m_worldRadius = 70.0f;
constexpr Vector3f ps_multVector(const Vector3f &vec) const
Paired-singles impl. of multVector.
constexpr Matrix34f multiplyTo(const Matrix34f &rhs) const
Multiplies two matrices.
ObjectCollisionConvexHull(const std::span< const EGG::Vector3f > &points)
Creates a convex hull with the provided points.
A contiguous storage container that manages the lifecycle of a buffer of a given size.