done adding LevelType.level_type as a field of GameType.game_type, and having main loop go through GameUpdate.game_type -> LevelUpdate.update
This commit is contained in:
@@ -1,16 +1,20 @@
|
|||||||
signature GAME_TYPE =
|
signature GAME_TYPE =
|
||||||
sig
|
sig
|
||||||
datatype mode =
|
datatype mode = LEVEL of LevelType.level_type
|
||||||
LEVEL of LevelType.level_type
|
|
||||||
|
type game_type = {userKeys: CoreKey.user_key, mode: mode}
|
||||||
|
|
||||||
|
val init: CoreKey.user_key -> game_type
|
||||||
end
|
end
|
||||||
|
|
||||||
structure GameType :> GAME_TYPE =
|
structure GameType :> GAME_TYPE =
|
||||||
struct
|
struct
|
||||||
datatype mode =
|
datatype mode = LEVEL of LevelType.level_type
|
||||||
LEVEL of LevelType.level_type
|
|
||||||
|
|
||||||
type game_type = {
|
type game_type = {userKeys: CoreKey.user_key, mode: mode}
|
||||||
userKeys: CoreKey.user_key,
|
|
||||||
mode: mode
|
fun init userKeys =
|
||||||
}
|
let val mode = LEVEL LevelType.initial
|
||||||
|
in {mode = mode, userKeys = userKeys}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
structure GameUpdate =
|
||||||
|
struct
|
||||||
|
open GameType
|
||||||
|
|
||||||
|
fun update (game: GameType.game_type, input) =
|
||||||
|
let
|
||||||
|
val {mode, userKeys} = game
|
||||||
|
|
||||||
|
val mode =
|
||||||
|
case mode of
|
||||||
|
LEVEL level =>
|
||||||
|
let val level = LevelUpdate.update (level, input)
|
||||||
|
in LEVEL level
|
||||||
|
end
|
||||||
|
in
|
||||||
|
{mode = mode, userKeys = userKeys}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|||||||
@@ -9,10 +9,9 @@ sig
|
|||||||
, enemies: EnemyMap.t
|
, enemies: EnemyMap.t
|
||||||
, graph: PlatSet.elem vector vector
|
, graph: PlatSet.elem vector vector
|
||||||
, fallingEnemies: FallingEnemyMap.t
|
, fallingEnemies: FallingEnemyMap.t
|
||||||
, userKeys: CoreKey.user_key
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val initial: CoreKey.user_key -> level_type
|
val initial: level_type
|
||||||
end
|
end
|
||||||
|
|
||||||
structure LevelType :> LEVEL_TYPE =
|
structure LevelType :> LEVEL_TYPE =
|
||||||
@@ -26,7 +25,6 @@ struct
|
|||||||
, enemies: EnemyMap.t
|
, enemies: EnemyMap.t
|
||||||
, graph: PlatSet.elem vector vector
|
, graph: PlatSet.elem vector vector
|
||||||
, fallingEnemies: FallingEnemyMap.t
|
, fallingEnemies: FallingEnemyMap.t
|
||||||
, userKeys: CoreKey.user_key
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun enemyMapFromList (hd :: tl, map) =
|
fun enemyMapFromList (hd :: tl, map) =
|
||||||
@@ -35,7 +33,7 @@ struct
|
|||||||
end
|
end
|
||||||
| enemyMapFromList ([], map) = map
|
| enemyMapFromList ([], map) = map
|
||||||
|
|
||||||
fun initial userKeys =
|
val initial =
|
||||||
let
|
let
|
||||||
val player =
|
val player =
|
||||||
{ yAxis = EntityType.JUMPING 0
|
{ yAxis = EntityType.JUMPING 0
|
||||||
@@ -142,7 +140,6 @@ struct
|
|||||||
, enemies = enemies
|
, enemies = enemies
|
||||||
, graph = graph
|
, graph = graph
|
||||||
, fallingEnemies = FallingEnemyMap.empty
|
, fallingEnemies = FallingEnemyMap.empty
|
||||||
, userKeys = userKeys
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ struct
|
|||||||
, enemies
|
, enemies
|
||||||
, graph
|
, graph
|
||||||
, fallingEnemies
|
, fallingEnemies
|
||||||
, userKeys
|
|
||||||
} = game
|
} = game
|
||||||
|
|
||||||
val player = Player.runPhysicsAndInput (game, input)
|
val player = Player.runPhysicsAndInput (game, input)
|
||||||
@@ -40,7 +39,6 @@ struct
|
|||||||
, enemies = enemies
|
, enemies = enemies
|
||||||
, graph = graph
|
, graph = graph
|
||||||
, fallingEnemies = fallingEnemies
|
, fallingEnemies = fallingEnemies
|
||||||
, userKeys = userKeys
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -501,10 +501,7 @@ struct
|
|||||||
case attacked of
|
case attacked of
|
||||||
NOT_ATTACKED => (1.0, 1.0, 1.0)
|
NOT_ATTACKED => (1.0, 1.0, 1.0)
|
||||||
| ATTACKED amt =>
|
| ATTACKED amt =>
|
||||||
if amt mod 5 = 0 then
|
if amt mod 5 = 0 then (1.0, 1.0, 1.0) else (1.0, 0.75, 0.75)
|
||||||
(1.0, 1.0, 1.0)
|
|
||||||
else
|
|
||||||
(1.0, 0.75, 0.75)
|
|
||||||
in
|
in
|
||||||
PlayerSprite.lerp (x, y, realWidth, realHeight, width, height, r, g, b)
|
PlayerSprite.lerp (x, y, realWidth, realHeight, width, height, r, g, b)
|
||||||
end
|
end
|
||||||
|
|||||||
1
oms.mlb
1
oms.mlb
@@ -52,6 +52,7 @@ fcore/level/player/player-attack.sml
|
|||||||
fcore/level/projectile.sml
|
fcore/level/projectile.sml
|
||||||
fcore/level/level-update.sml
|
fcore/level/level-update.sml
|
||||||
|
|
||||||
|
fcore/game-type.sml
|
||||||
fcore/game-update.sml
|
fcore/game-update.sml
|
||||||
|
|
||||||
(* shell *)
|
(* shell *)
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ struct
|
|||||||
fun drawField ({fieldVertexBuffer, fieldProgram, fieldLength, ...}) =
|
fun drawField ({fieldVertexBuffer, fieldProgram, fieldLength, ...}) =
|
||||||
drawXyrgba (fieldVertexBuffer, fieldProgram, fieldLength)
|
drawXyrgba (fieldVertexBuffer, fieldProgram, fieldLength)
|
||||||
|
|
||||||
fun draw (shellState: t) =
|
fun drawLevel (shellState: t) =
|
||||||
let
|
let
|
||||||
val _ = drawWall shellState
|
val _ = drawWall shellState
|
||||||
val _ = drawPlayer shellState
|
val _ = drawPlayer shellState
|
||||||
@@ -222,6 +222,40 @@ struct
|
|||||||
()
|
()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
fun drawMode (shellState: t, game: GameType.game_type) =
|
||||||
|
let
|
||||||
|
open GameType
|
||||||
|
in
|
||||||
|
case #mode game of
|
||||||
|
LEVEL level =>
|
||||||
|
let
|
||||||
|
val width = InputState.getWidth ()
|
||||||
|
val height = InputState.getHeight ()
|
||||||
|
|
||||||
|
val playerVec = Player.getDrawVec (#player level, width, height)
|
||||||
|
val enemyVec = Enemy.getDrawVec (#enemies level, width, height)
|
||||||
|
val playerVec = Vector.concat [playerVec, enemyVec]
|
||||||
|
|
||||||
|
val wallVec = Wall.getDrawVec (#walls level, width, height)
|
||||||
|
val platVec = Platform.getDrawVec (#platforms level, width, height)
|
||||||
|
val chainVec = Player.getFieldVec (#player level, width, height)
|
||||||
|
val fallingVec = FallingEnemies.getDrawVec (level, width, height)
|
||||||
|
val wallVec = Vector.concat [wallVec, platVec, chainVec, fallingVec]
|
||||||
|
|
||||||
|
val pelletVec = Player.getPelletVec (#player level, width, height)
|
||||||
|
val projectileVec =
|
||||||
|
Projectile.getProjectileVec (#player level, width, height)
|
||||||
|
val fieldVec = Vector.concat [pelletVec, projectileVec]
|
||||||
|
|
||||||
|
val shellState = uploadWall (shellState, wallVec)
|
||||||
|
val shellState = uploadPlayer (shellState, playerVec)
|
||||||
|
val shellState = uploadField (shellState, fieldVec)
|
||||||
|
val () = drawLevel shellState
|
||||||
|
in
|
||||||
|
shellState
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
fun helpLoop (shellState as {window, ...}: t, game) =
|
fun helpLoop (shellState as {window, ...}: t, game) =
|
||||||
case Glfw.windowShouldClose window of
|
case Glfw.windowShouldClose window of
|
||||||
false =>
|
false =>
|
||||||
@@ -230,32 +264,9 @@ struct
|
|||||||
val _ = Gles3.clear ()
|
val _ = Gles3.clear ()
|
||||||
|
|
||||||
val input = InputState.getSnapshot ()
|
val input = InputState.getSnapshot ()
|
||||||
val width = InputState.getWidth ()
|
val game = GameUpdate.update (game, input)
|
||||||
val height = InputState.getHeight ()
|
|
||||||
|
|
||||||
val game = LevelUpdate.update (game, input)
|
val shellState = drawMode (shellState, game)
|
||||||
|
|
||||||
val playerVec = Player.getDrawVec (#player game, width, height)
|
|
||||||
val enemyVec = Enemy.getDrawVec (#enemies game, width, height)
|
|
||||||
val playerVec = Vector.concat [playerVec, enemyVec]
|
|
||||||
|
|
||||||
val wallVec = Wall.getDrawVec (#walls game, width, height)
|
|
||||||
val platVec = Platform.getDrawVec (#platforms game, width, height)
|
|
||||||
val chainVec = Player.getFieldVec (#player game, width, height)
|
|
||||||
val fallingVec = FallingEnemies.getDrawVec (game, width, height)
|
|
||||||
val wallVec = Vector.concat [wallVec, platVec, chainVec, fallingVec]
|
|
||||||
|
|
||||||
(* temp *)
|
|
||||||
val pelletVec = Player.getPelletVec (#player game, width, height)
|
|
||||||
val projectileVec =
|
|
||||||
Projectile.getProjectileVec (#player game, width, height)
|
|
||||||
val fieldVec = Vector.concat [pelletVec, projectileVec]
|
|
||||||
|
|
||||||
val shellState = uploadWall (shellState, wallVec)
|
|
||||||
val shellState = uploadPlayer (shellState, playerVec)
|
|
||||||
val shellState = uploadField (shellState, fieldVec)
|
|
||||||
|
|
||||||
val _ = draw shellState
|
|
||||||
|
|
||||||
val _ = Glfw.swapBuffers window
|
val _ = Glfw.swapBuffers window
|
||||||
val _ = Glfw.pollEvents ()
|
val _ = Glfw.pollEvents ()
|
||||||
@@ -281,6 +292,6 @@ struct
|
|||||||
|
|
||||||
val () = InputState.setControls controls
|
val () = InputState.setControls controls
|
||||||
in
|
in
|
||||||
helpLoop (shellState, LevelType.initial controls)
|
helpLoop (shellState, GameType.init controls)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user