diff options
author | Griffin Smith <root@gws.fyi> | 2019-08-25T17·28-0400 |
---|---|---|
committer | Griffin Smith <root@gws.fyi> | 2019-08-25T17·28-0400 |
commit | d3f3890dc5408581eb6181125c871d1cf2c0e18f (patch) | |
tree | ed6d9e396e6c732b1bce27ea6962ce408b59f218 /src/Xanthous | |
parent | fb0d1b3e66251aa56a3df1d05fd4b82b33380a31 (diff) |
An @-sign in a box, in haskell
Initial commit of a Haskell version of Xanthous, written using Brick and built with Nix. This is so much nicer and so much easier
Diffstat (limited to 'src/Xanthous')
-rw-r--r-- | src/Xanthous/App.hs | 21 | ||||
-rw-r--r-- | src/Xanthous/Game.hs | 12 | ||||
-rw-r--r-- | src/Xanthous/Game/Draw.hs | 28 | ||||
-rw-r--r-- | src/Xanthous/Prelude.hs | 10 | ||||
-rw-r--r-- | src/Xanthous/Resource.hs | 11 |
5 files changed, 82 insertions, 0 deletions
diff --git a/src/Xanthous/App.hs b/src/Xanthous/App.hs new file mode 100644 index 000000000000..5c0383c38e19 --- /dev/null +++ b/src/Xanthous/App.hs @@ -0,0 +1,21 @@ +module Xanthous.App (makeApp) where + +import Xanthous.Prelude +import Brick hiding (App) +import qualified Brick +import Graphics.Vty.Attributes (defAttr) + +import Xanthous.Game +import Xanthous.Game.Draw (drawGame) +import Xanthous.Resource (Name) + +type App = Brick.App GameState () Name + +makeApp :: IO App +makeApp = pure $ Brick.App + { appDraw = drawGame + , appChooseCursor = const headMay + , appHandleEvent = resizeOrQuit + , appStartEvent = pure + , appAttrMap = const $ attrMap defAttr [] + } diff --git a/src/Xanthous/Game.hs b/src/Xanthous/Game.hs new file mode 100644 index 000000000000..c88509819cbb --- /dev/null +++ b/src/Xanthous/Game.hs @@ -0,0 +1,12 @@ +module Xanthous.Game + ( GameState(..) + , getInitialState + ) where + +import Xanthous.Prelude + +data GameState = GameState + { } + +getInitialState :: IO GameState +getInitialState = pure GameState diff --git a/src/Xanthous/Game/Draw.hs b/src/Xanthous/Game/Draw.hs new file mode 100644 index 000000000000..2d793ba27bd5 --- /dev/null +++ b/src/Xanthous/Game/Draw.hs @@ -0,0 +1,28 @@ +module Xanthous.Game.Draw + ( drawGame + ) where + +import Xanthous.Prelude +import Brick +import Brick.Widgets.Border +import Brick.Widgets.Border.Style + +import Xanthous.Game (GameState(..)) +import Xanthous.Resource (Name(..)) + +drawMessages :: GameState -> Widget Name +drawMessages _ = str "Welcome to Xanthous! It's dangerous out there, why not stay inside?" + +drawMap :: GameState -> Widget Name +drawMap _game + = viewport MapViewport Both + $ vBox mapRows + where + -- TODO + firstRow = [str "@"] <> replicate 79 (str " ") + mapRows = firstRow <> (replicate 20 . hBox . replicate 80 $ str " ") + +drawGame :: GameState -> [Widget Name] +drawGame game = pure . withBorderStyle unicode + $ drawMessages game + <=> border (drawMap game) diff --git a/src/Xanthous/Prelude.hs b/src/Xanthous/Prelude.hs new file mode 100644 index 000000000000..e75c11d7bb56 --- /dev/null +++ b/src/Xanthous/Prelude.hs @@ -0,0 +1,10 @@ +module Xanthous.Prelude + ( module ClassyPrelude + , Type + , Constraint + , module GHC.TypeLits + ) where + +import ClassyPrelude hiding (return) +import Data.Kind +import GHC.TypeLits hiding (Text) diff --git a/src/Xanthous/Resource.hs b/src/Xanthous/Resource.hs new file mode 100644 index 000000000000..2310a68cc26a --- /dev/null +++ b/src/Xanthous/Resource.hs @@ -0,0 +1,11 @@ +module Xanthous.Resource + ( Name(..) + ) where + +import Xanthous.Prelude + +data Name = MapViewport + -- ^ The main viewport where we display the game content + | MessageBox + -- ^ The box where we display messages to the user + deriving stock (Show, Eq, Ord) |