diff options
Diffstat (limited to 'src/phys/world.odin')
| -rw-r--r-- | src/phys/world.odin | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/phys/world.odin b/src/phys/world.odin index b760f51..4a10590 100644 --- a/src/phys/world.odin +++ b/src/phys/world.odin @@ -107,6 +107,7 @@ _get_body :: proc(h: Body_Handle, location := #caller_location) -> ^Body { return &world.bodies[h.idx] } +@(require_results) iterate_bodies :: proc(it: ^int) -> (Body_Handle, bool) { for it^ < len(world.bodies) { if world.bodies[it^].handle.uses > 0 { @@ -157,11 +158,29 @@ remove_body :: proc(h: Body_Handle) { world.bodies[h.idx] = {} } +is_colliding :: proc{ + is_body_colliding, + is_raycast_colliding, +} + +@(require_results) +is_raycast_colliding :: proc(rc: Raycast) -> bool { + // TODO: TEMP + return len(get_colliding_bodies(rc, allocator = context.temp_allocator)) > 0 +} + +@(require_results) +is_body_colliding :: proc(h: Body_Handle) -> bool { + // TODO: TEMP + return len(get_colliding_bodies(h, allocator = context.temp_allocator)) > 0 +} + get_colliding_bodies :: proc{ get_colliding_bodies_body_vs_body, get_colliding_bodies_raycast_vs_body, } +@(require_results) get_colliding_bodies_raycast_vs_body :: proc( rc: Raycast, allocator := context.allocator @@ -190,6 +209,7 @@ get_colliding_bodies_raycast_vs_body :: proc( return bodies[:] } +@(require_results) get_colliding_bodies_body_vs_body :: proc( h: Body_Handle, allocator := context.allocator @@ -304,6 +324,7 @@ update_body :: proc(h: Body_Handle) { set_position(h, res_pos) } +@(require_results) get_velocity :: proc(h: Body_Handle) -> Vec2 { return _get_body(h).vel } @@ -312,6 +333,7 @@ set_velocity :: proc(h: Body_Handle, vel: Vec2) { _get_body(h).vel = vel } +@(require_results) get_position :: proc(h: Body_Handle) -> Vec2 { return _get_body(h).pos } @@ -331,10 +353,12 @@ set_position :: proc(h: Body_Handle, new_pos: Vec2) { } } +@(require_results) get_collisions :: proc(h: Body_Handle) -> bit_set[Collision_Type;u8] { return _get_body(h).collisions } +@(require_results) get_rect :: proc(h: Body_Handle) -> Rect { return _get_body(h).rect } |
