29 lines
739 B
C++
29 lines
739 B
C++
#include "body.h"
|
|
#include "../lib/geometry.h"
|
|
#include <assert.h>
|
|
|
|
Box phy_aabb_from_body(phy_body *body)
|
|
{
|
|
Box aabb;
|
|
switch(body->shape)
|
|
{
|
|
case PHY_SHAPE_SPHERE: {
|
|
aabb.min = body->position - body->sphere.radius * v3{1,1,1};
|
|
aabb.max = body->position + body->sphere.radius * v3{1,1,1};
|
|
} break;
|
|
case PHY_SHAPE_BOX: {
|
|
v3 box[8]; build_cube_vertices(box);
|
|
m3 rotoscale = M3(rotation_v3(body->rotation) * scale_v3(body->box.dimensions));
|
|
for(u32 i = 0; i < 8; i++)
|
|
box[i] = body->position + rotoscale * box[i];
|
|
|
|
aabb = box_from_point_cloud(box, 8);
|
|
} break;
|
|
case PHY_SHAPE_MESH: {
|
|
assert(false && "Yet to be implemented");
|
|
} break;
|
|
default: { assert(false && "Unknown shape"); }
|
|
}
|
|
return aabb;
|
|
}
|