module ResourceTracker ( ResourceTracker() , emptyResourceTracker , getImage , storeImage , getSound , storeSound ) where import Graphics.Gloss.Data.Picture (Picture) import qualified Graphics.Gloss.Data.Picture as GP import Data.Map (Map) import qualified Data.Map as M -- import Control.Monad.State import Sound.ALUT data ResourceTracker = ResourceTracker { images :: Map String Picture , sounds :: Map String Buffer -- , defaultSound :: Buffer } deriving (Show) emptyResourceTracker = ResourceTracker { images = M.empty , sounds = M.empty } getImage :: ResourceTracker -> String -> Maybe Picture getImage rt filename = M.lookup filename (images rt) storeImage :: ResourceTracker -> String -> Picture -> ResourceTracker storeImage rt filename pic = let nimages = M.insert filename pic (images rt) in rt { images = nimages } getSound :: ResourceTracker -> String -> Maybe Buffer getSound rt filename = M.lookup filename (sounds rt) storeSound :: ResourceTracker -> String -> Buffer -> ResourceTracker storeSound rt filename buffer = let buffers' = M.insert filename buffer (sounds rt) in rt { sounds = buffers' }