44 lines
1.1 KiB
Haskell
44 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
|
|
)
|