From 1ff729f696c895f81f0cf0d1b8a2cca1d6e43eb8 Mon Sep 17 00:00:00 2001 From: iamcheeseman <[hidden email]> Date: Fri, 13 Feb 2026 20:42:28 -0500 Subject: simple raycasting mmmmmm --- src/phys/world.odin | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'src/phys/world.odin') diff --git a/src/phys/world.odin b/src/phys/world.odin index 5207622..b760f51 100644 --- a/src/phys/world.odin +++ b/src/phys/world.odin @@ -157,7 +157,40 @@ remove_body :: proc(h: Body_Handle) { world.bodies[h.idx] = {} } -get_colliding_bodies :: proc( +get_colliding_bodies :: proc{ + get_colliding_bodies_body_vs_body, + get_colliding_bodies_raycast_vs_body, +} + +get_colliding_bodies_raycast_vs_body :: proc( + rc: Raycast, + allocator := context.allocator +) -> []Body_Handle { + bodies := make([dynamic]Body_Handle, allocator) + + bin_list := get_surrounding_bins(rc.start) + + for bin in bin_list { + for b_h in bin { + b := _get_body(b_h) + + if b.layers & rc.mask == nil { + continue + } + + b_rect := b.rect + b_rect.start += b.pos + + if raycast_to_aabb(rc, b^) { + append(&bodies, b_h) + } + } + } + + return bodies[:] +} + +get_colliding_bodies_body_vs_body :: proc( h: Body_Handle, allocator := context.allocator ) -> []Body_Handle { @@ -178,6 +211,10 @@ get_colliding_bodies :: proc( c := _get_body(c_h) + if b.mask & c.layers == nil { + continue + } + c_rect := c.rect c_rect.start += c.pos -- cgit v1.3-2-g0d8e