linden-0: Linden.hs
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Text (Text)
import Data.Tree
import Control.Monad
import Control.Monad.Trans
import Control.Monad.Reader
import Data.Random.Distribution.Normal
import Data.Hashable (hash)
import qualified Network.Wai.Handler.Warp as Warp
import Linden.Types
import Linden.RuleDSL
import Linden.Server
import Linden.Store.Memory
import Paths_linden
rule :: ReaderT FilePath IO Rule
rule = do
basicBranch <- readBranchSym [hash ("basic"::Text)] "branch"
return . compileRules . noDup $ do
b <- curBranch
--cs <- offspring <$> ask
let s = bScale b
angSum <- angleSum
ls <- lightCones
doNothing 100 -- Doing nothing is always an option
when (not . null $ ls) $ do
when (s==1) $ do
addBranch 50 basicBranch 0 tscl 1
when (s==tscl) $ do
addBranch 50 basicBranch 0 tscl 1
a <- lift . lift $ normal 20 10
when (angSum < 180) $ addBranch 1 basicBranch a tscl 1
when (angSum > -180) $ addBranch 1 basicBranch (-a) tscl 1
where
tscl = 1
axiom :: AxiomSource
axiom u t =
return . LS u t 2 [Light 1 (0, 300) (-90) 90 0.7] .
Just . PrettyJSTree $ Node (Branch 0 (Just "branch.png") (2, 0) (2, 19) 0 1 True True (map hash ["basic"::Text]) Nothing 0.5) []
main :: IO ()
main = do
bp <- getDataDir
ms <- memStore
rule' <- return <$> runReaderT rule bp
Warp.runEnv 8080 $ lindenApp bp ms "87fhn34wdfd2" 5.0 axiom rule' (return "")