module Helm.Engine.SDL.Engine
(
SDLEngine(..)
, SDLEngineConfig(..)
) where
import Data.Word (Word32)
import FRP.Elerea.Param (Signal, SignalGen)
import Linear.V2 (V2)
import qualified SDL.Video as Video
import qualified SDL.Video.Renderer as Renderer
import Helm.Engine (MouseButton, Key)
data SDLEngineConfig = SDLEngineConfig
{ windowDimensions :: V2 Int
, windowIsFullscreen :: !Bool
, windowIsResizable :: !Bool
, windowTitle :: !String
}
data SDLEngine = SDLEngine
{ window :: Video.Window
, renderer :: Video.Renderer
, texture :: !Renderer.Texture
, engineConfig :: SDLEngineConfig
, lastMousePress :: Maybe (Word32, V2 Double)
, mouseMoveEventSignal :: SignalGen SDLEngine (Signal [V2 Int])
, mouseMoveEventSink :: V2 Int -> IO ()
, mouseDownEventSignal :: SignalGen SDLEngine (Signal [(MouseButton, V2 Int)])
, mouseDownEventSink :: (MouseButton, V2 Int) -> IO ()
, mouseUpEventSignal :: SignalGen SDLEngine (Signal [(MouseButton, V2 Int)])
, mouseUpEventSink :: (MouseButton, V2 Int) -> IO ()
, mouseClickEventSignal :: SignalGen SDLEngine (Signal [(MouseButton, V2 Int)])
, mouseClickEventSink :: (MouseButton, V2 Int) -> IO ()
, keyboardDownEventSignal :: SignalGen SDLEngine (Signal [Key])
, keyboardDownEventSink :: Key -> IO ()
, keyboardUpEventSignal :: SignalGen SDLEngine (Signal [Key])
, keyboardUpEventSink :: Key -> IO ()
, keyboardPressEventSignal :: SignalGen SDLEngine (Signal [Key])
, keyboardPressEventSink :: Key -> IO ()
, windowResizeEventSignal :: SignalGen SDLEngine (Signal [V2 Int])
, windowResizeEventSink :: V2 Int -> IO ()
}