module Gamgine.State.InputInfo where
import qualified Graphics.UI.GLFW as GLFW
import Gamgine.Control ((?))
import qualified Gamgine.Math.Vect as V
import Control.Applicative ((<$>), (<*>))

data Modifier = Ctrl | Alt | Shift deriving (Modifier -> Modifier -> Bool
(Modifier -> Modifier -> Bool)
-> (Modifier -> Modifier -> Bool) -> Eq Modifier
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Modifier -> Modifier -> Bool
== :: Modifier -> Modifier -> Bool
$c/= :: Modifier -> Modifier -> Bool
/= :: Modifier -> Modifier -> Bool
Eq, Eq Modifier
Eq Modifier =>
(Modifier -> Modifier -> Ordering)
-> (Modifier -> Modifier -> Bool)
-> (Modifier -> Modifier -> Bool)
-> (Modifier -> Modifier -> Bool)
-> (Modifier -> Modifier -> Bool)
-> (Modifier -> Modifier -> Modifier)
-> (Modifier -> Modifier -> Modifier)
-> Ord Modifier
Modifier -> Modifier -> Bool
Modifier -> Modifier -> Ordering
Modifier -> Modifier -> Modifier
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Modifier -> Modifier -> Ordering
compare :: Modifier -> Modifier -> Ordering
$c< :: Modifier -> Modifier -> Bool
< :: Modifier -> Modifier -> Bool
$c<= :: Modifier -> Modifier -> Bool
<= :: Modifier -> Modifier -> Bool
$c> :: Modifier -> Modifier -> Bool
> :: Modifier -> Modifier -> Bool
$c>= :: Modifier -> Modifier -> Bool
>= :: Modifier -> Modifier -> Bool
$cmax :: Modifier -> Modifier -> Modifier
max :: Modifier -> Modifier -> Modifier
$cmin :: Modifier -> Modifier -> Modifier
min :: Modifier -> Modifier -> Modifier
Ord)

-- | mouse position in world coordinates
type MousePos = V.Vect

-- | if the key/mouse button was pressed or released
data InputState = Pressed | Released deriving (InputState -> InputState -> Bool
(InputState -> InputState -> Bool)
-> (InputState -> InputState -> Bool) -> Eq InputState
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InputState -> InputState -> Bool
== :: InputState -> InputState -> Bool
$c/= :: InputState -> InputState -> Bool
/= :: InputState -> InputState -> Bool
Eq, Eq InputState
Eq InputState =>
(InputState -> InputState -> Ordering)
-> (InputState -> InputState -> Bool)
-> (InputState -> InputState -> Bool)
-> (InputState -> InputState -> Bool)
-> (InputState -> InputState -> Bool)
-> (InputState -> InputState -> InputState)
-> (InputState -> InputState -> InputState)
-> Ord InputState
InputState -> InputState -> Bool
InputState -> InputState -> Ordering
InputState -> InputState -> InputState
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: InputState -> InputState -> Ordering
compare :: InputState -> InputState -> Ordering
$c< :: InputState -> InputState -> Bool
< :: InputState -> InputState -> Bool
$c<= :: InputState -> InputState -> Bool
<= :: InputState -> InputState -> Bool
$c> :: InputState -> InputState -> Bool
> :: InputState -> InputState -> Bool
$c>= :: InputState -> InputState -> Bool
>= :: InputState -> InputState -> Bool
$cmax :: InputState -> InputState -> InputState
max :: InputState -> InputState -> InputState
$cmin :: InputState -> InputState -> InputState
min :: InputState -> InputState -> InputState
Ord)

isModifierPressed :: Modifier -> GLFW.ModifierKeys -> Bool
isModifierPressed :: Modifier -> ModifierKeys -> Bool
isModifierPressed Modifier
Ctrl  = ModifierKeys -> Bool
GLFW.modifierKeysControl
isModifierPressed Modifier
Alt   = ModifierKeys -> Bool
GLFW.modifierKeysAlt
isModifierPressed Modifier
Shift = ModifierKeys -> Bool
GLFW.modifierKeysShift