80 lines
2.3 KiB
Haskell
80 lines
2.3 KiB
Haskell
{-# 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
|
|
|
|
import Control.Monad (when)
|
|
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
|
|
import Data.Maybe
|
|
|
|
import System.Exit (exitFailure)
|
|
|
|
import Foreign.C.Types (CInt(..))
|
|
|
|
import Types
|
|
|
|
import Floorplan
|
|
|
|
import Debug.Trace
|
|
|
|
foreign import ccall unsafe "glewInit"
|
|
glewInit :: IO CInt
|
|
|
|
load :: IO UserData
|
|
load = do
|
|
_ <- glewInit
|
|
nvg <- createGL3 (S.fromList [Antialias, StencilStrokes])
|
|
subs <- Subsystems
|
|
<$> (Window <$> newTVarIO [])
|
|
<*> (Mouse <$> newTVarIO [])
|
|
(ws, _) <- yieldSystemT (0, defWorld) (return ())
|
|
mwallasc <- createImage nvg (FileName "assets/walls/wall_asc.png") 0
|
|
mwalldesc <- createImage nvg (FileName "assets/walls/wall_desc.png") 0
|
|
mwallcornern <- createImage nvg (FileName "assets/walls/wall_corner_n.png") 0
|
|
mwallcornere <- createImage nvg (FileName "assets/walls/wall_corner_e.png") 0
|
|
mwallcorners <- createImage nvg (FileName "assets/walls/wall_corner_s.png") 0
|
|
mwallcornerw <- createImage nvg (FileName "assets/walls/wall_corner_w.png") 0
|
|
mwalltne <- createImage nvg (FileName "assets/walls/wall_t_ne.png") 0
|
|
mwalltse <- createImage nvg (FileName "assets/walls/wall_t_se.png") 0
|
|
mwalltsw <- createImage nvg (FileName "assets/walls/wall_t_sw.png") 0
|
|
mwalltnw <- createImage nvg (FileName "assets/walls/wall_t_nw.png") 0
|
|
mwallcross <- createImage nvg (FileName "assets/walls/wall_cross.png") 0
|
|
_ <- createFont nvg "bedstead"
|
|
(FileName "assets/font/Bedstead-Semicondensed.ttf")
|
|
let mwalls = [ mwallasc, mwalldesc,
|
|
mwallcornern, mwallcornere, mwallcorners, mwallcornerw,
|
|
mwalltne, mwalltse, mwalltsw, mwalltnw,
|
|
mwallcross ]
|
|
when (any isNothing mwalls) $ do
|
|
logIO Error "Failed to load walls"
|
|
exitFailure
|
|
let walls = zipWith (\a b -> (a, fromJust b)) [ImgWallAsc ..] mwalls
|
|
return UserData
|
|
{ state = Menu
|
|
, subsystems = subs
|
|
, assetImages = M.fromList
|
|
walls
|
|
, assetFonts = M.fromList
|
|
[ (FontBedstead, "bedstead")
|
|
]
|
|
, nano = nvg
|
|
, uuid = []
|
|
, worldState = ws
|
|
, stateData = None
|
|
}
|