{-# LANGUAGE MultiParamTypeClasses #-} module StateMachine where import Affection import Types import Load import MainGame instance StateMachine State UserData where smLoad Main = loadMap smLoad Load = loadLoad smUpdate Main = updateMap smUpdate Load = updateLoad smDraw Main = drawMap smDraw Load = drawLoad smEvent _ evs = do Subsystems w m k <- subsystems <$> getAffection _ <- consumeSDLEvents k =<< consumeSDLEvents w =<< consumeSDLEvents m evs return () smClean _ = do ud <- getAffection let Subsystems w m k = subsystems ud toClean = uuid ud mapM_ (\u -> do partUnSubscribe w u partUnSubscribe m u partUnSubscribe k u ) toClean putAffection ud { uuid = [] }