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 = structure Enemy =
struct struct
(* - Updating state of enemies per loop - *) (* - Updating state of enemies per loop - *)
(* structure UpdateEnemies =
structure UpdateEnemies = MakeGapMapMapper (struct MakeGapMapMapper
structure Pair = EnemyPair (struct
structure Pair = EnemyPair
type env = {walls: wall vector, wallTree: QuadTree.t, platforms: platform type env =
vector, platformTree: QuadTree.t} { walls: Wall.t vector
, wallTree: QuadTree.t
, platforms: Platform.t vector
, platformTree: QuadTree.t
, player: PlayerType.player
, graph: PlatSet.elem vector vector
}
(enemy, walls, wallTree, platforms, platformTree, player, graph) = type state = EnemyMap.t
end)
*) 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 - *) (* - Generating enemy tree - *)
structure EnemyTree = structure EnemyTree =

View File

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

View File

@@ -33,7 +33,6 @@ fcore/enemy/enemy-pair.sml
fcore/enemy/enemy-map.sml fcore/enemy/enemy-map.sml
fcore/player/player-type.sml fcore/player/player-type.sml
fcore/enemy/enemy.sml
fcore/game-type.sml fcore/game-type.sml
fcore/player/player-patch.sml fcore/player/player-patch.sml
@@ -42,6 +41,7 @@ fcore/physics.sml
fcore/trace-jump.sml fcore/trace-jump.sml
fcore/enemy/enemy-behaviour.sml fcore/enemy/enemy-behaviour.sml
fcore/enemy/enemy.sml
fcore/enemy/falling-enemies.sml fcore/enemy/falling-enemies.sml
fcore/player/player.sml fcore/player/player.sml
fcore/projectile.sml fcore/projectile.sml