Add support for one time sounds, crashes if more than 8 play at once
This commit is contained in:
@@ -21,6 +21,8 @@ import Picture
|
|||||||
import Picture.Render
|
import Picture.Render
|
||||||
import Picture.Preload
|
import Picture.Preload
|
||||||
|
|
||||||
|
import Sound
|
||||||
|
|
||||||
import Preload
|
import Preload
|
||||||
|
|
||||||
import Control.Concurrent
|
import Control.Concurrent
|
||||||
@@ -61,6 +63,7 @@ main = do
|
|||||||
(wallsForGloom' w)
|
(wallsForGloom' w)
|
||||||
(lightsForGloom' w)
|
(lightsForGloom' w)
|
||||||
(draw blank w)
|
(draw blank w)
|
||||||
|
playSoundQueue (_soundData preData) (_soundQueue w)
|
||||||
return preData
|
return preData
|
||||||
--renderPicture' preData (_windowX w,_windowY w) (Circle 5)
|
--renderPicture' preData (_windowX w,_windowY w) (Circle 5)
|
||||||
-- renderPicture' preData
|
-- renderPicture' preData
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ update w
|
|||||||
$ updateCreatures
|
$ updateCreatures
|
||||||
$ updateBlocks -- $ zoning
|
$ updateBlocks -- $ zoning
|
||||||
$ updateSeenWalls
|
$ updateSeenWalls
|
||||||
|
$ updateSoundQueue
|
||||||
w
|
w
|
||||||
w2 = -- updateWeaponCounters $
|
w2 = -- updateWeaponCounters $
|
||||||
simpleCrSprings
|
simpleCrSprings
|
||||||
@@ -61,6 +62,8 @@ update w
|
|||||||
where (x,y) = zoneOfPoint $ _clPos cr
|
where (x,y) = zoneOfPoint $ _clPos cr
|
||||||
cid = _clID cr
|
cid = _clID cr
|
||||||
|
|
||||||
|
updateSoundQueue = set soundQueue []
|
||||||
|
|
||||||
--updateSound :: World -> World
|
--updateSound :: World -> World
|
||||||
--updateSound = set soundQueue [] . stepSoundTimers
|
--updateSound = set soundQueue [] . stepSoundTimers
|
||||||
--stepSoundTimers :: World -> IO World
|
--stepSoundTimers :: World -> IO World
|
||||||
|
|||||||
+8
-2
@@ -1,7 +1,13 @@
|
|||||||
module Sound
|
module Sound
|
||||||
where
|
where
|
||||||
|
import Sound.Preload
|
||||||
|
|
||||||
-- ok, the problem here is that we need to be able to return the playing channel
|
import Control.Monad
|
||||||
-- so this thread cannot be a simple observer
|
|
||||||
|
|
||||||
|
import qualified SDL.Mixer as Mix
|
||||||
|
|
||||||
|
import qualified Data.IntMap as IM
|
||||||
|
|
||||||
|
playSoundQueue :: SoundData -> [Int] -> IO ()
|
||||||
|
playSoundQueue sd ns =
|
||||||
|
forM_ ns $ \n -> Mix.play (sd IM.! n)
|
||||||
|
|||||||
+93
-4
@@ -6,8 +6,97 @@ import qualified Data.IntMap as IM
|
|||||||
|
|
||||||
type SoundData = IM.IntMap Mix.Chunk
|
type SoundData = IM.IntMap Mix.Chunk
|
||||||
|
|
||||||
preloadSound :: IO SoundData
|
|
||||||
preloadSound = return IM.empty
|
|
||||||
|
|
||||||
cleanUpSoundPreload :: SoundData -> IO ()
|
cleanUpSoundPreload :: SoundData -> IO ()
|
||||||
cleanUpSoundPreload sd = return ()
|
cleanUpSoundPreload sd = Mix.closeAudio
|
||||||
|
|
||||||
|
|
||||||
|
preloadSound :: IO SoundData
|
||||||
|
preloadSound = do
|
||||||
|
Mix.openAudio Mix.defaultAudio 256
|
||||||
|
-- pFireSound <- Mix.loadWAV "./data/sound/tap3.wav"
|
||||||
|
pFireSound <- Mix.load "./data/sound/tap3.wav"
|
||||||
|
click <- Mix.load "./data/sound/click1.wav"
|
||||||
|
reloadSound' <- Mix.load "./data/sound/reload1.wav"
|
||||||
|
tone440 <- Mix.load "./data/sound/tone440.wav"
|
||||||
|
pickupSound' <- Mix.load "./data/sound/pickUp.wav"
|
||||||
|
putdownSound' <- Mix.load "./data/sound/whiteNoiseFadeOut.wav"
|
||||||
|
fireSound' <- Mix.load "./data/sound/fire1.wav"
|
||||||
|
grenadeBang' <- Mix.load "./data/sound/grenade.wav"
|
||||||
|
tapQuiet' <- Mix.load "./data/sound/tapQuiet.wav"
|
||||||
|
twoStep' <- Mix.load "./data/sound/twoStep.wav"
|
||||||
|
healSound' <- Mix.load "./data/sound/heal.wav"
|
||||||
|
doorSound' <- Mix.load "./data/sound/slideDoor.wav"
|
||||||
|
twoStepSlow' <- Mix.load "./data/sound/twoStepSlow.wav"
|
||||||
|
knifeSound' <- Mix.load "./data/sound/knife.wav"
|
||||||
|
buzzSound' <- Mix.load "./data/sound/buzz.wav"
|
||||||
|
hitSound' <- Mix.load "./data/sound/hit1.wav"
|
||||||
|
autoGunSound' <- Mix.load "./data/sound/autoGun.wav"
|
||||||
|
shotgunSound' <- Mix.load "./data/sound/shotgun.wav"
|
||||||
|
teleSound' <- Mix.load "./data/sound/tele.wav"
|
||||||
|
longGunSound' <- Mix.load "./data/sound/longTap.wav"
|
||||||
|
launcherSound' <- Mix.load "./data/sound/tap4.wav"
|
||||||
|
smokeTrailSound' <- Mix.load "./data/sound/missileLaunch.wav"
|
||||||
|
foot1Sound' <- Mix.load "./data/sound/foot1.wav"
|
||||||
|
foot2Sound' <- Mix.load "./data/sound/foot2.wav"
|
||||||
|
lasSound' <- Mix.load "./data/sound/tone440sawtooth.wav"
|
||||||
|
teslaSound' <- Mix.load "./data/sound/Electrical-Welding.wav"
|
||||||
|
crankSlow' <- Mix.load "./data/sound/crankSlow.wav"
|
||||||
|
autoB' <- Mix.load "./data/sound/autoB.wav"
|
||||||
|
mini' <- Mix.load "./data/sound/mini1.wav"
|
||||||
|
impactA' <- Mix.load "./data/sound/Impact-A.wav"
|
||||||
|
impactB' <- Mix.load "./data/sound/Impact-B.wav"
|
||||||
|
impactC' <- Mix.load "./data/sound/Impact-C.wav"
|
||||||
|
impactD' <- Mix.load "./data/sound/Impact-D.wav"
|
||||||
|
glassShat1' <- Mix.load "./data/sound/Glass-Bottle-Shattering-A1.wav"
|
||||||
|
glassShat2' <- Mix.load "./data/sound/Glass-Bottle-Shattering-A2.wav"
|
||||||
|
glassShat3' <- Mix.load "./data/sound/Glass-Bottle-Shattering-A3.wav"
|
||||||
|
glassShat4' <- Mix.load "./data/sound/Glass-Bottle-Shattering-A4.wav"
|
||||||
|
glass1' <- Mix.load "./data/sound/Small-Piece-Of-Glass-Shattering-A1.wav"
|
||||||
|
glass2' <- Mix.load "./data/sound/Small-Piece-Of-Glass-Shattering-A2.wav"
|
||||||
|
glass3' <- Mix.load "./data/sound/Small-Piece-Of-Glass-Shattering-A3.wav"
|
||||||
|
glass4' <- Mix.load "./data/sound/Small-Piece-Of-Glass-Shattering-A4.wav"
|
||||||
|
foamSpray' <- Mix.load "./data/sound/foamSprayLoop.wav"
|
||||||
|
return $ IM.fromList $ zip [0..]
|
||||||
|
$ [ pFireSound
|
||||||
|
, click
|
||||||
|
, reloadSound'
|
||||||
|
, tone440
|
||||||
|
, pickupSound'
|
||||||
|
, putdownSound'
|
||||||
|
, fireSound'
|
||||||
|
, grenadeBang'
|
||||||
|
, tapQuiet'
|
||||||
|
, twoStep'
|
||||||
|
, healSound'
|
||||||
|
, doorSound'
|
||||||
|
, twoStepSlow'
|
||||||
|
, knifeSound'
|
||||||
|
, buzzSound'
|
||||||
|
, hitSound' --15
|
||||||
|
, autoGunSound'
|
||||||
|
, shotgunSound'
|
||||||
|
, teleSound'
|
||||||
|
, longGunSound'
|
||||||
|
, launcherSound'
|
||||||
|
, smokeTrailSound'
|
||||||
|
, foot1Sound'
|
||||||
|
, foot2Sound'
|
||||||
|
, lasSound'
|
||||||
|
, teslaSound' --25
|
||||||
|
, crankSlow'
|
||||||
|
, autoB'
|
||||||
|
, mini'
|
||||||
|
, impactA'
|
||||||
|
, impactB' --30
|
||||||
|
, impactC'
|
||||||
|
, impactD'
|
||||||
|
, glassShat1' --33
|
||||||
|
, glassShat2'
|
||||||
|
, glassShat3'
|
||||||
|
, glassShat4'
|
||||||
|
, glass1' --37
|
||||||
|
, glass2'
|
||||||
|
, glass3'
|
||||||
|
, glass4' --40
|
||||||
|
, foamSpray'
|
||||||
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user