make enemies move per loop (calling update EnemyMap by calling EnemyBehaviour)

This commit is contained in:
2025-02-14 10:43:27 +00:00
parent 46a1836ae2
commit e00db5d8a3
3 changed files with 48 additions and 35 deletions

View File

@@ -1,16 +1,44 @@
structure Enemy =
struct
(* - Updating state of enemies per loop - *)
(*
structure UpdateEnemies = MakeGapMapMapper (struct
structure Pair = EnemyPair
type env = {walls: wall vector, wallTree: QuadTree.t, platforms: platform
vector, platformTree: QuadTree.t}
(enemy, walls, wallTree, platforms, platformTree, player, graph) =
end)
*)
structure UpdateEnemies =
MakeGapMapMapper
(struct
structure Pair = EnemyPair
type env =
{ walls: Wall.t vector
, wallTree: QuadTree.t
, platforms: Platform.t vector
, platformTree: QuadTree.t
, player: PlayerType.player
, graph: PlatSet.elem vector vector
}
type state = EnemyMap.t
fun map (enemy, env) =
let
val {walls, wallTree, platforms, platformTree, player, graph} = env
in
EnemyBehaviour.updateEnemyState
(enemy, walls, wallTree, platforms, platformTree, player, graph)
end
end)
fun update (enemies, walls, wallTree, platforms, platformTree, player, graph) =
let
val env =
{ walls = walls
, wallTree = wallTree
, platforms = platforms
, platformTree = platformTree
, player = player
, graph = graph
}
in
UpdateEnemies.map (enemies, env)
end
(* - Generating enemy tree - *)
structure EnemyTree =

View File

@@ -16,31 +16,16 @@ struct
val enemyTree = Enemy.generateTree enemies
val player = Player.runPhysicsAndInput (game, input, enemyTree)
val projectiles = #projectiles player
val projectileTree = Projectile.generateTree projectiles
val enemies = Enemy.update
(enemies, walls, wallTree, platforms, platformTree, player, graph)
(* update state of falling enemies and possibly filter *)
(* todo: use enemy map
val fallingEnemies = FallingEnemies.updateList
(Vector.length fallingEnemies - 1, fallingEnemies, player, [])
val (enemies, fallingEnemies) = Enemy.updateEnemyList
( Vector.length enemies - 1
, enemies
, projectiles
, projectileTree
, walls
, wallTree
, platforms
, platformTree
, player
, graph
, []
, fallingEnemies
)
val fallingEnemies = Vector.fromList fallingEnemies
*)
(* update state of falling enemies and possibly filter *)
(* todo: use enemy map
val fallingEnemies = FallingEnemies.updateList
(Vector.length fallingEnemies - 1, fallingEnemies, player, [])
val fallingEnemies = Vector.fromList fallingEnemies
*)
in
{ player = player
, walls = walls