tracer/src/Init.hs

62 lines
1.2 KiB
Haskell
Raw Normal View History

2018-02-07 00:18:16 +00:00
{-# LANGUAGE ForeignFunctionInterface #-}
module Init where
import Affection as A
import SDL (($=))
import qualified SDL
import qualified Graphics.Rendering.OpenGL as GL
import NanoVG hiding (V2(..), V3(..))
import Linear
2018-02-25 09:30:13 +00:00
import Control.Monad (when)
2018-02-07 00:18:16 +00:00
import Control.Monad.IO.Class (liftIO)
import Control.Concurrent.STM
import qualified Data.Set as S
import qualified Data.Map.Strict as M
import Data.Ecstasy
2018-02-25 09:30:13 +00:00
import Data.Maybe
import System.Exit (exitFailure)
2018-02-07 00:18:16 +00:00
import Foreign.C.Types (CInt(..))
import Types
2018-02-15 18:42:07 +00:00
import Floorplan
import Debug.Trace
2018-02-07 00:18:16 +00:00
foreign import ccall unsafe "glewInit"
glewInit :: IO CInt
load :: IO UserData
load = do
_ <- glewInit
2018-02-18 03:11:12 +00:00
nvg <- createGL3 (S.fromList [StencilStrokes])
2018-02-07 00:18:16 +00:00
subs <- Subsystems
<$> (Window <$> newTVarIO [])
<*> (Mouse <$> newTVarIO [])
2018-02-25 01:03:25 +00:00
(ws, _) <- yieldSystemT (0, defWorld) (return ())
2018-02-25 09:30:13 +00:00
mwall <- createImage nvg (FileName "assets/walls/wall_desc.png") 0
when (isNothing mwall) $ do
logIO Error "Failed to load wall"
exitFailure
2018-02-07 00:18:16 +00:00
return UserData
{ state = Menu
, subsystems = subs
2018-02-25 09:30:13 +00:00
, assetImages = M.fromList
[ (ImgWall, fromJust mwall)
]
2018-02-07 00:18:16 +00:00
, nano = nvg
, uuid = []
, worldState = ws
, stateData = None
2018-02-07 00:18:16 +00:00
}