{-# LANGUAGE OverloadedStrings #-} module Scenes.Test where import Affection import SDL (($=), get) import qualified SDL import qualified Graphics.Rendering.OpenGL as GL import Control.Concurrent.STM import Control.Monad (void) import Linear -- internal imports import Types import Map import Classes data Test = Test { testMap :: TMVar LevelMap , testLoaded :: TVar Bool } instance Scene Test where initScene = Test <$> newEmptyTMVarIO <*> newTVarIO False loadScene level progress = do atomically $ do void $ takeTMVar progress putTMVar progress (0, "Loading test level...") loadedMap <- constructMap testLevelDesc 0 atomically $ putTMVar (testMap level) loadedMap void $ atomically $ do void $ takeTMVar progress putTMVar progress (0.5, "Loaded test level map!") void $ atomically $ swapTVar (testLoaded level) True let projection = ortho 0 800 0 600 (-1) 1 :: M44 GL.GLfloat view = mkTransformationMat (identity :: M33 GL.GLfloat) (V3 0 0 0) model = mkTransformationMat (identity :: M33 GL.GLfloat) (V3 0 0 0) vertexArray <- newVertexArray bind vertexArray void $ atomically $ do void $ takeTMVar progress putTMVar progress (1, "Loaded graphics!") isSceneLoaded = liftIO . atomically . readTVar . testLoaded update _ _ = return () onEvents _ _ = return () render _ = return () testLevelDesc :: LevelDescriptor testLevelDesc = LevelDescriptor [ (0, "res/maps/00_test/00_test.bmp") ] 0 "res/tiles/00_test/00_test.png" (3, 3)