From 2055ef234e1c9f9a596b56e4332440c4b2bb5036 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 21 Dec 2022 16:07:05 +0100 Subject: [PATCH] #9 Added level selection render --- README.md | 34 +++++-- assets/environment/overlay.png | Bin 0 -> 494 bytes assets/{unkown.png => unknown.png} | Bin levels/level2.txt | 8 +- levels/level3.txt | 4 +- levels/level4.txt | 134 ++++++++++++++++++++++++++++ levels/level_more_levels.txt | 138 +++++++++++++++++++++++++++++ lib/RPGEngine/Data.hs | 1 + lib/RPGEngine/Data/State.hs | 2 +- lib/RPGEngine/Input.hs | 9 +- lib/RPGEngine/Input/LvlSelect.hs | 12 +++ lib/RPGEngine/Render.hs | 42 ++++++--- lib/RPGEngine/Render/Core.hs | 19 +++- lib/RPGEngine/Render/LvlSelect.hs | 15 ++++ lib/RPGEngine/Render/Player.hs | 14 ++- rpg-engine.cabal | 3 + verslag.pdf | Bin 45716 -> 47917 bytes 17 files changed, 401 insertions(+), 34 deletions(-) create mode 100644 assets/environment/overlay.png rename assets/{unkown.png => unknown.png} (100%) create mode 100644 levels/level4.txt create mode 100644 levels/level_more_levels.txt create mode 100644 lib/RPGEngine/Input/LvlSelect.hs create mode 100644 lib/RPGEngine/Render/LvlSelect.hs diff --git a/README.md b/README.md index d173f3f..cc195df 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ TODO - An example playthrough, with pictures and explanations -\pagebreak +
\pagebreak
## Writing your own stages @@ -250,10 +250,22 @@ If we look at the example, all the objects are Entry = empty ConditionList + Action ('leave()') ``` -\pagebreak +
\pagebreak
## Development notes +### Engine architecture + +TODO + +#### Monads/Monad stack + +TODO + +### Tests + +TODO + ### Assets & dependencies The following assets were used (and modified if specified): @@ -268,6 +280,7 @@ The following assets were used (and modified if specified): RPG-Engine makes use of the following libraries: +- [directory](https://hackage.haskell.org/package/directory) for listing levels in a directory - [gloss](https://hackage.haskell.org/package/gloss) for game rendering - [gloss-juicy](https://hackage.haskell.org/package/gloss-juicy) for rendering images - [hspec](https://hackage.haskell.org/package/hspec) for testing @@ -278,12 +291,23 @@ RPG-Engine makes use of the following libraries: The following ideas could (or should) be implemented in the future of this project. -- [ ] Entity system: With en ES, you can implement moving entities and repeated input. It also resembles the typical +- [ ] **Entity system:** With en ES, you can implement moving entities and repeated input. It also resembles the typical game loop more closely which can make it easier to implement other ideas in the future. +- [ ] **Game music:** Ambient game music and sound effects can improve the gaming experience I think. +- [ ] **Expand configuration file:** Implement the same methods for parsing stage description files to a configuration file, + containing keybinds, dimension sizes, even window titles, making this a truly customizable engine. +- [ ] **Camera follows player:** The camera should follow the player, making it always center. This allows for larger levels + increases the immersion of the game. -- [ ] Game music: Ambient game music and sound effects can improve the gaming experience I think. +
\pagebreak
-\pagebreak +## Conclusion + +Parsing was way harder than I initially expected. About half of my time on this project was spent writing the parser. + +TODO + +
\pagebreak
## References diff --git a/assets/environment/overlay.png b/assets/environment/overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..b5d500db89f1d838bcfd00c03ec6ee645f4ca48e GIT binary patch literal 494 zcmVq5^NU#-bECLpy zjjzIgpsir5AP9;eV&xC;)ks+HB!L9cS!VCYnK_rcXTcTDXj!Xe3bHxdjLe37%h45| z`xOtpbTUa-OtXyX`S~#auCIHVRJ{wTUjN_wb9E$=mIh62!sD7@+QKpo;SJkRyd&JB zrDF-5~PEFpZvDX>lko1oO3WcIgjq~e<+FCIEP-^Y$qK7r;ZxXji4dC6(wQ}j|@^B;nD3(l|V zT6_;KwxRFQh?%j9)GXVj>+p64ol)q%h4$5IR<(0ZA7F7)e$fr=AHa~@_pbc_HOgor z9cee700009a7bBm000XU000XU0RWnu7ytkOBuPX;R5%f1R27!m%s>HPqChWL>!<+? k45MK%8U~=uF!1RB0A@D State -nextState Menu = Playing +nextState Menu = LvlSelect nextState Playing = Pause nextState Pause = Playing nextState _ = Menu diff --git a/lib/RPGEngine/Input.hs b/lib/RPGEngine/Input.hs index a737d05..2fae6bb 100644 --- a/lib/RPGEngine/Input.hs +++ b/lib/RPGEngine/Input.hs @@ -15,8 +15,9 @@ import Graphics.Gloss.Interface.IO.Game -- Handle all input for RPG-Engine handleAllInput :: InputHandler Game -handleAllInput ev g@Game{ state = Playing } = handlePlayInputs ev g -handleAllInput ev g = handleAnyKey setNextState ev g +handleAllInput ev g@Game{ state = Playing } = handlePlayInputs ev g +handleAllInput ev g@Game{ state = LvlSelect } = handleLvlSelectInput ev g +handleAllInput ev g = handleAnyKey setNextState ev g ---------------------------------------------------------------------- @@ -38,6 +39,10 @@ handlePlayInputs = composeInputHandlers [ handleKey (Char 'a') $ movePlayer West ] +-- Input for selection a level to load +handleLvlSelectInput :: InputHandler Game +handleLvlSelectInput = composeInputHandlers [] + -- Go to the next stage of the Game setNextState :: Game -> Game setNextState game = game{ state = newState } diff --git a/lib/RPGEngine/Input/LvlSelect.hs b/lib/RPGEngine/Input/LvlSelect.hs new file mode 100644 index 0000000..5b1bf35 --- /dev/null +++ b/lib/RPGEngine/Input/LvlSelect.hs @@ -0,0 +1,12 @@ +module RPGEngine.Input.LvlSelect +( getLvlList +) where + +import GHC.IO (unsafePerformIO) +import System.Directory (getDirectoryContents) + +lvlFolder :: FilePath +lvlFolder = "levels" + +getLvlList :: [FilePath] +getLvlList = unsafePerformIO $ getDirectoryContents lvlFolder \ No newline at end of file diff --git a/lib/RPGEngine/Render.hs b/lib/RPGEngine/Render.hs index 1468f77..09b9b66 100644 --- a/lib/RPGEngine/Render.hs +++ b/lib/RPGEngine/Render.hs @@ -9,14 +9,24 @@ module RPGEngine.Render import RPGEngine.Data ( State(..), - Game(..) ) -import RPGEngine.Render.Level + Game(..), Player (..) ) +import RPGEngine.Render.Level ( renderLevel ) - import Graphics.Gloss - ( white, pictures, text, Display(InWindow), Color, Picture ) -import RPGEngine.Render.Player (renderPlayer) + ( white, + pictures, + text, + Display(InWindow), + Color, + Picture, + scale, + translate ) +import RPGEngine.Render.Player (renderPlayer, focusPlayer) import RPGEngine.Render.GUI (renderGUI) +import Graphics.Gloss.Data.Picture (color) +import RPGEngine.Render.Core (overlay) +import RPGEngine.Input.LvlSelect (getLvlList) +import RPGEngine.Render.LvlSelect (renderLvlList) ----------------------------- Constants ------------------------------ @@ -32,11 +42,12 @@ initWindow = InWindow -- Render the game render :: Game -> Picture -render g@Game{ state = Menu } = renderMenu g -render g@Game{ state = Playing } = renderPlaying g -render g@Game{ state = Pause } = renderPause g -render g@Game{ state = Win } = renderWin g -render g@Game{ state = Lose } = renderLose g +render g@Game{ state = Menu } = renderMenu g +render g@Game{ state = LvlSelect } = renderLevelSelection g +render g@Game{ state = Playing } = renderPlaying g +render g@Game{ state = Pause } = renderPause g +render g@Game{ state = Win } = renderWin g +render g@Game{ state = Lose } = renderLose g ---------------------------------------------------------------------- @@ -44,6 +55,10 @@ render g@Game{ state = Lose } = renderLose g renderMenu :: Game -> Picture renderMenu _ = text "[Press any key to start]" +-- TODO +renderLevelSelection :: Game -> Picture +renderLevelSelection _ = renderLvlList getLvlList + renderPlaying :: Game -> Picture renderPlaying g@Game{ playing = lvl, player = player } = pictures [ renderLevel lvl, @@ -51,9 +66,12 @@ renderPlaying g@Game{ playing = lvl, player = player } = pictures [ renderGUI g ] --- TODO renderPause :: Game -> Picture -renderPause _ = text "[Press any key to continue]" +renderPause g = pictures [renderPlaying g, pause] + where pause = pictures [ + overlay, + color white $ scale 0.5 0.5 $ text "[Press any key to continue]" + ] -- TODO renderWin :: Game -> Picture diff --git a/lib/RPGEngine/Render/Core.hs b/lib/RPGEngine/Render/Core.hs index 0e51063..e5155f4 100644 --- a/lib/RPGEngine/Render/Core.hs +++ b/lib/RPGEngine/Render/Core.hs @@ -1,6 +1,6 @@ module RPGEngine.Render.Core where -import Graphics.Gloss ( Picture, translate ) +import Graphics.Gloss ( Picture, translate, pictures ) import GHC.IO (unsafePerformIO) import Graphics.Gloss.Juicy (loadJuicyPNG) import Data.Maybe (fromJust) @@ -21,7 +21,7 @@ assetsFolder :: FilePath assetsFolder = "assets/" unknownImage :: FilePath -unknownImage = "unkown.png" +unknownImage = "unknown.png" allEntities :: [(String, FilePath)] allEntities = [ @@ -32,6 +32,7 @@ allEntities = [ allEnvironment :: [(String, FilePath)] allEnvironment = [ ("void", "void.png"), + ("overlay", "overlay.png"), ("tile", "tile.png"), ("wall", "wall.png"), ("entrance", "entrance.png"), @@ -47,7 +48,7 @@ allItems = [ -- Map of all renders library :: [(String, Picture)] library = unknown:entities ++ environment ++ gui ++ items - where unknown = ("unkown", renderPNG (assetsFolder ++ unknownImage)) + where unknown = ("unknown", renderPNG (assetsFolder ++ unknownImage)) entities = map (\(f, s) -> (f, renderPNG (assetsFolder ++ "entities/" ++ s))) allEntities environment = map (\(f, s) -> (f, renderPNG (assetsFolder ++ "environment/" ++ s))) allEnvironment gui = [] @@ -71,4 +72,14 @@ getRender id = get filtered setRenderPos :: Int -> Int -> Picture -> Picture setRenderPos x y = translate floatX floatY where floatX = fromIntegral x * zoom * resolution - floatY = fromIntegral y * zoom * resolution \ No newline at end of file + floatY = fromIntegral y * zoom * resolution + +overlay :: Picture +overlay = setRenderPos offX offY $ pictures voids + where voids = [setRenderPos x y void | x <- [0 .. width], y <- [0 .. height]] + void = getRender "overlay" + intZoom = round zoom :: Int + height = round $ 4320 / resolution / zoom + width = round $ 7680 / resolution / zoom + offX = negate (width `div` 2) + offY = negate (height `div` 2) \ No newline at end of file diff --git a/lib/RPGEngine/Render/LvlSelect.hs b/lib/RPGEngine/Render/LvlSelect.hs new file mode 100644 index 0000000..b395e9d --- /dev/null +++ b/lib/RPGEngine/Render/LvlSelect.hs @@ -0,0 +1,15 @@ +module RPGEngine.Render.LvlSelect +( renderLvlList +) where + +import Graphics.Gloss ( Picture, pictures, translate, scale ) +import Graphics.Gloss.Data.Picture (blank, text) +import RPGEngine.Render.Core (resolution, zoom) + +-- Render all level names, under each other. +renderLvlList :: [FilePath] -> Picture +renderLvlList list = pictures $ map render entries + where entries = zip [0::Int .. ] list + render (i, path) = scale zoomed zoomed $ translate 0 (offset i) $ text path + zoomed = 0.1 * zoom + offset i = negate (2 * resolution * zoom * fromIntegral i) \ No newline at end of file diff --git a/lib/RPGEngine/Render/Player.hs b/lib/RPGEngine/Render/Player.hs index 7adb8b0..0b6a124 100644 --- a/lib/RPGEngine/Render/Player.hs +++ b/lib/RPGEngine/Render/Player.hs @@ -1,11 +1,17 @@ module RPGEngine.Render.Player ( renderPlayer +, focusPlayer ) where -import RPGEngine.Data (Player(..)) - +import RPGEngine.Data (Player(..), Game(..)) import Graphics.Gloss (Picture, text) -import RPGEngine.Render.Core (getRender, setRenderPos) +import RPGEngine.Render.Core (getRender, setRenderPos, zoom, resolution) +import Graphics.Gloss.Data.Picture (translate) renderPlayer :: Player -> Picture -renderPlayer Player{ position = (x, y) } = setRenderPos x y $ getRender "player" \ No newline at end of file +renderPlayer Player{ position = (x, y) } = setRenderPos x y $ getRender "player" + +focusPlayer :: Game -> Picture -> Picture +focusPlayer Game{ player = Player{ position = (x, y)}} = translate centerX centerY + where centerX = resolution * zoom * fromIntegral (negate x) + centerY = resolution * zoom * fromIntegral (negate y) \ No newline at end of file diff --git a/rpg-engine.cabal b/rpg-engine.cabal index d7c3090..9e11d89 100644 --- a/rpg-engine.cabal +++ b/rpg-engine.cabal @@ -8,6 +8,7 @@ library hs-source-dirs: lib build-depends: base >= 4.7 && <5, + directory >= 1.3.6.0, gloss >= 1.11 && < 1.14, gloss-juicy >= 0.2.3, parsec >= 3.1.15.1 exposed-modules: @@ -20,6 +21,7 @@ library RPGEngine.Input RPGEngine.Input.Core RPGEngine.Input.Level + RPGEngine.Input.LvlSelect RPGEngine.Input.Player RPGEngine.Parse @@ -31,6 +33,7 @@ library RPGEngine.Render.Core RPGEngine.Render.GUI RPGEngine.Render.Level + RPGEngine.Render.LvlSelect RPGEngine.Render.Player executable rpg-engine diff --git a/verslag.pdf b/verslag.pdf index f2dba5d218c4dc468da027f6e2816048b04d1230..24a6e81e610d8d2ab0dd84449bf2170ccd1ec824 100644 GIT binary patch delta 20463 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]rz2DC;fV;g?U+&ol8SI5_v4JBZcVQ@2f&; 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 Tuen1fD+z_t^7CsLYSR7>vKoPk delta 18270 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 R0&HxdP&5Dn!TjU~_!lAx;`{&r