diff options
| author | iamcheeseman <[hidden email]> | 2026-02-14 18:02:47 -0500 |
|---|---|---|
| committer | iamcheeseman <[hidden email]> | 2026-02-14 18:02:47 -0500 |
| commit | 93c27830060788dea1c364465d29e44d05a3064e (patch) | |
| tree | 4a8e1f6628026a4fb82c8a1c6084f2e35750cc28 /src/phys | |
| parent | 1ff729f696c895f81f0cf0d1b8a2cca1d6e43eb8 (diff) | |
Only process keys that are bound to an action
Diffstat (limited to 'src/phys')
| -rw-r--r-- | src/phys/body.odin | 1 | ||||
| -rw-r--r-- | src/phys/world.odin | 24 |
2 files changed, 25 insertions, 0 deletions
diff --git a/src/phys/body.odin b/src/phys/body.odin index 4793e42..ed8f6b5 100644 --- a/src/phys/body.odin +++ b/src/phys/body.odin @@ -49,6 +49,7 @@ Body :: struct { mask: Layer_Set, } +@(require_results) make_body :: proc( rect: Rect, layers := Layer_Set{.Hard}, 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 } |
