content: -- |
  -- Module      : Reanimate.Scene
  -- Copyright   : Written by David Himmelstrup
  -- License     : Unlicense
  -- Maintainer  : lemmih@gmail.com
  -- Stability   : experimental
  -- Portability : POSIX
  --
  -- Scenes are an imperative way of defining animations.
  module Reanimate.Scene
    ( -- * Scenes
      Scene,
      ZIndex,
      scene, -- :: (forall s. Scene s a) -> Animation
      play, -- :: Animation -> Scene s ()
      fork, -- :: Scene s a -> Scene s a
      queryNow, -- :: Scene s Time
      wait, -- :: Duration -> Scene s ()
      waitUntil, -- :: Time -> Scene s ()
      waitOn, -- :: Scene s a -> Scene s a
      adjustZ, -- :: (ZIndex -> ZIndex) -> Scene s a -> Scene s a
      withSceneDuration, -- :: Scene s () -> Scene s Duration
      signalS, -- Signal -> Scene s a -> Scene s a
  
      -- * Variables
      Var,
      newVar, -- :: a -> Scene s (Var s a)
      readVar, -- :: Var s a -> Scene s a
      writeVar, -- :: Var s a -> a -> Scene s ()
      modifyVar, -- :: Var s a -> (a -> a) -> Scene s ()
      tweenVar, -- :: Var s a -> Duration -> (a -> Time -> a) -> Scene s ()
      simpleVar, -- :: (a -> SVG) -> a -> Scene s (Var s a)
      findVar, -- :: (a -> Bool) -> [Var s a] -> Scene s (Var s a)
  
      -- * Sprites
      Sprite,
      Frame,
      unVar, -- :: Var s a -> Frame s a
      spriteT, -- :: Frame s Time
      spriteDuration, -- :: Frame s Duration
      newSprite, -- :: Frame s SVG -> Scene s (Sprite s)
      newSpritePart, -- :: Frame s SVG -> Scene s (Sprite s)
      newSprite_, -- :: Frame s SVG -> Scene s ()
      newSpriteA, -- :: Animation -> Scene s (Sprite s)
      newSpriteA', -- :: Sync -> Animation -> Scene s (Sprite s)
      newSpriteSVG, -- :: SVG -> Scene s (Sprite s)
      newSpriteSVG_, -- :: SVG -> Scene s ()
      destroySprite, -- :: Sprite s -> Scene s ()
      renderSprite, -- :: Sprite s -> Frame s SVG
      applyVar, -- :: Var s a -> Sprite s -> (a -> SVG -> SVG) -> Scene s ()
      spriteModify, -- :: Sprite s -> Frame s ((SVG,ZIndex) -> (SVG, ZIndex)) -> Scene s ()
      spriteMap, -- :: Sprite s -> (SVG -> SVG) -> Scene s ()
      spriteTween, -- :: Sprite s -> Duration -> (Double -> SVG -> SVG) -> Scene s ()
      spriteVar, -- :: Sprite s -> a -> (a -> SVG -> SVG) -> Scene s (Var s a)
      spriteE, -- :: Sprite s -> Effect -> Scene s ()
      spriteZ, -- :: Sprite s -> ZIndex -> Scene s ()
      spriteScope, -- :: Scene s a -> Scene s a
  
      -- * Object API
      Object,
      ObjectData,
      signalO,
      oNew,
      newObject,
      newObjectPart,
      renderObject,
      oModify,
      oModifyS,
      oRead,
      oTween,
      oTweenS,
      oTweenV,
      oTweenVS,
      Renderable (..),
  
      -- ** Object Properties
      oTranslate,
      oTranslateX,
      oTranslateY,
      oSVG,
      oContext,
      oMargin,
      oMarginTop,
      oMarginRight,
      oMarginBottom,
      oMarginLeft,
      oBB,
      oBBMinX,
      oBBMinY,
      oBBWidth,
      oBBHeight,
      oOpacity,
      oShown,
      oZIndex,
      oEasing,
      oScale,
      oScaleOrigin,
      oTopY,
      oBottomY,
      oLeftX,
      oRightX,
      oCenterXY,
      oCenterX,
      oCenterY,
      oValue,
  
      -- ** Graphics object methods
      oShow,
      oHide,
      oShowWith,
      oHideWith,
      oFadeIn,
      oFadeOut,
      oGrow,
      oShrink,
      oTransform,
      Origin,
      oScaleIn,
      oScaleIn',
      oScaleOut,
      oScaleOut',
      oDraw,
      oSim,
      oStagger,
      oStaggerRev,
      oStagger',
      oStaggerRev',
      -- , oBalloon
  
      -- ** Pre-defined objects
      Circle (..),
      circleRadius,
      Rectangle (..),
      rectWidth,
      rectHeight,
      Morph (..),
      morphDelta,
      morphSrc,
      morphDst,
      Camera (..),
      cameraAttach,
      cameraFocus,
      cameraSetZoom,
      cameraZoom,
      cameraSetPan,
      cameraPan,
  
      -- * ST internals
      liftST,
      transitionO,
      evalScene,
    )
  where
  
  import Reanimate.Scene.Core
  import Reanimate.Scene.Object
  import Reanimate.Scene.Sprite
  import Reanimate.Scene.Var
  