module StaticInterface where import qualified Graphics.UI.SDL as SDL import qualified Graphics.UI.SDL.TTF as SDL import qualified Graphics.UI.SDL.Mixer as SDL import qualified Graphics.Rendering.OpenGL as GL import qualified Data.Map as M import System.Random import States import Pic import Options import Config -- | Static data: -- this should be viewed as an "internal" datatype -- (used for rendering and input handling); -- caveat: depends on SDL! data Static = Static { images :: Images , fonts :: Fonts , sounds :: Sounds , options :: Options } data Fonts = Fonts { font :: SDL.Font , bigfont :: SDL.Font } data Images = Images { pl_image :: SDLPic , bg_image :: SDLPic , rock_image :: SDLPic , coll_image :: SDLPic , overlay :: SDLPic } data SDLPic = SDLPic { sdl_image :: GL.TextureObject , sdl_dim :: Dim } data SDLSprite a = SDLSprite { sdl_sprite :: SDLPic , sdl_offsets :: M.Map a Int , sdl_tiledim :: Dim } data SDLAnimation = SDLAnimation { sdl_an_sprite :: SDLSprite Int , sdl_an_description :: Int -> Int } sdlPicToSprite :: SDLPic -> SDLSprite () sdlPicToSprite pic@(SDLPic img dim) = SDLSprite pic (M.singleton () 0) dim data Sounds = Sounds { bg_sound :: SDLSound } data SDLSound = SDLSound { sdl_chunk :: SDL.Chunk } emptySounds :: Sounds emptySounds = error "audio turned off -- therefore, audio is not accessible" ------------------------------------------------------------------------------ -- * All the images (abstractly, not as SDL images) ------------------------------------------------------------------------------ picData :: FilePath -> (Int, Int) -> IO Pic picData f d = do img <- getDataFileName f return $ Pic { picpath = img, picdim = d } playerPic = picData "pics/player.png" (64,64) rockPic = picData "pics/rock.png" (64,64) collPic = picData "pics/collectible.png" (64,64) overlayPic = picData "pics/overlay.png" (1600,1200) bgPic = picData "pics/background.png" (800,600) --------------------------------------------------------------------- -- * All the sounds (abstractly) --------------------------------------------------------------------- type Sound = String -- ^ path to the sound data bgSound :: IO Sound bgSound = getDataFileName "sound/background.ogg"