aboutsummaryrefslogtreecommitdiff
path: root/src/phys
diff options
context:
space:
mode:
authoriamcheeseman <[hidden email]>2026-02-14 18:02:47 -0500
committeriamcheeseman <[hidden email]>2026-02-14 18:02:47 -0500
commit93c27830060788dea1c364465d29e44d05a3064e (patch)
tree4a8e1f6628026a4fb82c8a1c6084f2e35750cc28 /src/phys
parent1ff729f696c895f81f0cf0d1b8a2cca1d6e43eb8 (diff)
Only process keys that are bound to an action
Diffstat (limited to 'src/phys')
-rw-r--r--src/phys/body.odin1
-rw-r--r--src/phys/world.odin24
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
}