packages feed

minesweeper-0.9: Transition/Action.hs

{-# LANGUAGE PatternGuards #-}

module Transition.Action 
    ( triggers 
    , triggers'
    ) where

import When
import Event
import State
import State.Functions

--import Data.Maybe
--import Data.List

-----------------------------

triggers' = [(p, \st -> case tw st of (t, w) -> (Triggered t, w)) | (p, tw) <- triggers]

triggers :: [(State -> Bool, State -> (Triggered, When))]
triggers =
    [ (isActive,            const (Tick,             Later 1))
    , (interruptWillShown,  const (InterruptVisible, Later 0.5))
    , (fade,                const (FadeTick,         Later 0.1))
    , (revealInProgress,    const (BusyTick,         Later 0.1))
    , (revealInProgress,    \st -> let x = revResult st in (RevealDone x, AfterEval x))
    ]


interruptWillShown st 
    | Just (False, _) <- interrupt st = True
    | otherwise = False

revealInProgress = not . null . revealing

fade = not . null . redness