mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2024-12-12 08:25:13 +00:00
Add mute and max volume options to FunkinSound.
This commit is contained in:
parent
c23ddb5c5a
commit
0f5be08c41
|
@ -8,6 +8,7 @@ import flixel.sound.FlxSound;
|
||||||
import flixel.group.FlxGroup.FlxTypedGroup;
|
import flixel.group.FlxGroup.FlxTypedGroup;
|
||||||
import flixel.system.FlxAssets.FlxSoundAsset;
|
import flixel.system.FlxAssets.FlxSoundAsset;
|
||||||
import funkin.util.tools.ICloneable;
|
import funkin.util.tools.ICloneable;
|
||||||
|
import flixel.math.FlxMath;
|
||||||
import openfl.Assets;
|
import openfl.Assets;
|
||||||
#if (openfl >= "8.0.0")
|
#if (openfl >= "8.0.0")
|
||||||
import openfl.utils.AssetType;
|
import openfl.utils.AssetType;
|
||||||
|
@ -20,8 +21,29 @@ import openfl.utils.AssetType;
|
||||||
@:nullSafety
|
@:nullSafety
|
||||||
class FunkinSound extends FlxSound implements ICloneable<FunkinSound>
|
class FunkinSound extends FlxSound implements ICloneable<FunkinSound>
|
||||||
{
|
{
|
||||||
|
static final MAX_VOLUME:Float = 2.0;
|
||||||
|
|
||||||
static var cache(default, null):FlxTypedGroup<FunkinSound> = new FlxTypedGroup<FunkinSound>();
|
static var cache(default, null):FlxTypedGroup<FunkinSound> = new FlxTypedGroup<FunkinSound>();
|
||||||
|
|
||||||
|
public var muted(default, set):Bool = false;
|
||||||
|
|
||||||
|
function set_muted(value:Bool):Bool
|
||||||
|
{
|
||||||
|
if (value == muted) return value;
|
||||||
|
muted = value;
|
||||||
|
updateTransform();
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
override function set_volume(value:Float):Float
|
||||||
|
{
|
||||||
|
// Uncap the volume.
|
||||||
|
fixMaxVolume();
|
||||||
|
_volume = FlxMath.bound(value, 0.0, MAX_VOLUME);
|
||||||
|
updateTransform();
|
||||||
|
return _volume;
|
||||||
|
}
|
||||||
|
|
||||||
public var paused(get, never):Bool;
|
public var paused(get, never):Bool;
|
||||||
|
|
||||||
function get_paused():Bool
|
function get_paused():Bool
|
||||||
|
@ -84,6 +106,17 @@ class FunkinSound extends FlxSound implements ICloneable<FunkinSound>
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fixMaxVolume():Void
|
||||||
|
{
|
||||||
|
#if lime_openal
|
||||||
|
// This code is pretty fragile, it reaches through 5 layers of private access.
|
||||||
|
@:privateAccess
|
||||||
|
var handle = this?._channel?.__source?.__backend?.handle;
|
||||||
|
if (handle == null) return;
|
||||||
|
lime.media.openal.AL.sourcef(handle, lime.media.openal.AL.MAX_GAIN, MAX_VOLUME);
|
||||||
|
#end
|
||||||
|
}
|
||||||
|
|
||||||
public override function play(forceRestart:Bool = false, startTime:Float = 0, ?endTime:Float):FunkinSound
|
public override function play(forceRestart:Bool = false, startTime:Float = 0, ?endTime:Float):FunkinSound
|
||||||
{
|
{
|
||||||
if (!exists) return this;
|
if (!exists) return this;
|
||||||
|
@ -161,6 +194,18 @@ class FunkinSound extends FlxSound implements ICloneable<FunkinSound>
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call after adjusting the volume to update the sound channel's settings.
|
||||||
|
*/
|
||||||
|
@:allow(flixel.sound.FlxSoundGroup)
|
||||||
|
override function updateTransform():Void
|
||||||
|
{
|
||||||
|
_transform.volume = #if FLX_SOUND_SYSTEM ((FlxG.sound.muted || this.muted) ? 0 : 1) * FlxG.sound.volume * #end
|
||||||
|
(group != null ? group.volume : 1) * _volume * _volumeAdjust;
|
||||||
|
|
||||||
|
if (_channel != null) _channel.soundTransform = _transform;
|
||||||
|
}
|
||||||
|
|
||||||
public function clone():FunkinSound
|
public function clone():FunkinSound
|
||||||
{
|
{
|
||||||
var sound:FunkinSound = new FunkinSound();
|
var sound:FunkinSound = new FunkinSound();
|
||||||
|
|
Loading…
Reference in a new issue