From 1c105193e20558c8814c3ddab7697a785518d2e0 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Sat, 8 Feb 2025 08:39:04 +0000 Subject: [PATCH] extract a couple of collision functions to a separate module for reuse --- fcore/collision.sml | 15 +++++++++++++++ fcore/enemy/enemy-behaviour.sml | 28 ++++++++++------------------ oms.mlb | 1 + 3 files changed, 26 insertions(+), 18 deletions(-) create mode 100644 fcore/collision.sml diff --git a/fcore/collision.sml b/fcore/collision.sml new file mode 100644 index 0000000..204546c --- /dev/null +++ b/fcore/collision.sml @@ -0,0 +1,15 @@ +structure Collision = +struct + fun isColliding (ix, iy, ifx, ify, cx, cy, cfx, cfy) = + ix < cfx andalso ifx > cx andalso iy < cfy andalso ify > cy + + fun isCollidingPlus (ix, iy, iw, ih, cx, cy, cw, ch) = + let + val ifx = ix + iw + val ify = iy + ih + val cfx = cx + cw + val cfy = cy + ch + in + isColliding (ix, iy, ifx, ify, cx, cy, cfx, cfy) + end +end diff --git a/fcore/enemy/enemy-behaviour.sml b/fcore/enemy/enemy-behaviour.sml index f49cba3..e348277 100644 --- a/fcore/enemy/enemy-behaviour.sml +++ b/fcore/enemy/enemy-behaviour.sml @@ -1,20 +1,6 @@ structure EnemyBehaviour = struct open GameType - - fun isColliding (ix, iy, ifx, ify, cx, cy, cfx, cfy) = - ix < cfx andalso ifx > cx andalso iy < cfy andalso ify > cy - - fun isCollidingPlus (ix, iy, iw, ih, cx, cy, cw, ch) = - let - val ifx = ix + iw - val ify = iy + ih - val cfx = cx + cw - val cfy = cy + ch - in - isColliding (ix, iy, ifx, ify, cx, cy, cfx, cfy) - end - (* if player is attacking, does enemy collide with attack? *) fun isCollidingWithPlayerAttack (player: player, enemy: enemy) = let @@ -28,12 +14,18 @@ struct MAIN_ATTACKING {length, ...} => (case facing of FACING_RIGHT => - let val px = px + pSize - in isCollidingPlus (px, py, length, pSize, ex, ey, eSize, eSize) + let + val px = px + pSize + in + Collision.isCollidingPlus + (px, py, length, pSize, ex, ey, eSize, eSize) end | FACING_LEFT => - let val px = px - length - in isCollidingPlus (px, py, length, pSize, ex, ey, eSize, eSize) + let + val px = px - length + in + Collision.isCollidingPlus + (px, py, length, pSize, ex, ey, eSize, eSize) end) | _ => false end diff --git a/oms.mlb b/oms.mlb index 4322209..5857ff3 100644 --- a/oms.mlb +++ b/oms.mlb @@ -2,6 +2,7 @@ $(SML_LIB)/basis/basis.mlb (* fcore *) fcore/constants.sml +fcore/collision.sml fcore/quad-tree-type.sml fcore/quad-tree-fold.sml