Files
Server_Monitor/code/physics/body.cpp
2023-09-26 19:40:16 +02:00

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;
}