module Dodge.SoundLogic where import Dodge.Data import Control.Lens import qualified Data.Map as M haltSound :: World -> World haltSound w = w pauseSound :: World -> World pauseSound w = w resumeSound :: World -> World resumeSound w = w soundOnce :: Int -> World -> World soundOnce i = over soundQueue ((:) i) soundOnceOrigin :: Int -> SoundOrigin -> World -> World soundOnceOrigin sType so = over sounds (M.insertWith (flip const) so sound) where sound = Sound { _soundType = sType , _soundTime = Nothing , _soundFadeTime = 0 , _soundChannel = Nothing , _soundPos = Nothing } soundFrom :: SoundOrigin -> Int -> Int -> Int -> World -> World soundFrom so sType time fadeTime w = over sounds (M.insertWith f so sound) w where sound = Sound { _soundType = sType , _soundTime = Just time , _soundFadeTime = fadeTime , _soundChannel = Nothing , _soundPos = Nothing } f _ s = s {_soundTime = Just time, _soundFadeTime = fadeTime} soundMultiFrom :: [SoundOrigin] -> Int -> Int -> Int -> World -> World soundMultiFrom [] _ _ _ w = w soundMultiFrom (so:sos) sType time fadeTime w | so `M.member` _sounds w = soundMultiFrom sos sType time fadeTime w | otherwise = over sounds (M.insert so sound) w where sound = Sound { _soundType = sType , _soundTime = Nothing , _soundFadeTime = fadeTime , _soundChannel = Nothing , _soundPos = Nothing } stopSoundFrom :: SoundOrigin -> World -> World stopSoundFrom so = over (sounds . ix so . soundTime) (fmap $ min 0) reloadSound,putDownSound,pickUpSound,fireSound,grenadeBang,healSound,teleSound,twoStepSlowSound :: Int clickSound = 1 reloadSound = 2 pickUpSound = 4 putDownSound = 5 fireSound = 6 grenadeBang = 7 tapQuiet = 8 twoStepSound = 9 healSound = 10 doorSound = 11 twoStepSlowSound = 12 knifeSound = 13 buzzSound = 14 hitSound = 15 autoGunSound = 16 shotgunSound = 17 teleSound = 18 longGunSound = 19 launcherSound = 20 smokeTrailSound = 21 foot1Sound = 22 foot2Sound = 23