Fix sound tray playing multiple sounds at once, not appearing in lags

This commit is contained in:
Ralty
2026-03-04 23:10:39 -07:00
committed by Hundrec
parent f02bdc4225
commit 077fbf6978
+33 -28
View File
@@ -64,6 +64,7 @@ class FunkinSoundTray extends FlxSoundTray
}
screenCenter();
y = -height - 10;
volumeUpSound = Paths.sound("soundtray/Volup");
volumeDownSound = Paths.sound("soundtray/Voldown");
@@ -72,9 +73,7 @@ class FunkinSoundTray extends FlxSoundTray
override public function update(ms:Float):Void
{
y = MathUtil.smoothLerpPrecision(y, lerpYPos, ms / 1000, 0.768);
alpha = MathUtil.smoothLerpPrecision(alpha, alphaTarget, ms / 1000, 0.307);
screenCenter();
var elapsed = ms / 1000.0;
// If it has volume, we want to auto-hide after 1 second (1000ms), we simply decrement a timer
var hasVolume:Bool = (!FlxG.sound.muted && FlxG.sound.volume > 0);
@@ -84,21 +83,27 @@ class FunkinSoundTray extends FlxSoundTray
// Animate sound tray thing
if (_timer > 0)
{
_timer -= (ms / 1000);
_timer -= elapsed;
if (_timer <= 0)
{
lerpYPos = -height - 10;
alphaTarget = 0;
}
}
else if (y >= -height)
{
lerpYPos = -height - 10;
alphaTarget = 0;
}
if (y <= -height)
else if (y <= -height)
{
visible = false;
active = false;
}
}
else if (!visible) moveTrayMakeVisible();
else if (!visible)
{
showTray();
}
y = MathUtil.smoothLerpPrecision(y, lerpYPos, elapsed, 0.768);
alpha = MathUtil.smoothLerpPrecision(alpha, alphaTarget, elapsed, 0.307);
screenCenter();
}
override function showIncrement():Void
@@ -114,6 +119,18 @@ class FunkinSoundTray extends FlxSoundTray
}
function moveTrayMakeVisible(up:Bool = false):Void
{
showTray();
if (!silent)
{
// This is a String currently, but there is or was a Flixel PR to change this to a FlxSound or a Sound bject
var sound:Null<String> = FlxG.sound.volume == 1 ? volumeMaxSound : (up ? volumeUpSound : volumeDownSound);
if (sound != null) FlxG.sound.play(sound);
}
}
function showTray():Void
{
_timer = 1;
lerpYPos = 10;
@@ -121,26 +138,14 @@ class FunkinSoundTray extends FlxSoundTray
active = true;
alphaTarget = 1;
for (i in 0..._bars.length)
_bars[i].visible = i < getGlobalVolume(up);
updateBars();
}
function getGlobalVolume(up:Bool = false):Int
function updateBars():Void
{
var globalVolume:Int = Math.round(FlxG.sound.logToLinear(FlxG.sound.volume) * 10);
var globalVolume:Int = FlxG.sound.muted || FlxG.sound.volume == 0 ? 0 : Math.round(FlxG.sound.logToLinear(FlxG.sound.volume) * 10);
if (FlxG.sound.muted || FlxG.sound.volume == 0) globalVolume = 0;
if (!silent)
{
// This is a String currently, but there is or was a Flixel PR to change this to a FlxSound or a Sound bject
var sound:String = up ? volumeUpSound : volumeDownSound;
if (globalVolume == 10) sound = volumeMaxSound;
if (sound != null) FlxG.sound.load(sound).play().volume = 0.3;
}
return globalVolume;
for (i in 0..._bars.length) _bars[i].visible = i < globalVolume;
}
function saveVolumePreferences():Void