20 lines
470 B
Haskell
20 lines
470 B
Haskell
module Dodge.WASD where
|
|
|
|
import Data.Foldable
|
|
import qualified Data.Map.Strict as M
|
|
import Dodge.Data.Input
|
|
import Geometry
|
|
import qualified SDL
|
|
|
|
wasdM :: SDL.Scancode -> Point2
|
|
wasdM scancode = case scancode of
|
|
SDL.ScancodeW -> V2 0 1
|
|
SDL.ScancodeS -> V2 0 (-1)
|
|
SDL.ScancodeD -> V2 1 0
|
|
SDL.ScancodeA -> V2 (-1) 0
|
|
_ -> V2 0 0
|
|
|
|
wasdDir :: Input -> Point2
|
|
{-# INLINE wasdDir #-}
|
|
wasdDir = foldl' (flip $ (+.+) . wasdM) (V2 0 0) . M.keys . _pressedKeys
|