Files
loop/src/Sound/Data.hs
T

43 lines
1.2 KiB
Haskell

{-# 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