packages feed

accelerate-examples-0.15.1.0: examples/ray/Config.hs

{-# LANGUAGE TemplateHaskell #-}

module Config where

import Data.Label
import System.Console.GetOpt

data Config = Config
  {
    _configWidth        :: Int
  , _configHeight       :: Int
  , _configZoom         :: Int
  , _configFieldOfView  :: Int
  , _configBounces      :: Int
  , _configFramerate    :: Int
  }
  deriving Show

$(mkLabels [''Config])

defaults :: Config
defaults = Config
  { _configWidth        = 800
  , _configHeight       = 600
  , _configFieldOfView  = 100
  , _configZoom         = 1
  , _configBounces      = 4
  , _configFramerate    = 30
  }


options :: [OptDescr (Config -> Config)]
options =
  [ Option []   ["width"]       (ReqArg (set configWidth . read) "INT")         (describe configWidth "visualisation width")
  , Option []   ["height"]      (ReqArg (set configHeight . read) "INT")        (describe configHeight "visualisation height")
  , Option []   ["zoom"]        (ReqArg (set configZoom . read) "INT")          (describe configZoom "pixel replication factor")
  , Option []   ["fov"]         (ReqArg (set configFieldOfView . read) "INT")   (describe configFieldOfView "field of view")
  , Option []   ["bounces"]     (ReqArg (set configBounces . read) "INT")       (describe configBounces "ray bounce limit")
  , Option []   ["fps"]         (ReqArg (set configFramerate . read) "INT")     (describe configFramerate "frames per second")
  ]
  where
    describe f msg      = msg ++ " (" ++ show (get f defaults) ++ ")"

header :: [String]
header =
  [ "accelerate-ray (c) [2013..2014] The Accelerate Team"
  , ""
  , "Usage: accelerate-ray [OPTIONS]"
  , ""
  ]

footer :: [String]
footer =
  [ ""
  , "Runtime usage:"
  , "     WASD         move the eye position"
  , "     arrows       move the light source"
  , ""
  ]