module Mischief.ECS.Timer where data Timer = Timer {Timer -> Float duration :: Float, Timer -> Float elapsed :: Float, Timer -> Mode mode :: Mode} data Mode = Once | Repeat new :: Float -> Mode -> Timer new :: Float -> Mode -> Timer new Float duration Mode mode = Timer {Float duration :: Float duration :: Float duration, Mode mode :: Mode mode :: Mode mode, elapsed :: Float elapsed = Float 0} tick :: Float -> Timer -> (Timer, Bool) tick :: Float -> Timer -> (Timer, Bool) tick Float _ Timer timer | Timer timer.elapsed Float -> Float -> Bool forall a. Ord a => a -> a -> Bool >= Timer timer.duration = (Timer timer, Bool False) tick Float x Timer timer | Timer timer.elapsed Float -> Float -> Float forall a. Num a => a -> a -> a + Float x Float -> Float -> Bool forall a. Ord a => a -> a -> Bool < Timer timer.duration = (Timer timer {elapsed = timer.elapsed + x}, Bool False) tick Float _ Timer {Float duration :: Timer -> Float duration :: Float duration, elapsed :: Timer -> Float elapsed = Float _, mode :: Timer -> Mode mode = Mode Once} = (Timer {Float duration :: Float duration :: Float duration, elapsed :: Float elapsed = Float duration, mode :: Mode mode = Mode Once}, Bool True) tick Float x Timer {Float duration :: Timer -> Float duration :: Float duration, Float elapsed :: Timer -> Float elapsed :: Float elapsed, mode :: Timer -> Mode mode = Mode Repeat} = (Timer {Float duration :: Float duration :: Float duration, elapsed :: Float elapsed = Float elapsed Float -> Float -> Float forall a. Num a => a -> a -> a + Float x Float -> Float -> Float forall a. Num a => a -> a -> a - Float duration, mode :: Mode mode = Mode Repeat}, Bool True)