57 lines
1.4 KiB
Odin

package collision
import lg "core:math/linalg"
import "game:debug"
import rl "vendor:raylib"
import "vendor:raylib/rlgl"
debug_plane_verts := []Vec3{{-1, -1, 0}, {1, -1, 0}, {1, 1, 0}, {-1, 1, 0}}
debug_plane_indices := []u16{0, 1, 2, 2, 3, 0}
debug_plane_mesh := rl.Mesh {
vertices = cast([^]f32)&debug_plane_verts[0],
indices = &debug_plane_indices[0],
vertexCount = i32(len(debug_plane_verts)),
triangleCount = i32(len(debug_plane_indices)) / 3,
}
debug_draw_plane :: proc(center: Vec3, plane: Plane, color: rl.Color) {
assert(abs(signed_distance_plane(center, plane)) < 0.001, "point should be on a plane")
{
rlgl.Begin(rlgl.TRIANGLES)
defer rlgl.End()
debug.rlgl_color(color)
up := Vec3{0, 1, 0}
if lg.dot(up, plane.normal) > 1.0 - 0.0001 {
up = Vec3{1, 0, 0}
}
mat := rl.MatrixLookAt(0, plane.normal, up)
trans := rl.Matrix(1)
trans[3][0] = center.x
trans[3][1] = center.y
trans[3][2] = center.z
mat = mat * trans
debug.rlgl_transform_scope(mat)
for i in 0 ..< len(debug_plane_indices) / 3 {
i1, i2, i3 :=
debug_plane_indices[i * 3 + 0],
debug_plane_indices[i * 3 + 1],
debug_plane_indices[i * 3 + 2]
v1, v2, v3 := debug_plane_verts[i1], debug_plane_verts[i2], debug_plane_verts[i3]
debug.rlgl_vertex3v(v1)
debug.rlgl_vertex3v(v2)
debug.rlgl_vertex3v(v3)
debug.rlgl_vertex3v(v3)
debug.rlgl_vertex3v(v2)
debug.rlgl_vertex3v(v1)
}
}
}