pass player record as argument for enemy filtering functiokns, so enemy can react to player state (position, etc.)

This commit is contained in:
2025-01-16 08:15:29 +00:00
parent 0c01b224d0
commit a05f211428
3 changed files with 60 additions and 12 deletions

View File

@@ -112,7 +112,8 @@ struct
end end
fun getVariantPatches (enemy, walls, wallTree, platforms, platformTree, acc) = fun getVariantPatches
(enemy, walls, wallTree, platforms, platformTree, player, acc) =
let let
open EnemyVariants open EnemyVariants
in in

View File

@@ -22,6 +22,7 @@ struct
, wallTree , wallTree
, platforms , platforms
, platformTree , platformTree
, player
) = ) =
let let
val {x, y, health, ...} = enemy val {x, y, health, ...} = enemy
@@ -51,7 +52,7 @@ struct
(* get patches specific to this type of enemy *) (* get patches specific to this type of enemy *)
val patches = EnemyBehaviour.getVariantPatches val patches = EnemyBehaviour.getVariantPatches
(enemy, walls, wallTree, platforms, platformTree, patches) (enemy, walls, wallTree, platforms, platformTree, player, patches)
val enemy = EnemyPatch.withPatches (enemy, patches) val enemy = EnemyPatch.withPatches (enemy, patches)
in in
@@ -69,7 +70,7 @@ struct
(* get patches specific to this type of enemy *) (* get patches specific to this type of enemy *)
val patches = EnemyBehaviour.getVariantPatches val patches = EnemyBehaviour.getVariantPatches
(enemy, walls, wallTree, platforms, platformTree, patches) (enemy, walls, wallTree, platforms, platformTree, player, patches)
val enemy = EnemyPatch.withPatches (enemy, patches) val enemy = EnemyPatch.withPatches (enemy, patches)
in in
@@ -87,6 +88,7 @@ struct
, wallTree , wallTree
, platforms , platforms
, platformTree , platformTree
, player
) = ) =
if pos < 0 then if pos < 0 then
Vector.fromList acc Vector.fromList acc
@@ -94,7 +96,15 @@ struct
let let
val enemy = Vector.sub (enemies, pos) val enemy = Vector.sub (enemies, pos)
val acc = onCollisionWithProjectile val acc = onCollisionWithProjectile
(enemy, projectileTree, acc, walls, wallTree, platforms, platformTree) ( enemy
, projectileTree
, acc
, walls
, wallTree
, platforms
, platformTree
, player
)
in in
filterProjectileCollisions filterProjectileCollisions
( pos - 1 ( pos - 1
@@ -105,6 +115,7 @@ struct
, wallTree , wallTree
, platforms , platforms
, platformTree , platformTree
, player
) )
end end
@@ -121,6 +132,7 @@ struct
, wallTree , wallTree
, platforms , platforms
, platformTree , platformTree
, player
) = ) =
if pos < 0 then if pos < 0 then
Vector.fromList acc Vector.fromList acc
@@ -139,6 +151,7 @@ struct
, wallTree , wallTree
, platforms , platforms
, platformTree , platformTree
, player
) )
in in
filterWhenAttacked filterWhenAttacked
@@ -151,6 +164,7 @@ struct
, wallTree , wallTree
, platforms , platforms
, platformTree , platformTree
, player
) )
end end

View File

@@ -3,8 +3,16 @@ struct
open GameType open GameType
open PlayerPatch open PlayerPatch
fun checkCollisions (player, enemies, enemyTree, projectiles, walls, wallTree, fun checkCollisions
platforms, platformTree) = ( player
, enemies
, enemyTree
, projectiles
, walls
, wallTree
, platforms
, platformTree
) =
let let
val {x, y, mainAttack, attacked, ...} = player val {x, y, mainAttack, attacked, ...} = player
val size = Constants.playerSize val size = Constants.playerSize
@@ -26,6 +34,7 @@ struct
, wallTree , wallTree
, platforms , platforms
, platformTree , platformTree
, player
) )
(* add collided enemies to player record, (* add collided enemies to player record,
@@ -46,8 +55,16 @@ struct
(player, enemies, enemyCollisions, []) (player, enemies, enemyCollisions, [])
val enemies = Enemy.filterProjectileCollisions val enemies = Enemy.filterProjectileCollisions
(Vector.length enemies - 1, enemies, projectileTree, [], ( Vector.length enemies - 1
walls, wallTree, platforms, platformTree) , enemies
, projectileTree
, []
, walls
, wallTree
, platforms
, platformTree
, player
)
in in
(player, enemies) (player, enemies)
end end
@@ -63,8 +80,16 @@ struct
(player, enemies, enemyCollisions) (player, enemies, enemyCollisions)
val enemies = Enemy.filterProjectileCollisions val enemies = Enemy.filterProjectileCollisions
(Vector.length enemies - 1, enemies, projectileTree, [], ( Vector.length enemies - 1
walls, wallTree, platforms, platformTree) , enemies
, projectileTree
, []
, walls
, wallTree
, platforms
, platformTree
, player
)
in in
(player, enemies) (player, enemies)
end end
@@ -75,8 +100,16 @@ struct
let let
val player = Player.incrementAttacked (player, amt) val player = Player.incrementAttacked (player, amt)
val enemies = Enemy.filterProjectileCollisions val enemies = Enemy.filterProjectileCollisions
(Vector.length enemies - 1, enemies, projectileTree, [], ( Vector.length enemies - 1
walls, wallTree, platforms, platformTree) , enemies
, projectileTree
, []
, walls
, wallTree
, platforms
, platformTree
, player
)
in in
(player, enemies) (player, enemies)
end) end)