38 lines
929 B
Nim
38 lines
929 B
Nim
when defined(NoSFML) or defined(NoChipmunk):
|
|
{.error.}
|
|
import sfml_audio, sfml_stuff, sg_assets, chipmunk
|
|
const
|
|
MinDistance* = 350.0
|
|
Attenuation* = 20.0
|
|
var
|
|
liveSounds: seq[PSound] = @[]
|
|
deadSounds: seq[PSound] = @[]
|
|
|
|
proc playSound*(sound: PSoundRecord, pos: TVector) =
|
|
if sound.isNil or sound.soundBuf.isNil: return
|
|
var s: PSound
|
|
if deadSounds.len == 0:
|
|
s = sfml_audio.newSound()
|
|
s.setLoop false
|
|
s.setRelativeToListener true
|
|
s.setAttenuation Attenuation
|
|
s.setMinDistance MinDistance
|
|
else:
|
|
s = deadSounds.pop()
|
|
s.setPosition(vec3f(pos.x, 0, pos.y))
|
|
s.setBuffer(sound.soundBuf)
|
|
s.play()
|
|
liveSounds.add s
|
|
|
|
proc updateSoundBuffer*() =
|
|
var i = 0
|
|
while i < len(liveSounds):
|
|
if liveSounds[i].getStatus == Stopped:
|
|
deadSounds.add liveSounds[i]
|
|
liveSounds.del i
|
|
else:
|
|
inc i
|
|
|
|
proc report*() =
|
|
echo "live: ", liveSounds.len
|
|
echo "dead: ", deadSounds.len
|