diff options
| -rw-r--r-- | Demos/Pong/Main.hs | 34 | ||||
| -rw-r--r-- | Demos/Pong/Pong.hs | 16 | ||||
| -rw-r--r-- | Spear/App.hs | 10 | ||||
| -rw-r--r-- | Spear/Step.hs | 42 | ||||
| -rw-r--r-- | Spear/Window.hs | 246 |
5 files changed, 171 insertions, 177 deletions
diff --git a/Demos/Pong/Main.hs b/Demos/Pong/Main.hs index 4dbe0a3..ee0f8d8 100644 --- a/Demos/Pong/Main.hs +++ b/Demos/Pong/Main.hs | |||
| @@ -2,20 +2,20 @@ | |||
| 2 | 2 | ||
| 3 | module Main where | 3 | module Main where |
| 4 | 4 | ||
| 5 | import Data.Maybe (mapMaybe) | 5 | import Data.Maybe (mapMaybe) |
| 6 | import Graphics.Rendering.OpenGL.GL (($=)) | 6 | import Graphics.Rendering.OpenGL.GL (($=)) |
| 7 | import Graphics.Rendering.OpenGL.GL qualified as GL | 7 | import qualified Graphics.Rendering.OpenGL.GL as GL |
| 8 | import Pong | 8 | import Pong |
| 9 | import Spear.App | 9 | import Spear.App |
| 10 | import Spear.Game | 10 | import Spear.Game |
| 11 | import Spear.Math.AABB | 11 | import Spear.Math.AABB |
| 12 | import Spear.Math.Spatial2 | 12 | import Spear.Math.Spatial2 |
| 13 | import Spear.Math.Vector | 13 | import Spear.Math.Vector |
| 14 | import Spear.Window | 14 | import Spear.Window |
| 15 | 15 | ||
| 16 | data GameState = GameState | 16 | data GameState = GameState |
| 17 | { window :: Window, | 17 | { window :: Window, |
| 18 | world :: [GameObject] | 18 | world :: [GameObject] |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | main = | 21 | main = |
| @@ -53,7 +53,7 @@ renderGO go = do | |||
| 53 | (xmin, ymin, xmax, ymax) = (f2d xmin', f2d ymin', f2d xmax', f2d ymax') | 53 | (xmin, ymin, xmax, ymax) = (f2d xmin', f2d ymin', f2d xmax', f2d ymax') |
| 54 | GL.preservingMatrix $ do | 54 | GL.preservingMatrix $ do |
| 55 | GL.translate (GL.Vector3 (f2d xcenter) (f2d ycenter) 0) | 55 | GL.translate (GL.Vector3 (f2d xcenter) (f2d ycenter) 0) |
| 56 | GL.renderPrimitive (GL.TriangleStrip) $ do | 56 | GL.renderPrimitive GL.TriangleStrip $ do |
| 57 | GL.vertex (GL.Vertex2 xmin ymax) | 57 | GL.vertex (GL.Vertex2 xmin ymax) |
| 58 | GL.vertex (GL.Vertex2 xmin ymin) | 58 | GL.vertex (GL.Vertex2 xmin ymin) |
| 59 | GL.vertex (GL.Vertex2 xmax ymax) | 59 | GL.vertex (GL.Vertex2 xmax ymax) |
| @@ -71,13 +71,13 @@ procEvent _ = return () | |||
| 71 | 71 | ||
| 72 | translate = mapMaybe translate' | 72 | translate = mapMaybe translate' |
| 73 | 73 | ||
| 74 | translate' (KeyDown KEY_LEFT) = Just MoveLeft | 74 | translate' (KeyDown KEY_LEFT) = Just MoveLeft |
| 75 | translate' (KeyDown KEY_RIGHT) = Just MoveRight | 75 | translate' (KeyDown KEY_RIGHT) = Just MoveRight |
| 76 | translate' (KeyUp KEY_LEFT) = Just StopLeft | 76 | translate' (KeyUp KEY_LEFT) = Just StopLeft |
| 77 | translate' (KeyUp KEY_RIGHT) = Just StopRight | 77 | translate' (KeyUp KEY_RIGHT) = Just StopRight |
| 78 | translate' _ = Nothing | 78 | translate' _ = Nothing |
| 79 | 79 | ||
| 80 | exitRequested = any (== (KeyDown KEY_ESC)) | 80 | exitRequested = elem (KeyDown KEY_ESC) |
| 81 | 81 | ||
| 82 | f2d :: Float -> GL.GLdouble | 82 | f2d :: Float -> GL.GLdouble |
| 83 | f2d = realToFrac | 83 | f2d = realToFrac |
diff --git a/Demos/Pong/Pong.hs b/Demos/Pong/Pong.hs index b048bbc..fd7fbeb 100644 --- a/Demos/Pong/Pong.hs +++ b/Demos/Pong/Pong.hs | |||
| @@ -7,12 +7,12 @@ module Pong | |||
| 7 | ) | 7 | ) |
| 8 | where | 8 | where |
| 9 | 9 | ||
| 10 | import Data.Monoid (mconcat) | 10 | import Data.Monoid (mconcat) |
| 11 | import GHC.Float (double2Float) | 11 | import GHC.Float (double2Float) |
| 12 | import Spear.Math.AABB | 12 | import Spear.Math.AABB |
| 13 | import Spear.Math.Spatial2 | 13 | import Spear.Math.Spatial2 |
| 14 | import Spear.Math.Vector | 14 | import Spear.Math.Vector |
| 15 | import Spear.Step | 15 | import Spear.Step |
| 16 | 16 | ||
| 17 | -- Configuration | 17 | -- Configuration |
| 18 | 18 | ||
| @@ -42,8 +42,8 @@ data GameEvent | |||
| 42 | -- Game objects | 42 | -- Game objects |
| 43 | 43 | ||
| 44 | data GameObject = GameObject | 44 | data GameObject = GameObject |
| 45 | { aabb :: AABB2, | 45 | { aabb :: AABB2, |
| 46 | obj :: Obj2, | 46 | obj :: Obj2, |
| 47 | gostep :: Step [GameObject] [GameEvent] GameObject GameObject | 47 | gostep :: Step [GameObject] [GameEvent] GameObject GameObject |
| 48 | } | 48 | } |
| 49 | 49 | ||
diff --git a/Spear/App.hs b/Spear/App.hs index dc17dec..ca9a355 100644 --- a/Spear/App.hs +++ b/Spear/App.hs | |||
| @@ -6,11 +6,11 @@ module Spear.App | |||
| 6 | ) | 6 | ) |
| 7 | where | 7 | where |
| 8 | 8 | ||
| 9 | import Control.Monad | 9 | import Control.Monad |
| 10 | import GHC.Float | 10 | import GHC.Float |
| 11 | import Spear.Game | 11 | import Spear.Game |
| 12 | import Spear.Sys.Timer as Timer | 12 | import Spear.Sys.Timer as Timer |
| 13 | import Spear.Window | 13 | import Spear.Window |
| 14 | 14 | ||
| 15 | maxFPS = 60 | 15 | maxFPS = 60 |
| 16 | 16 | ||
diff --git a/Spear/Step.hs b/Spear/Step.hs index 7419d9e..609f387 100644 --- a/Spear/Step.hs +++ b/Spear/Step.hs | |||
| @@ -26,10 +26,10 @@ module Spear.Step | |||
| 26 | ) | 26 | ) |
| 27 | where | 27 | where |
| 28 | 28 | ||
| 29 | import Data.List (foldl') | 29 | import Data.List (foldl') |
| 30 | import Data.Map (Map) | 30 | import Data.Map (Map) |
| 31 | import qualified Data.Map as Map | 31 | import qualified Data.Map as Map |
| 32 | import Data.Monoid | 32 | import Data.Monoid |
| 33 | 33 | ||
| 34 | type Elapsed = Double | 34 | type Elapsed = Double |
| 35 | 35 | ||
| @@ -51,11 +51,6 @@ instance Semigroup (Step s e a a) where | |||
| 51 | instance Monoid (Step s e a a) where | 51 | instance Monoid (Step s e a a) where |
| 52 | mempty = sid | 52 | mempty = sid |
| 53 | 53 | ||
| 54 | mappend (Step s1) (Step s2) = Step $ \elapsed dt g e a -> | ||
| 55 | let (b, s1') = s1 elapsed dt g e a | ||
| 56 | (c, s2') = s2 elapsed dt g e b | ||
| 57 | in (c, mappend s1' s2') | ||
| 58 | |||
| 59 | -- | Construct a step from a function. | 54 | -- | Construct a step from a function. |
| 60 | step :: (Elapsed -> Dt -> s -> e -> a -> (b, Step s e a b)) -> Step s e a b | 55 | step :: (Elapsed -> Dt -> s -> e -> a -> (b, Step s e a b)) -> Step s e a b |
| 61 | step = Step | 56 | step = Step |
| @@ -70,11 +65,11 @@ spure f = Step $ \_ _ _ _ x -> (f x, spure f) | |||
| 70 | 65 | ||
| 71 | -- | The step that returns the first component in the tuple. | 66 | -- | The step that returns the first component in the tuple. |
| 72 | sfst :: Step s e (a, b) a | 67 | sfst :: Step s e (a, b) a |
| 73 | sfst = spure $ \(a, _) -> a | 68 | sfst = spure fst |
| 74 | 69 | ||
| 75 | -- | The step that returns the second component in the tuple. | 70 | -- | The step that returns the second component in the tuple. |
| 76 | ssnd :: Step s e (a, b) b | 71 | ssnd :: Step s e (a, b) b |
| 77 | ssnd = spure $ \(_, b) -> b | 72 | ssnd = spure snd |
| 78 | 73 | ||
| 79 | -- | Construct a step that folds a given list of inputs. | 74 | -- | Construct a step that folds a given list of inputs. |
| 80 | -- | 75 | -- |
| @@ -97,7 +92,7 @@ sfold' :: | |||
| 97 | a -> | 92 | a -> |
| 98 | [e] -> | 93 | [e] -> |
| 99 | (a, Step s (Maybe e) a a) | 94 | (a, Step s (Maybe e) a a) |
| 100 | sfold' elapsed dt g s a es = foldl' f (a', s') es | 95 | sfold' elapsed dt g s a = foldl' f (a', s') |
| 101 | where | 96 | where |
| 102 | f (a, s) e = runStep s elapsed dt g (Just e) a | 97 | f (a, s) e = runStep s elapsed dt g (Just e) a |
| 103 | (a', s') = runStep s elapsed dt g Nothing a | 98 | (a', s') = runStep s elapsed dt g Nothing a |
| @@ -128,19 +123,19 @@ szip f (Step s1) (Step s2) = Step $ \elapsed dt g e d -> | |||
| 128 | switch :: | 123 | switch :: |
| 129 | Eq e => | 124 | Eq e => |
| 130 | e -> | 125 | e -> |
| 131 | (Step s (Maybe e) a a) -> | 126 | Step s (Maybe e) a a -> |
| 132 | e -> | 127 | e -> |
| 133 | (Step s (Maybe e) a a) -> | 128 | Step s (Maybe e) a a -> |
| 134 | Step s (Maybe e) a a | 129 | Step s (Maybe e) a a |
| 135 | switch flag1 s1 flag2 s2 = switch' s1 flag1 s1 flag2 s2 | 130 | switch flag1 s1 flag2 s2 = switch' s1 flag1 s1 flag2 s2 |
| 136 | 131 | ||
| 137 | switch' :: | 132 | switch' :: |
| 138 | Eq e => | 133 | Eq e => |
| 139 | (Step s (Maybe e) a a) -> | 134 | Step s (Maybe e) a a -> |
| 140 | e -> | 135 | e -> |
| 141 | (Step s (Maybe e) a a) -> | 136 | Step s (Maybe e) a a -> |
| 142 | e -> | 137 | e -> |
| 143 | (Step s (Maybe e) a a) -> | 138 | Step s (Maybe e) a a -> |
| 144 | Step s (Maybe e) a a | 139 | Step s (Maybe e) a a |
| 145 | switch' cur flag1 s1 flag2 s2 = Step $ \elapsed dt g e a -> | 140 | switch' cur flag1 s1 flag2 s2 = Step $ \elapsed dt g e a -> |
| 146 | case e of | 141 | case e of |
| @@ -148,13 +143,10 @@ switch' cur flag1 s1 flag2 s2 = Step $ \elapsed dt g e a -> | |||
| 148 | let (a', s') = runStep cur elapsed dt g Nothing a | 143 | let (a', s') = runStep cur elapsed dt g Nothing a |
| 149 | in (a', switch' s' flag1 s1 flag2 s2) | 144 | in (a', switch' s' flag1 s1 flag2 s2) |
| 150 | Just e' -> | 145 | Just e' -> |
| 151 | let next = | 146 | let next |
| 152 | if e' == flag1 | 147 | | e' == flag1 = s1 |
| 153 | then s1 | 148 | | e' == flag2 = s2 |
| 154 | else | 149 | | otherwise = cur |
| 155 | if e' == flag2 | ||
| 156 | then s2 | ||
| 157 | else cur | ||
| 158 | (a', s') = runStep next elapsed dt g e a | 150 | (a', s') = runStep next elapsed dt g e a |
| 159 | in (a', switch' s' flag1 s1 flag2 s2) | 151 | in (a', switch' s' flag1 s1 flag2 s2) |
| 160 | 152 | ||
| @@ -179,6 +171,6 @@ multiSwitch' curKey cur m = Step $ \elapsed dt g e a -> | |||
| 179 | Just s -> | 171 | Just s -> |
| 180 | let (a', s') = runStep s elapsed dt g e a | 172 | let (a', s') = runStep s elapsed dt g e a |
| 181 | m' = case curKey of | 173 | m' = case curKey of |
| 182 | Nothing -> m | 174 | Nothing -> m |
| 183 | Just key -> Map.insert key cur m | 175 | Just key -> Map.insert key cur m |
| 184 | in (a', multiSwitch' e s' m') | 176 | in (a', multiSwitch' e s' m') |
diff --git a/Spear/Window.hs b/Spear/Window.hs index a6471b0..ec90a2f 100644 --- a/Spear/Window.hs +++ b/Spear/Window.hs | |||
| @@ -28,12 +28,12 @@ module Spear.Window | |||
| 28 | ) | 28 | ) |
| 29 | where | 29 | where |
| 30 | 30 | ||
| 31 | import Control.Concurrent.MVar | 31 | import Control.Concurrent.MVar |
| 32 | import Control.Exception | 32 | import Control.Exception |
| 33 | import Control.Monad (foldM, unless, void, when) | 33 | import Control.Monad (foldM, unless, void, when) |
| 34 | import Data.Maybe (fromJust, fromMaybe, isJust) | 34 | import Data.Maybe (fromJust, fromMaybe, isJust) |
| 35 | import qualified Graphics.UI.GLFW as GLFW | 35 | import qualified Graphics.UI.GLFW as GLFW |
| 36 | import Spear.Game | 36 | import Spear.Game |
| 37 | 37 | ||
| 38 | type Width = Int | 38 | type Width = Int |
| 39 | 39 | ||
| @@ -59,9 +59,9 @@ instance Exception WindowException | |||
| 59 | 59 | ||
| 60 | -- | A window. | 60 | -- | A window. |
| 61 | data Window = Window | 61 | data Window = Window |
| 62 | { glfwWindow :: GLFW.Window, | 62 | { glfwWindow :: GLFW.Window, |
| 63 | closeRequest :: CloseRequest, | 63 | closeRequest :: CloseRequest, |
| 64 | inputEvents :: MVar [InputEvent] | 64 | inputEvents :: MVar [InputEvent] |
| 65 | } | 65 | } |
| 66 | 66 | ||
| 67 | withWindow :: | 67 | withWindow :: |
| @@ -118,7 +118,7 @@ pollEvents window = do | |||
| 118 | GLFW.pollEvents | 118 | GLFW.pollEvents |
| 119 | events <- | 119 | events <- |
| 120 | tryTakeMVar (inputEvents window) >>= \xs -> case xs of | 120 | tryTakeMVar (inputEvents window) >>= \xs -> case xs of |
| 121 | Nothing -> return [] | 121 | Nothing -> return [] |
| 122 | Just events -> return events | 122 | Just events -> return events |
| 123 | putMVar (inputEvents window) [] | 123 | putMVar (inputEvents window) [] |
| 124 | return events | 124 | return events |
| @@ -154,14 +154,14 @@ onMouseButton events window button GLFW.MouseButtonState'Pressed _ = addEvent ev | |||
| 154 | onMouseButton events window button GLFW.MouseButtonState'Released _ = addEvent events $ MouseUp (fromGLFWbutton button) | 154 | onMouseButton events window button GLFW.MouseButtonState'Released _ = addEvent events $ MouseUp (fromGLFWbutton button) |
| 155 | 155 | ||
| 156 | onMouseMove :: MVar [InputEvent] -> IO GLFW.CursorPosCallback | 156 | onMouseMove :: MVar [InputEvent] -> IO GLFW.CursorPosCallback |
| 157 | onMouseMove events = newEmptyMVar >>= return . flip onMouseMove' events | 157 | onMouseMove events = newEmptyMVar <&> flip onMouseMove' events |
| 158 | 158 | ||
| 159 | onMouseMove' :: MVar MousePos -> MVar [InputEvent] -> GLFW.CursorPosCallback | 159 | onMouseMove' :: MVar MousePos -> MVar [InputEvent] -> GLFW.CursorPosCallback |
| 160 | onMouseMove' oldPos events window x y = do | 160 | onMouseMove' oldPos events window x y = do |
| 161 | (old_x, old_y) <- | 161 | (old_x, old_y) <- |
| 162 | tryTakeMVar oldPos >>= \old -> case old of | 162 | tryTakeMVar oldPos >>= \old -> case old of |
| 163 | Nothing -> return (x, y) | 163 | Nothing -> return (x, y) |
| 164 | Just p -> return p | 164 | Just p -> return p |
| 165 | let delta = (x - old_x, y - old_y) | 165 | let delta = (x - old_x, y - old_y) |
| 166 | putMVar oldPos (x, y) | 166 | putMVar oldPos (x, y) |
| 167 | addEvent events $ MouseMove (x, y) delta | 167 | addEvent events $ MouseMove (x, y) delta |
| @@ -172,7 +172,7 @@ replaceMVar mvar val = tryTakeMVar mvar >> putMVar mvar val | |||
| 172 | addEvent :: MVar [a] -> a -> IO () | 172 | addEvent :: MVar [a] -> a -> IO () |
| 173 | addEvent mvar val = | 173 | addEvent mvar val = |
| 174 | tryTakeMVar mvar >>= \xs -> case xs of | 174 | tryTakeMVar mvar >>= \xs -> case xs of |
| 175 | Nothing -> putMVar mvar [val] | 175 | Nothing -> putMVar mvar [val] |
| 176 | Just events -> putMVar mvar (val : events) | 176 | Just events -> putMVar mvar (val : events) |
| 177 | 177 | ||
| 178 | -- Input | 178 | -- Input |
| @@ -198,7 +198,8 @@ processKeys window = foldM f [] | |||
| 198 | f acc (key, result) = do | 198 | f acc (key, result) = do |
| 199 | isDown <- | 199 | isDown <- |
| 200 | fmap (== GLFW.KeyState'Pressed) $ | 200 | fmap (== GLFW.KeyState'Pressed) $ |
| 201 | gameIO . GLFW.getKey window . toGLFWkey $ key | 201 | gameIO . GLFW.getKey window . toGLFWkey $ |
| 202 | key | ||
| 202 | return $ if isDown then result : acc else acc | 203 | return $ if isDown then result : acc else acc |
| 203 | 204 | ||
| 204 | -- | Process the mouse buttons, returning those values for which their | 205 | -- | Process the mouse buttons, returning those values for which their |
| @@ -209,7 +210,8 @@ processButtons window = foldM f [] | |||
| 209 | f acc (button, result) = do | 210 | f acc (button, result) = do |
| 210 | isDown <- | 211 | isDown <- |
| 211 | fmap (== GLFW.MouseButtonState'Pressed) $ | 212 | fmap (== GLFW.MouseButtonState'Pressed) $ |
| 212 | gameIO . GLFW.getMouseButton window . toGLFWbutton $ button | 213 | gameIO . GLFW.getMouseButton window . toGLFWbutton $ |
| 214 | button | ||
| 213 | return $ if isDown then result : acc else acc | 215 | return $ if isDown then result : acc else acc |
| 214 | 216 | ||
| 215 | data InputEvent | 217 | data InputEvent |
| @@ -290,61 +292,61 @@ type MousePos = (Double, Double) | |||
| 290 | type MouseDelta = (Double, Double) | 292 | type MouseDelta = (Double, Double) |
| 291 | 293 | ||
| 292 | fromGLFWkey :: GLFW.Key -> Key | 294 | fromGLFWkey :: GLFW.Key -> Key |
| 293 | fromGLFWkey GLFW.Key'A = KEY_A | 295 | fromGLFWkey GLFW.Key'A = KEY_A |
| 294 | fromGLFWkey GLFW.Key'B = KEY_B | 296 | fromGLFWkey GLFW.Key'B = KEY_B |
| 295 | fromGLFWkey GLFW.Key'C = KEY_C | 297 | fromGLFWkey GLFW.Key'C = KEY_C |
| 296 | fromGLFWkey GLFW.Key'D = KEY_D | 298 | fromGLFWkey GLFW.Key'D = KEY_D |
| 297 | fromGLFWkey GLFW.Key'E = KEY_E | 299 | fromGLFWkey GLFW.Key'E = KEY_E |
| 298 | fromGLFWkey GLFW.Key'F = KEY_F | 300 | fromGLFWkey GLFW.Key'F = KEY_F |
| 299 | fromGLFWkey GLFW.Key'G = KEY_G | 301 | fromGLFWkey GLFW.Key'G = KEY_G |
| 300 | fromGLFWkey GLFW.Key'H = KEY_H | 302 | fromGLFWkey GLFW.Key'H = KEY_H |
| 301 | fromGLFWkey GLFW.Key'I = KEY_I | 303 | fromGLFWkey GLFW.Key'I = KEY_I |
| 302 | fromGLFWkey GLFW.Key'J = KEY_J | 304 | fromGLFWkey GLFW.Key'J = KEY_J |
| 303 | fromGLFWkey GLFW.Key'K = KEY_K | 305 | fromGLFWkey GLFW.Key'K = KEY_K |
| 304 | fromGLFWkey GLFW.Key'L = KEY_L | 306 | fromGLFWkey GLFW.Key'L = KEY_L |
| 305 | fromGLFWkey GLFW.Key'M = KEY_M | 307 | fromGLFWkey GLFW.Key'M = KEY_M |
| 306 | fromGLFWkey GLFW.Key'N = KEY_N | 308 | fromGLFWkey GLFW.Key'N = KEY_N |
| 307 | fromGLFWkey GLFW.Key'O = KEY_O | 309 | fromGLFWkey GLFW.Key'O = KEY_O |
| 308 | fromGLFWkey GLFW.Key'P = KEY_P | 310 | fromGLFWkey GLFW.Key'P = KEY_P |
| 309 | fromGLFWkey GLFW.Key'Q = KEY_Q | 311 | fromGLFWkey GLFW.Key'Q = KEY_Q |
| 310 | fromGLFWkey GLFW.Key'R = KEY_R | 312 | fromGLFWkey GLFW.Key'R = KEY_R |
| 311 | fromGLFWkey GLFW.Key'S = KEY_S | 313 | fromGLFWkey GLFW.Key'S = KEY_S |
| 312 | fromGLFWkey GLFW.Key'T = KEY_T | 314 | fromGLFWkey GLFW.Key'T = KEY_T |
| 313 | fromGLFWkey GLFW.Key'U = KEY_U | 315 | fromGLFWkey GLFW.Key'U = KEY_U |
| 314 | fromGLFWkey GLFW.Key'V = KEY_V | 316 | fromGLFWkey GLFW.Key'V = KEY_V |
| 315 | fromGLFWkey GLFW.Key'W = KEY_W | 317 | fromGLFWkey GLFW.Key'W = KEY_W |
| 316 | fromGLFWkey GLFW.Key'X = KEY_X | 318 | fromGLFWkey GLFW.Key'X = KEY_X |
| 317 | fromGLFWkey GLFW.Key'Y = KEY_Y | 319 | fromGLFWkey GLFW.Key'Y = KEY_Y |
| 318 | fromGLFWkey GLFW.Key'Z = KEY_Z | 320 | fromGLFWkey GLFW.Key'Z = KEY_Z |
| 319 | fromGLFWkey GLFW.Key'0 = KEY_0 | 321 | fromGLFWkey GLFW.Key'0 = KEY_0 |
| 320 | fromGLFWkey GLFW.Key'1 = KEY_1 | 322 | fromGLFWkey GLFW.Key'1 = KEY_1 |
| 321 | fromGLFWkey GLFW.Key'2 = KEY_2 | 323 | fromGLFWkey GLFW.Key'2 = KEY_2 |
| 322 | fromGLFWkey GLFW.Key'3 = KEY_3 | 324 | fromGLFWkey GLFW.Key'3 = KEY_3 |
| 323 | fromGLFWkey GLFW.Key'4 = KEY_4 | 325 | fromGLFWkey GLFW.Key'4 = KEY_4 |
| 324 | fromGLFWkey GLFW.Key'5 = KEY_5 | 326 | fromGLFWkey GLFW.Key'5 = KEY_5 |
| 325 | fromGLFWkey GLFW.Key'6 = KEY_6 | 327 | fromGLFWkey GLFW.Key'6 = KEY_6 |
| 326 | fromGLFWkey GLFW.Key'7 = KEY_7 | 328 | fromGLFWkey GLFW.Key'7 = KEY_7 |
| 327 | fromGLFWkey GLFW.Key'8 = KEY_8 | 329 | fromGLFWkey GLFW.Key'8 = KEY_8 |
| 328 | fromGLFWkey GLFW.Key'9 = KEY_9 | 330 | fromGLFWkey GLFW.Key'9 = KEY_9 |
| 329 | fromGLFWkey GLFW.Key'Space = KEY_SPACE | 331 | fromGLFWkey GLFW.Key'Space = KEY_SPACE |
| 330 | fromGLFWkey GLFW.Key'F1 = KEY_F1 | 332 | fromGLFWkey GLFW.Key'F1 = KEY_F1 |
| 331 | fromGLFWkey GLFW.Key'F2 = KEY_F2 | 333 | fromGLFWkey GLFW.Key'F2 = KEY_F2 |
| 332 | fromGLFWkey GLFW.Key'F3 = KEY_F3 | 334 | fromGLFWkey GLFW.Key'F3 = KEY_F3 |
| 333 | fromGLFWkey GLFW.Key'F4 = KEY_F4 | 335 | fromGLFWkey GLFW.Key'F4 = KEY_F4 |
| 334 | fromGLFWkey GLFW.Key'F5 = KEY_F5 | 336 | fromGLFWkey GLFW.Key'F5 = KEY_F5 |
| 335 | fromGLFWkey GLFW.Key'F6 = KEY_F6 | 337 | fromGLFWkey GLFW.Key'F6 = KEY_F6 |
| 336 | fromGLFWkey GLFW.Key'F7 = KEY_F7 | 338 | fromGLFWkey GLFW.Key'F7 = KEY_F7 |
| 337 | fromGLFWkey GLFW.Key'F8 = KEY_F8 | 339 | fromGLFWkey GLFW.Key'F8 = KEY_F8 |
| 338 | fromGLFWkey GLFW.Key'F9 = KEY_F9 | 340 | fromGLFWkey GLFW.Key'F9 = KEY_F9 |
| 339 | fromGLFWkey GLFW.Key'F10 = KEY_F10 | 341 | fromGLFWkey GLFW.Key'F10 = KEY_F10 |
| 340 | fromGLFWkey GLFW.Key'F11 = KEY_F11 | 342 | fromGLFWkey GLFW.Key'F11 = KEY_F11 |
| 341 | fromGLFWkey GLFW.Key'F12 = KEY_F12 | 343 | fromGLFWkey GLFW.Key'F12 = KEY_F12 |
| 342 | fromGLFWkey GLFW.Key'Escape = KEY_ESC | 344 | fromGLFWkey GLFW.Key'Escape = KEY_ESC |
| 343 | fromGLFWkey GLFW.Key'Up = KEY_UP | 345 | fromGLFWkey GLFW.Key'Up = KEY_UP |
| 344 | fromGLFWkey GLFW.Key'Down = KEY_DOWN | 346 | fromGLFWkey GLFW.Key'Down = KEY_DOWN |
| 345 | fromGLFWkey GLFW.Key'Left = KEY_LEFT | 347 | fromGLFWkey GLFW.Key'Left = KEY_LEFT |
| 346 | fromGLFWkey GLFW.Key'Right = KEY_RIGHT | 348 | fromGLFWkey GLFW.Key'Right = KEY_RIGHT |
| 347 | fromGLFWkey _ = KEY_UNKNOWN | 349 | fromGLFWkey _ = KEY_UNKNOWN |
| 348 | 350 | ||
| 349 | -- https://www.glfw.org/docs/3.3/group__buttons.html | 351 | -- https://www.glfw.org/docs/3.3/group__buttons.html |
| 350 | fromGLFWbutton :: GLFW.MouseButton -> MouseButton | 352 | fromGLFWbutton :: GLFW.MouseButton -> MouseButton |
| @@ -353,60 +355,60 @@ fromGLFWbutton GLFW.MouseButton'2 = RMB | |||
| 353 | fromGLFWbutton GLFW.MouseButton'3 = MMB | 355 | fromGLFWbutton GLFW.MouseButton'3 = MMB |
| 354 | 356 | ||
| 355 | toGLFWkey :: Key -> GLFW.Key | 357 | toGLFWkey :: Key -> GLFW.Key |
| 356 | toGLFWkey KEY_A = GLFW.Key'A | 358 | toGLFWkey KEY_A = GLFW.Key'A |
| 357 | toGLFWkey KEY_B = GLFW.Key'B | 359 | toGLFWkey KEY_B = GLFW.Key'B |
| 358 | toGLFWkey KEY_C = GLFW.Key'C | 360 | toGLFWkey KEY_C = GLFW.Key'C |
| 359 | toGLFWkey KEY_D = GLFW.Key'D | 361 | toGLFWkey KEY_D = GLFW.Key'D |
| 360 | toGLFWkey KEY_E = GLFW.Key'E | 362 | toGLFWkey KEY_E = GLFW.Key'E |
| 361 | toGLFWkey KEY_F = GLFW.Key'F | 363 | toGLFWkey KEY_F = GLFW.Key'F |
| 362 | toGLFWkey KEY_G = GLFW.Key'G | 364 | toGLFWkey KEY_G = GLFW.Key'G |
| 363 | toGLFWkey KEY_H = GLFW.Key'H | 365 | toGLFWkey KEY_H = GLFW.Key'H |
| 364 | toGLFWkey KEY_I = GLFW.Key'I | 366 | toGLFWkey KEY_I = GLFW.Key'I |
| 365 | toGLFWkey KEY_J = GLFW.Key'J | 367 | toGLFWkey KEY_J = GLFW.Key'J |
| 366 | toGLFWkey KEY_K = GLFW.Key'K | 368 | toGLFWkey KEY_K = GLFW.Key'K |
| 367 | toGLFWkey KEY_L = GLFW.Key'L | 369 | toGLFWkey KEY_L = GLFW.Key'L |
| 368 | toGLFWkey KEY_M = GLFW.Key'M | 370 | toGLFWkey KEY_M = GLFW.Key'M |
| 369 | toGLFWkey KEY_N = GLFW.Key'N | 371 | toGLFWkey KEY_N = GLFW.Key'N |
| 370 | toGLFWkey KEY_O = GLFW.Key'O | 372 | toGLFWkey KEY_O = GLFW.Key'O |
| 371 | toGLFWkey KEY_P = GLFW.Key'P | 373 | toGLFWkey KEY_P = GLFW.Key'P |
| 372 | toGLFWkey KEY_Q = GLFW.Key'Q | 374 | toGLFWkey KEY_Q = GLFW.Key'Q |
| 373 | toGLFWkey KEY_R = GLFW.Key'R | 375 | toGLFWkey KEY_R = GLFW.Key'R |
| 374 | toGLFWkey KEY_S = GLFW.Key'S | 376 | toGLFWkey KEY_S = GLFW.Key'S |
| 375 | toGLFWkey KEY_T = GLFW.Key'T | 377 | toGLFWkey KEY_T = GLFW.Key'T |
| 376 | toGLFWkey KEY_U = GLFW.Key'U | 378 | toGLFWkey KEY_U = GLFW.Key'U |
| 377 | toGLFWkey KEY_V = GLFW.Key'V | 379 | toGLFWkey KEY_V = GLFW.Key'V |
| 378 | toGLFWkey KEY_W = GLFW.Key'W | 380 | toGLFWkey KEY_W = GLFW.Key'W |
| 379 | toGLFWkey KEY_X = GLFW.Key'X | 381 | toGLFWkey KEY_X = GLFW.Key'X |
| 380 | toGLFWkey KEY_Y = GLFW.Key'Y | 382 | toGLFWkey KEY_Y = GLFW.Key'Y |
| 381 | toGLFWkey KEY_Z = GLFW.Key'Z | 383 | toGLFWkey KEY_Z = GLFW.Key'Z |
| 382 | toGLFWkey KEY_0 = GLFW.Key'0 | 384 | toGLFWkey KEY_0 = GLFW.Key'0 |
| 383 | toGLFWkey KEY_1 = GLFW.Key'1 | 385 | toGLFWkey KEY_1 = GLFW.Key'1 |
| 384 | toGLFWkey KEY_2 = GLFW.Key'2 | 386 | toGLFWkey KEY_2 = GLFW.Key'2 |
| 385 | toGLFWkey KEY_3 = GLFW.Key'3 | 387 | toGLFWkey KEY_3 = GLFW.Key'3 |
| 386 | toGLFWkey KEY_4 = GLFW.Key'4 | 388 | toGLFWkey KEY_4 = GLFW.Key'4 |
| 387 | toGLFWkey KEY_5 = GLFW.Key'5 | 389 | toGLFWkey KEY_5 = GLFW.Key'5 |
| 388 | toGLFWkey KEY_6 = GLFW.Key'6 | 390 | toGLFWkey KEY_6 = GLFW.Key'6 |
| 389 | toGLFWkey KEY_7 = GLFW.Key'7 | 391 | toGLFWkey KEY_7 = GLFW.Key'7 |
| 390 | toGLFWkey KEY_8 = GLFW.Key'8 | 392 | toGLFWkey KEY_8 = GLFW.Key'8 |
| 391 | toGLFWkey KEY_9 = GLFW.Key'9 | 393 | toGLFWkey KEY_9 = GLFW.Key'9 |
| 392 | toGLFWkey KEY_SPACE = GLFW.Key'Space | 394 | toGLFWkey KEY_SPACE = GLFW.Key'Space |
| 393 | toGLFWkey KEY_F1 = GLFW.Key'F1 | 395 | toGLFWkey KEY_F1 = GLFW.Key'F1 |
| 394 | toGLFWkey KEY_F2 = GLFW.Key'F2 | 396 | toGLFWkey KEY_F2 = GLFW.Key'F2 |
| 395 | toGLFWkey KEY_F3 = GLFW.Key'F3 | 397 | toGLFWkey KEY_F3 = GLFW.Key'F3 |
| 396 | toGLFWkey KEY_F4 = GLFW.Key'F4 | 398 | toGLFWkey KEY_F4 = GLFW.Key'F4 |
| 397 | toGLFWkey KEY_F5 = GLFW.Key'F5 | 399 | toGLFWkey KEY_F5 = GLFW.Key'F5 |
| 398 | toGLFWkey KEY_F6 = GLFW.Key'F6 | 400 | toGLFWkey KEY_F6 = GLFW.Key'F6 |
| 399 | toGLFWkey KEY_F7 = GLFW.Key'F7 | 401 | toGLFWkey KEY_F7 = GLFW.Key'F7 |
| 400 | toGLFWkey KEY_F8 = GLFW.Key'F8 | 402 | toGLFWkey KEY_F8 = GLFW.Key'F8 |
| 401 | toGLFWkey KEY_F9 = GLFW.Key'F9 | 403 | toGLFWkey KEY_F9 = GLFW.Key'F9 |
| 402 | toGLFWkey KEY_F10 = GLFW.Key'F10 | 404 | toGLFWkey KEY_F10 = GLFW.Key'F10 |
| 403 | toGLFWkey KEY_F11 = GLFW.Key'F11 | 405 | toGLFWkey KEY_F11 = GLFW.Key'F11 |
| 404 | toGLFWkey KEY_F12 = GLFW.Key'F12 | 406 | toGLFWkey KEY_F12 = GLFW.Key'F12 |
| 405 | toGLFWkey KEY_ESC = GLFW.Key'Escape | 407 | toGLFWkey KEY_ESC = GLFW.Key'Escape |
| 406 | toGLFWkey KEY_UP = GLFW.Key'Up | 408 | toGLFWkey KEY_UP = GLFW.Key'Up |
| 407 | toGLFWkey KEY_DOWN = GLFW.Key'Down | 409 | toGLFWkey KEY_DOWN = GLFW.Key'Down |
| 408 | toGLFWkey KEY_LEFT = GLFW.Key'Left | 410 | toGLFWkey KEY_LEFT = GLFW.Key'Left |
| 409 | toGLFWkey KEY_RIGHT = GLFW.Key'Right | 411 | toGLFWkey KEY_RIGHT = GLFW.Key'Right |
| 410 | toGLFWkey KEY_UNKNOWN = GLFW.Key'Unknown | 412 | toGLFWkey KEY_UNKNOWN = GLFW.Key'Unknown |
| 411 | 413 | ||
| 412 | -- https://www.glfw.org/docs/3.3/group__buttons.html | 414 | -- https://www.glfw.org/docs/3.3/group__buttons.html |
