From 6d39c17a119dae4ce5461f93982268e724ca90f6 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Thu, 20 Feb 2025 05:46:00 +0000 Subject: [PATCH] when play button is focused on title screen and either attack or jump button is pressed, start level --- fcore/frame-input-type.sml | 11 +++++++++++ fcore/game-update.sml | 15 +++------------ fcore/level/level-update.sml | 23 +++++++++++++---------- fcore/title/title-update.sml | 13 ++++++++++++- fcore/title/title-vec.sml | 35 ++++++++++++++++++++++------------- oms.mlb | 5 +++-- 6 files changed, 64 insertions(+), 38 deletions(-) create mode 100644 fcore/frame-input-type.sml diff --git a/fcore/frame-input-type.sml b/fcore/frame-input-type.sml new file mode 100644 index 0000000..0b32e49 --- /dev/null +++ b/fcore/frame-input-type.sml @@ -0,0 +1,11 @@ +structure FrameInputType = +struct + type t = + { leftHeld: bool + , rightHeld: bool + , upHeld: bool + , downHeld: bool + , attackHeld: bool + , jumpHeld: bool + } +end diff --git a/fcore/game-update.sml b/fcore/game-update.sml index 0391166..6ac0555 100644 --- a/fcore/game-update.sml +++ b/fcore/game-update.sml @@ -5,18 +5,9 @@ struct 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 - | TITLE title => - let val title = TitleUpdate.update (title, input) - in TITLE title - end in - {mode = mode, userKeys = userKeys} + case mode of + LEVEL level => LevelUpdate.update (level, input, userKeys) + | TITLE title => TitleUpdate.update (title, input, userKeys) end end diff --git a/fcore/level/level-update.sml b/fcore/level/level-update.sml index f02a5c3..a728db0 100644 --- a/fcore/level/level-update.sml +++ b/fcore/level/level-update.sml @@ -1,6 +1,6 @@ structure LevelUpdate = struct - fun update (level, input) = + fun update (level, input, userKeys) = let val { player @@ -30,15 +30,18 @@ struct (enemies, walls, wallTree, platforms, platformTree, player, graph) val fallingEnemies = FallingEnemies.update fallingEnemies + + val mode = + { player = player + , walls = walls + , wallTree = wallTree + , platforms = platforms + , platformTree = platformTree + , enemies = enemies + , graph = graph + , fallingEnemies = fallingEnemies + } in - { player = player - , walls = walls - , wallTree = wallTree - , platforms = platforms - , platformTree = platformTree - , enemies = enemies - , graph = graph - , fallingEnemies = fallingEnemies - } + {mode = GameType.LEVEL mode, userKeys = userKeys} end end diff --git a/fcore/title/title-update.sml b/fcore/title/title-update.sml index ccf80d9..7b4dc65 100644 --- a/fcore/title/title-update.sml +++ b/fcore/title/title-update.sml @@ -2,5 +2,16 @@ structure TitleUpdate = struct open TitleType - fun update (titleState, input) = titleState + fun update (titleState, input: FrameInputType.t, userKeys) = + case #focus titleState of + START_BUTTON => + let + val mode = + if #attackHeld input orelse #jumpHeld input then + GameType.LEVEL LevelType.initial + else + GameType.TITLE titleState + in + {mode = mode, userKeys = userKeys} + end end diff --git a/fcore/title/title-vec.sml b/fcore/title/title-vec.sml index 9b11ad6..86df033 100644 --- a/fcore/title/title-vec.sml +++ b/fcore/title/title-vec.sml @@ -3,7 +3,19 @@ struct open TitleType fun helpGetTextVec - (x, y, fontSize, fontSpace, windowWidth, windowHeight, pos, str, acc, r, g, b) = + ( x + , y + , fontSize + , fontSpace + , windowWidth + , windowHeight + , pos + , str + , acc + , r + , g + , b + ) = if pos = String.size str then Vector.concat acc else @@ -31,15 +43,12 @@ struct ) end - fun getTextWidth text = - String.size text * Constants.fontSpace + fun getTextWidth text = String.size text * Constants.fontSpace (* x coordinate that will let us place this text on centre of screen *) fun getTextCentreX text = - let - val textWidth = getTextWidth text - in - (Constants.worldWidth - textWidth) div 2 + let val textWidth = getTextWidth text + in (Constants.worldWidth - textWidth) div 2 end fun getTextVec (x, y, width, height, str, r, g, b) = @@ -66,7 +75,8 @@ struct val fontSpace = Real32.fromInt Constants.fontSpace * wratio val fontSpace = Real32.toInt IEEEReal.TO_NEAREST fontSpace in - helpGetTextVec (x, y, fontSize, fontSpace, width, height, 0, str, [], r, g, b) + helpGetTextVec + (x, y, fontSize, fontSpace, width, height, 0, str, [], r, g, b) end else let @@ -87,16 +97,15 @@ struct val fontSpace = Real32.fromInt Constants.fontSpace * hratio val fontSpace = Real32.toInt IEEEReal.TO_NEAREST fontSpace in - helpGetTextVec (x, y, fontSize, fontSpace, width, height, 0, str, [], r, g, b) + helpGetTextVec + (x, y, fontSize, fontSpace, width, height, 0, str, [], r, g, b) end end fun getDrawVec (title: TitleType.title_type, width, height) = case #focus title of START_BUTTON => - let - val playX = getTextCentreX "Play game" - in - getTextVec (playX, 500, width, height, "Play game", 0.0, 0.0, 0.0) + let val playX = getTextCentreX "Play game" + in getTextVec (playX, 500, width, height, "Play game", 0.0, 0.0, 0.0) end end diff --git a/oms.mlb b/oms.mlb index d2d2471..148c954 100644 --- a/oms.mlb +++ b/oms.mlb @@ -37,8 +37,11 @@ fcore/level/enemy/falling-enemy-pair.sml fcore/level/enemy/falling-enemy-map.sml fcore/core-key.sml +fcore/frame-input-type.sml fcore/level/player/player-type.sml fcore/level/level-type.sml +fcore/title/title-type.sml +fcore/game-type.sml fcore/level/player/player-patch.sml fcore/level/enemy/enemy-patch.sml @@ -53,11 +56,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/title/title-vec.sml -fcore/game-type.sml fcore/game-update.sml (* shell *)