{-# LANGUAGE TemplateHaskell #-} module Sound.Data where import qualified SDL.Mixer as Mix import qualified IntMapHelp as IM --import qualified Data.Map.Strict as M import Control.Lens import Geometry.Data import Data.Word (Word8) import Data.Int (Int16) data SoundStatus = SoundStatus {_playStatus :: PlayStatus ,_isLooping :: Bool } deriving (Eq,Ord,Show) -- TODO make this more sensible (use product rather than union in some cases) data PlayStatus = JustStartedPlaying | Playing | ToStart | ToContinueStart | ToStop deriving (Eq,Ord,Show) newtype SoundID = SoundID { _getSoundID :: Int } deriving (Eq,Ord,Show) newtype SoundData = SoundData {_loadedChunks :: IM.IntMap Mix.Chunk } data Sound = Sound { _soundTime :: Maybe Int , _soundStatus :: SoundStatus , _soundChannel :: Maybe Mix.Channel , _soundAngDist :: Maybe (Int16,Word8) -- why do BOTH of , _soundPos :: Point2 -- these exist? , _soundVolume :: Float , _soundVolumeFraction :: Float -- this needs cleaning up/combining , _soundChunkID :: SoundID } deriving (Eq,Ord,Show) makeLenses ''SoundData makeLenses ''Sound makeLenses ''SoundStatus