diff --git a/fcore/enemy/enemy.sml b/fcore/enemy/enemy.sml index 443cfae..130d243 100644 --- a/fcore/enemy/enemy.sml +++ b/fcore/enemy/enemy.sml @@ -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 = diff --git a/fcore/game-update.sml b/fcore/game-update.sml index c0eafa4..0a598db 100644 --- a/fcore/game-update.sml +++ b/fcore/game-update.sml @@ -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 diff --git a/oms.mlb b/oms.mlb index 76f0e43..4052ea1 100644 --- a/oms.mlb +++ b/oms.mlb @@ -33,7 +33,6 @@ fcore/enemy/enemy-pair.sml fcore/enemy/enemy-map.sml fcore/player/player-type.sml -fcore/enemy/enemy.sml fcore/game-type.sml fcore/player/player-patch.sml @@ -42,6 +41,7 @@ fcore/physics.sml fcore/trace-jump.sml fcore/enemy/enemy-behaviour.sml +fcore/enemy/enemy.sml fcore/enemy/falling-enemies.sml fcore/player/player.sml fcore/projectile.sml