packages feed

processing-1.1.0.0: examples/random.hs

{-# LANGUAGE OverloadedStrings #-}

import Graphics.Web.Processing.Mid
import Graphics.Web.Processing.Html
import Control.Applicative ((<$>))

main :: IO ()
main = writeHtml "processing.js" "random.pde" "Random demo" "random.html" randomDemo

randomDemo :: ProcScript
randomDemo = execScriptM $ do
  vi <- newVar 0
  vj <- newVar 0
  rv <- newVar 0
  gv <- newVar 0
  bv <- newVar 0
  on Setup $ do
     size screenWidth screenHeight
     background $ Color 255 255 255 255
     setFrameRate 30
  on Draw $ do
     strokeWeight $ div screenWidth 40
     -- Random color
     random rv 0 50
     r <- pround <$> readVar rv
     random gv 0 255
     g <- pround <$> readVar gv
     random bv 0 255
     b <- pround <$> readVar bv
     stroke $ Color r g b 100
     -- Top position
     i <- readVar vi
     -- Bottom position
     random vj 0 (intToFloat screenWidth)
     j <- readVar vj
     -- Line
     line (intToFloat i,0) (j,intToFloat screenHeight)
     -- Update top position
     ifM (i #>= screenWidth)
         (writeVar vi 0)
         (writeVar vi $ i + div screenWidth 250)