From 25b2c41355e0f98aff1c8b8c041345f3f9e66da6 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Wed, 19 Feb 2025 03:39:36 +0000 Subject: [PATCH] begin title screen by adding title screen type --- fcore/game-type.sml | 6 ++-- fcore/game-update.sml | 4 +++ fcore/level/level-update.sml | 6 ++-- fcore/title/title-type.sml | 17 +++++++++++ fcore/title/title-update.sml | 6 ++++ oms.mlb | 3 ++ shell/gl-draw.sml | 59 +++++++++++++++++++----------------- 7 files changed, 67 insertions(+), 34 deletions(-) create mode 100644 fcore/title/title-type.sml create mode 100644 fcore/title/title-update.sml diff --git a/fcore/game-type.sml b/fcore/game-type.sml index f6b22c2..de08858 100644 --- a/fcore/game-type.sml +++ b/fcore/game-type.sml @@ -1,6 +1,6 @@ signature GAME_TYPE = 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} @@ -9,12 +9,12 @@ end structure GameType :> GAME_TYPE = 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} fun init userKeys = - let val mode = LEVEL LevelType.initial + let val mode = TITLE TitleType.initial in {mode = mode, userKeys = userKeys} end end diff --git a/fcore/game-update.sml b/fcore/game-update.sml index f15b381..0391166 100644 --- a/fcore/game-update.sml +++ b/fcore/game-update.sml @@ -12,6 +12,10 @@ struct let val level = LevelUpdate.update (level, input) in LEVEL level end + | TITLE title => + let val title = TitleUpdate.update (title, input) + in TITLE title + end in {mode = mode, userKeys = userKeys} end diff --git a/fcore/level/level-update.sml b/fcore/level/level-update.sml index 51bf420..f02a5c3 100644 --- a/fcore/level/level-update.sml +++ b/fcore/level/level-update.sml @@ -1,6 +1,6 @@ structure LevelUpdate = struct - fun update (game, input) = + fun update (level, input) = let val { player @@ -11,9 +11,9 @@ struct , enemies , graph , fallingEnemies - } = game + } = level - val player = Player.runPhysicsAndInput (game, input) + val player = Player.runPhysicsAndInput (level, input) val enemyTree = Enemy.generateTree enemies val player = Player.checkEnemyCollisions (player, enemies, enemyTree) diff --git a/fcore/title/title-type.sml b/fcore/title/title-type.sml new file mode 100644 index 0000000..df2bfc3 --- /dev/null +++ b/fcore/title/title-type.sml @@ -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 diff --git a/fcore/title/title-update.sml b/fcore/title/title-update.sml new file mode 100644 index 0000000..ccf80d9 --- /dev/null +++ b/fcore/title/title-update.sml @@ -0,0 +1,6 @@ +structure TitleUpdate = +struct + open TitleType + + fun update (titleState, input) = titleState +end diff --git a/oms.mlb b/oms.mlb index 08edc14..69e7faa 100644 --- a/oms.mlb +++ b/oms.mlb @@ -52,6 +52,9 @@ fcore/level/player/player-attack.sml fcore/level/projectile.sml fcore/level/level-update.sml +fcore/title/title-type.sml +fcore/title/title-update.sml + fcore/game-type.sml fcore/game-update.sml diff --git a/shell/gl-draw.sml b/shell/gl-draw.sml index 1420000..f432b43 100644 --- a/shell/gl-draw.sml +++ b/shell/gl-draw.sml @@ -213,7 +213,7 @@ struct fun drawField ({fieldVertexBuffer, fieldProgram, fieldLength, ...}) = drawXyrgba (fieldVertexBuffer, fieldProgram, fieldLength) - fun drawLevel (shellState: t) = + fun helpDrawLevel (shellState: t) = let val _ = drawWall shellState val _ = drawPlayer shellState @@ -222,38 +222,41 @@ struct () end + fun drawLevel (shellState: t, 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 () = helpDrawLevel shellState + in + shellState + 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 + LEVEL level => drawLevel (shellState, level) + | TITLE title => shellState end fun helpLoop (shellState as {window, ...}: t, game) =