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