{- Input Event handler and settings HGamer3D Library (A project to enable 3D game development in Haskell) Copyright 2015 Peter Althainz Distributed under the Apache License, Version 2.0 (See attached file LICENSE or copy at http://www.apache.org/licenses/LICENSE-2.0) file: HGamer3D/Input/Mouse.hs -} -- | Module providing settings for all input events (Mouse, Keyboard, Joystick) module HGamer3D.Input.InputEventHandler ( InputEventType (..), InputEventHandler (..), ctInputEventHandler, ExitRequestedEvent (..), ctExitRequestedEvent ) where import Fresco import Data.MessagePack import Debug.Trace import Data.Text import HGamer3D.Data data InputEventType = IEMouseButtonUp | IEMouseButtonDown | IEMouseMove | IEMouseButtonWheel | IEMouseButtonVisibleChanged | IEKeyUp | IEKeyDown | IEExitRequested deriving (Eq, Show) instance ComponentClass InputEventType where toObj iet = case iet of IEMouseButtonUp -> ObjectInt 1 IEMouseButtonDown -> ObjectInt 2 IEMouseMove -> ObjectInt 3 IEMouseButtonWheel -> ObjectInt 4 IEMouseButtonVisibleChanged -> ObjectInt 5 IEKeyUp -> ObjectInt 6 IEKeyDown -> ObjectInt 7 IEExitRequested -> ObjectInt 8 fromObj (ObjectInt n) = case n of 1 -> IEMouseButtonUp 2 -> IEMouseButtonDown 3 -> IEMouseMove 4 -> IEMouseButtonWheel 5 -> IEMouseButtonVisibleChanged 6 -> IEKeyUp 7 -> IEKeyDown 8 -> IEExitRequested data InputEventHandler = DefaultEventHandler | SpecificEventHandler [InputEventType] instance ComponentClass InputEventHandler where toObj DefaultEventHandler = ObjectArray [ObjectInt 0] toObj (SpecificEventHandler iets) = ObjectArray [ObjectInt 1, ObjectArray (Prelude.map toObj iets)] fromObj (ObjectArray [ObjectInt 0]) = DefaultEventHandler fromObj (ObjectArray [ObjectInt 1, (ObjectArray iets_os)]) = SpecificEventHandler (Prelude.map fromObj iets_os) ctInputEventHandler :: ComponentType InputEventHandler ctInputEventHandler = ComponentType 0xfc0edefcebcb5878 -- ExitRequestedEvent data ExitRequestedEvent = ExitRequestedEvent deriving (Eq, Show) instance ComponentClass ExitRequestedEvent where toObj ExitRequestedEvent = ObjectArray [ObjectInt 0] fromObj (ObjectArray [ObjectInt 0]) = ExitRequestedEvent ctExitRequestedEvent :: ComponentType ExitRequestedEvent ctExitRequestedEvent = ComponentType 0x824517eb48d5c653