begin title screen by adding title screen type

This commit is contained in:
2025-02-19 03:39:36 +00:00
parent 6b4b637624
commit 25b2c41355
7 changed files with 67 additions and 34 deletions

View File

@@ -1,6 +1,6 @@
signature GAME_TYPE = signature GAME_TYPE =
sig sig
datatype mode = LEVEL of LevelType.level_type datatype mode = LEVEL of LevelType.level_type | TITLE of TitleType.title_type
type game_type = {userKeys: CoreKey.user_key, mode: mode} type game_type = {userKeys: CoreKey.user_key, mode: mode}
@@ -9,12 +9,12 @@ end
structure GameType :> GAME_TYPE = structure GameType :> GAME_TYPE =
struct struct
datatype mode = LEVEL of LevelType.level_type datatype mode = LEVEL of LevelType.level_type | TITLE of TitleType.title_type
type game_type = {userKeys: CoreKey.user_key, mode: mode} type game_type = {userKeys: CoreKey.user_key, mode: mode}
fun init userKeys = fun init userKeys =
let val mode = LEVEL LevelType.initial let val mode = TITLE TitleType.initial
in {mode = mode, userKeys = userKeys} in {mode = mode, userKeys = userKeys}
end end
end end

View File

@@ -12,6 +12,10 @@ struct
let val level = LevelUpdate.update (level, input) let val level = LevelUpdate.update (level, input)
in LEVEL level in LEVEL level
end end
| TITLE title =>
let val title = TitleUpdate.update (title, input)
in TITLE title
end
in in
{mode = mode, userKeys = userKeys} {mode = mode, userKeys = userKeys}
end end

View File

@@ -1,6 +1,6 @@
structure LevelUpdate = structure LevelUpdate =
struct struct
fun update (game, input) = fun update (level, input) =
let let
val val
{ player { player
@@ -11,9 +11,9 @@ struct
, enemies , enemies
, graph , graph
, fallingEnemies , fallingEnemies
} = game } = level
val player = Player.runPhysicsAndInput (game, input) val player = Player.runPhysicsAndInput (level, input)
val enemyTree = Enemy.generateTree enemies val enemyTree = Enemy.generateTree enemies
val player = Player.checkEnemyCollisions (player, enemies, enemyTree) val player = Player.checkEnemyCollisions (player, enemies, enemyTree)

View File

@@ -0,0 +1,17 @@
signature TITLE_TYPE =
sig
datatype focus = START_BUTTON
type title_type = {focus: focus}
val initial: title_type
end
structure TitleType :> TITLE_TYPE =
struct
datatype focus = START_BUTTON
type title_type = {focus: focus}
val initial = {focus = START_BUTTON}
end

View File

@@ -0,0 +1,6 @@
structure TitleUpdate =
struct
open TitleType
fun update (titleState, input) = titleState
end

View File

@@ -52,6 +52,9 @@ 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/title/title-type.sml
fcore/title/title-update.sml
fcore/game-type.sml fcore/game-type.sml
fcore/game-update.sml fcore/game-update.sml

View File

@@ -213,7 +213,7 @@ struct
fun drawField ({fieldVertexBuffer, fieldProgram, fieldLength, ...}) = fun drawField ({fieldVertexBuffer, fieldProgram, fieldLength, ...}) =
drawXyrgba (fieldVertexBuffer, fieldProgram, fieldLength) drawXyrgba (fieldVertexBuffer, fieldProgram, fieldLength)
fun drawLevel (shellState: t) = fun helpDrawLevel (shellState: t) =
let let
val _ = drawWall shellState val _ = drawWall shellState
val _ = drawPlayer shellState val _ = drawPlayer shellState
@@ -222,12 +222,7 @@ struct
() ()
end end
fun drawMode (shellState: t, game: GameType.game_type) = fun drawLevel (shellState: t, level) =
let
open GameType
in
case #mode game of
LEVEL level =>
let let
val width = InputState.getWidth () val width = InputState.getWidth ()
val height = InputState.getHeight () val height = InputState.getHeight ()
@@ -250,10 +245,18 @@ struct
val shellState = uploadWall (shellState, wallVec) val shellState = uploadWall (shellState, wallVec)
val shellState = uploadPlayer (shellState, playerVec) val shellState = uploadPlayer (shellState, playerVec)
val shellState = uploadField (shellState, fieldVec) val shellState = uploadField (shellState, fieldVec)
val () = drawLevel shellState val () = helpDrawLevel shellState
in in
shellState shellState
end end
fun drawMode (shellState: t, game: GameType.game_type) =
let
open GameType
in
case #mode game of
LEVEL level => drawLevel (shellState, level)
| TITLE title => shellState
end end
fun helpLoop (shellState as {window, ...}: t, game) = fun helpLoop (shellState as {window, ...}: t, game) =