I forgot to push this
This commit is contained in:
parent
e2d1bf9042
commit
2ff4f61722
2 changed files with 119 additions and 0 deletions
19
src/Menu.hs
Normal file
19
src/Menu.hs
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
module Menu where
|
||||||
|
|
||||||
|
import Affection
|
||||||
|
import qualified SDL
|
||||||
|
|
||||||
|
import Debug.Trace
|
||||||
|
|
||||||
|
import Types
|
||||||
|
|
||||||
|
handleMenuEvent :: Double -> SDL.Event -> Affection UserData ()
|
||||||
|
handleMenuEvent sec e = do
|
||||||
|
ad <- get
|
||||||
|
case SDL.eventPayload e of
|
||||||
|
SDL.WindowClosedEvent _ -> do
|
||||||
|
traceM "seeya!"
|
||||||
|
put ad
|
||||||
|
{ quitEvent = True
|
||||||
|
}
|
||||||
|
_ -> return ()
|
100
src/StateMachine.hs
Normal file
100
src/StateMachine.hs
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
||||||
|
|
||||||
|
module StateMachine where
|
||||||
|
|
||||||
|
import Affection
|
||||||
|
import qualified SDL
|
||||||
|
import GEGL
|
||||||
|
|
||||||
|
import qualified Data.Map as M
|
||||||
|
import Data.Maybe (catMaybes)
|
||||||
|
|
||||||
|
import Control.Monad (foldM, when)
|
||||||
|
|
||||||
|
import System.Random (randomRIO)
|
||||||
|
|
||||||
|
import Types
|
||||||
|
import Commons
|
||||||
|
import InGame
|
||||||
|
|
||||||
|
class StateMachine a us where
|
||||||
|
smLoad :: a -> Affection us ()
|
||||||
|
smUpdate :: a -> Double -> Affection us ()
|
||||||
|
smEvent :: a -> Double -> SDL.Event -> Affection us ()
|
||||||
|
smDraw :: a -> Affection us ()
|
||||||
|
smClean :: a -> Affection us ()
|
||||||
|
|
||||||
|
instance StateMachine State UserData where
|
||||||
|
smLoad Menu = do
|
||||||
|
ud <- getAffection
|
||||||
|
liftIO $ gegl_node_link
|
||||||
|
(nodeGraph ud M.! KeyMenuOver)
|
||||||
|
(nodeGraph ud M.! KeyFGNop)
|
||||||
|
hs <- liftIO $ catMaybes <$> foldM (\acc _ -> do
|
||||||
|
px <- randomRIO (0, 800)
|
||||||
|
py <- randomRIO (0, 600)
|
||||||
|
insertHaskelloid acc Nothing (px, py)
|
||||||
|
) [] ([0..9] :: [Int])
|
||||||
|
liftIO $ gegl_node_link_many $ map hFlange hs
|
||||||
|
liftIO $ gegl_node_link (last $ map hFlange hs) (nodeGraph ud M.! KeyHNop)
|
||||||
|
putAffection ud
|
||||||
|
{ haskelloids = hs
|
||||||
|
, fade = FadeIn 1
|
||||||
|
, state = Menu
|
||||||
|
}
|
||||||
|
|
||||||
|
smLoad InGame = loadGame
|
||||||
|
|
||||||
|
smUpdate Menu sec = do
|
||||||
|
ud <- getAffection
|
||||||
|
nhs <- mapM (updateHaskelloid sec) (haskelloids ud)
|
||||||
|
case fade ud of
|
||||||
|
FadeIn ttl -> do
|
||||||
|
liftIO $ gegl_node_set (nodeGraph ud M.! KeyMenuText) $
|
||||||
|
Operation "gegl:text"
|
||||||
|
[ Property "color" $ PropertyColor $ GEGL.RGBA 1 1 1 (1.1 - ttl)
|
||||||
|
]
|
||||||
|
putAffection ud
|
||||||
|
{ fade = if (ttl - sec) > 0 then FadeIn (ttl - sec) else FadeOut 1
|
||||||
|
, haskelloids = nhs
|
||||||
|
}
|
||||||
|
FadeOut ttl -> do
|
||||||
|
liftIO $ gegl_node_set (nodeGraph ud M.! KeyMenuText) $
|
||||||
|
Operation "gegl:text"
|
||||||
|
[ Property "color" $ PropertyColor $ GEGL.RGBA 1 1 1 ttl
|
||||||
|
]
|
||||||
|
putAffection ud
|
||||||
|
{ fade = if (ttl - sec) > 0 then FadeOut (ttl - sec) else FadeIn 1
|
||||||
|
, haskelloids = nhs
|
||||||
|
}
|
||||||
|
|
||||||
|
smUpdate InGame sec = updateGame sec
|
||||||
|
|
||||||
|
smEvent Menu _ e = do
|
||||||
|
ad <- get
|
||||||
|
case SDL.eventPayload e of
|
||||||
|
SDL.KeyboardEvent dat ->
|
||||||
|
case SDL.keysymKeycode $ SDL.keyboardEventKeysym dat of
|
||||||
|
SDL.KeycodeSpace ->
|
||||||
|
when (SDL.keyboardEventKeyMotion dat == SDL.Pressed) $ do
|
||||||
|
ud <- getAffection
|
||||||
|
liftIO $ gegl_node_disconnect (nodeGraph ud M.! KeyFGNop) "input"
|
||||||
|
smLoad InGame
|
||||||
|
_ -> return ()
|
||||||
|
SDL.WindowClosedEvent _ ->
|
||||||
|
put ad
|
||||||
|
{ quitEvent = True
|
||||||
|
}
|
||||||
|
_ -> return ()
|
||||||
|
|
||||||
|
smEvent InGame sec e = handleGameEvent sec e
|
||||||
|
|
||||||
|
smDraw Menu = do
|
||||||
|
ud <- getAffection
|
||||||
|
liftIO $ gegl_node_process $ nodeGraph ud M.! KeySink
|
||||||
|
present
|
||||||
|
(GeglRectangle 0 0 800 600)
|
||||||
|
(buffer ud)
|
||||||
|
True
|
||||||
|
|
||||||
|
smDraw InGame = drawGame
|
Loading…
Reference in a new issue