aboutsummaryrefslogtreecommitdiff
path: root/src/phys/world.odin
diff options
context:
space:
mode:
Diffstat (limited to 'src/phys/world.odin')
-rw-r--r--src/phys/world.odin24
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
}