packages feed

roguestar-gl-0.6.0.0: src/Initialization.hs

{-# LANGUAGE Arrows, OverloadedStrings #-}

module Initialization
    (initialize,
     Initialization(..))
    where

import PrintText
import Control.Monad
import Actions
import Keymaps.Keymaps
import CommandLine
import Keymaps.BuiltinKeymaps
import RenderingControl
import Driver
import Animation
import RSAGL.Scene
import Models.Library
import System.Timeout
import System.Exit
import Globals
import Control.Concurrent.STM
import Control.Concurrent
import Statistics
import Config
import DrawString

data Initialization = Initialization {
    init_opts :: CommandLineOptions,
    init_keymap :: Keymap,
    init_scene_var :: TVar (Maybe Scene),
    init_globals :: Globals,
    init_driver_object :: DriverObject,
    init_print_text_object :: PrintTextObject,
    init_animation_object :: RoguestarAnimationObject,
    init_library :: Library,
    init_display_statistics :: Statistics,
    init_scene_statistics :: Statistics }

initialize :: DrawString -> [String] -> IO Initialization
initialize draw_strategy args =
    do let opts = parseCommandLine args
       let keymap = findKeymapOrDefault $ keymap_name opts
       scene_var <- newTVarIO Nothing
       globals <- defaultGlobals
       driver_object <- newDriverObject
       print_text_object <- newPrintTextObject draw_strategy
       animation_object <- newRoguestarAnimationObject mainAnimationLoop
       lib <- newLibrary
       display_statistics <- newStatistics "rendering"
       scene_statistics <- newStatistics "scene"
       return $ Initialization {
           init_opts = opts,
           init_keymap = keymap,
           init_scene_var = scene_var,
           init_globals = globals,
           init_driver_object = driver_object,
           init_print_text_object = print_text_object,
           init_animation_object = animation_object,
           init_library = lib,
           init_display_statistics = display_statistics,
           init_scene_statistics = scene_statistics }