57 lines
1.4 KiB
Odin
57 lines
1.4 KiB
Odin
package collision
|
|
|
|
import lg "core:math/linalg"
|
|
import "game:debug"
|
|
import rl "libs:raylib"
|
|
import "libs: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)
|
|
}
|
|
}
|
|
}
|