pituicat/src/Scenes/Test/EventHandler.hs

45 lines
1.1 KiB
Haskell

{-# LANGUAGE OverloadedStrings #-}
module Scenes.Test.EventHandler where
import Affection as A
import qualified SDL
import Linear
import Control.Concurrent.STM
import Data.String (fromString)
-- internal imports
import Types
import Scenes.Test.Types
singleHandler
:: Test
-> TranslatorMessage
-> Affection ()
singleHandler level event = do
let multiplier = if tmKeyMotion event == SDL.Pressed then 1 else 0
changeDirection cat state =
Just cat
{ pcMoveState = if multiplier > 0 then Just state else Nothing
}
liftIO $ atomically $ modifyTVar (testPlayer level) (\(Just pituicat) ->
A.log Debug ("Grounded: " <> fromString (show $ pcGrounded pituicat)) $
case tmAction event of
Jump -> if multiplier > 0 && pcGrounded pituicat
then A.log Debug "jumping"
(Just pituicat
{ pcVel = pcVel pituicat + V2 0 300
, pcGrounded = False
}
)
else
Just pituicat
MoveRight -> changeDirection pituicat MoveRight
MoveLeft -> changeDirection pituicat MoveLeft
_ -> Just pituicat
)