mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 02:42:49 -04:00
changed sfx player so that now a cutoff distance can be specified on per sound basis as an optional argument to the player
This commit is contained in:
parent
81735f8dee
commit
2f9f3b1b0b
@ -41,7 +41,7 @@ class SfxPlayer:
|
|||||||
"""Return the curent cutoff distance."""
|
"""Return the curent cutoff distance."""
|
||||||
return self.cutoffDistance
|
return self.cutoffDistance
|
||||||
|
|
||||||
def getLocalizedVolume(self, node, listenerNode = None):
|
def getLocalizedVolume(self, node, listenerNode = None, cutoff = None):
|
||||||
"""
|
"""
|
||||||
Get the volume that a sound should be played at if it is
|
Get the volume that a sound should be played at if it is
|
||||||
localized at this node. We compute this wrt the camera
|
localized at this node. We compute this wrt the camera
|
||||||
@ -53,7 +53,7 @@ class SfxPlayer:
|
|||||||
d = node.getDistance(listenerNode)
|
d = node.getDistance(listenerNode)
|
||||||
else:
|
else:
|
||||||
d = node.getDistance(base.cam)
|
d = node.getDistance(base.cam)
|
||||||
if d == None or d > self.cutoffDistance:
|
if d == None or d > cutoff:
|
||||||
volume = 0
|
volume = 0
|
||||||
else:
|
else:
|
||||||
if SfxPlayer.UseInverseSquare:
|
if SfxPlayer.UseInverseSquare:
|
||||||
@ -61,15 +61,19 @@ class SfxPlayer:
|
|||||||
volume = min(1, 1 / (sd*sd or 1))
|
volume = min(1, 1 / (sd*sd or 1))
|
||||||
#print d, sd, volume
|
#print d, sd, volume
|
||||||
else:
|
else:
|
||||||
volume = 1 - (d / (self.cutoffDistance or 1))
|
volume = 1 - (d / (cutoff or 1))
|
||||||
#print d, volume
|
#print d, volume
|
||||||
|
|
||||||
return volume
|
return volume
|
||||||
|
|
||||||
def playSfx(
|
def playSfx(
|
||||||
self, sfx, looping = 0, interrupt = 1, volume = None,
|
self, sfx, looping = 0, interrupt = 1, volume = None,
|
||||||
time = 0.0, node=None, listenerNode = None):
|
time = 0.0, node=None, listenerNode = None, cutoff = None):
|
||||||
if sfx:
|
if sfx:
|
||||||
self.setFinalVolume(sfx, node, volume, listenerNode)
|
if not cutoff:
|
||||||
|
cutoff = self.cutoffDistance
|
||||||
|
|
||||||
|
self.setFinalVolume(sfx, node, volume, listenerNode, cutoff)
|
||||||
|
|
||||||
# dont start over if it's already playing, unless
|
# dont start over if it's already playing, unless
|
||||||
# "interrupt" was specified
|
# "interrupt" was specified
|
||||||
@ -78,13 +82,13 @@ class SfxPlayer:
|
|||||||
sfx.setLoop(looping)
|
sfx.setLoop(looping)
|
||||||
sfx.play()
|
sfx.play()
|
||||||
|
|
||||||
def setFinalVolume(self, sfx, node, volume, listenerNode):
|
def setFinalVolume(self, sfx, node, volume, listenerNode, cutoff = None):
|
||||||
"""Calculate the final volume based on all contributed factors."""
|
"""Calculate the final volume based on all contributed factors."""
|
||||||
# If we have either a node or a volume, we need to adjust the sfx
|
# If we have either a node or a volume, we need to adjust the sfx
|
||||||
# The volume passed in multiplies the distance base volume
|
# The volume passed in multiplies the distance base volume
|
||||||
if node or (volume is not None):
|
if node or (volume is not None):
|
||||||
if node:
|
if node:
|
||||||
finalVolume = self.getLocalizedVolume(node, listenerNode)
|
finalVolume = self.getLocalizedVolume(node, listenerNode, cutoff)
|
||||||
else:
|
else:
|
||||||
finalVolume = 1
|
finalVolume = 1
|
||||||
if volume is not None:
|
if volume is not None:
|
||||||
|
@ -1412,9 +1412,9 @@ class ShowBase(DirectObject.DirectObject):
|
|||||||
|
|
||||||
def playSfx(
|
def playSfx(
|
||||||
self, sfx, looping = 0, interrupt = 1, volume = None,
|
self, sfx, looping = 0, interrupt = 1, volume = None,
|
||||||
time = 0.0, node = None):
|
time = 0.0, node = None, listener = None, cutoff = None):
|
||||||
# This goes through a special player for potential localization
|
# This goes through a special player for potential localization
|
||||||
return self.sfxPlayer.playSfx(sfx, looping, interrupt, volume, time, node)
|
return self.sfxPlayer.playSfx(sfx, looping, interrupt, volume, time, node, listener, cutoff)
|
||||||
|
|
||||||
def playMusic(self, music, looping = 0, interrupt = 1, volume = None, time = 0.0):
|
def playMusic(self, music, looping = 0, interrupt = 1, volume = None, time = 0.0):
|
||||||
if music:
|
if music:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user