packages feed

reanimate-0.5.0.0: examples/obj_intro.hs

#!/usr/bin/env stack
-- stack runghc --package reanimate
{-# LANGUAGE OverloadedStrings #-}
module Main(main) where

import Reanimate
import Reanimate.Scene
import Control.Lens

main :: IO ()
main = reanimate $ scene $ do
  newSpriteSVG_ $ mkBackground "white"
  logo <- oNew $ center $ latex "Reanimate"
  oModify logo $ oScale .~ 3

  oShowWith logo oFadeIn
  oTweenS logo 1 $ \t -> do
    oScale %= \prev -> fromToS prev 2 t
    oTopY %= \prev -> fromToS prev screenTop t

  haskell <- oNew $ center $ withStrokeColor "black" $ latex "Haskell"
  oModify haskell $ oScale .~ 3
  oShowWith haskell oDraw
  oTweenS haskell 1 $ \t -> do
    oScale %= \prev -> fromToS prev 2 t
    oBottomY %= \prev -> fromToS prev screenBottom t

  features <- mapM (oNew . scale 3 . center . latex)
    ["SVG", "\\LaTeX", "Animation", "Windows", "Linux", "MacOS", "Browsers"]
  oShowWith (head features) $ adjustDuration (*3) . oScaleIn
  featureChain features

  wait (-1)
  fork $ oHideWith logo oFadeOut
  fork $ oHideWith haskell oFadeOut

replace :: Object s a -> Object s b -> Scene s ()
replace a b = do
  fork $ oHideWith a $ adjustDuration (*3) . oScaleOut
  wait 0.2
  oShowWith b $ adjustDuration (*3) . oScaleIn

featureChain :: [Object s a] -> Scene s ()
featureChain (x:y:xs) = do
    replace x y
    featureChain (y:xs)
featureChain [x] = do
  oHideWith x $ adjustDuration (*3) . oScaleOut
featureChain [] = return ()