Rework dimmable audio stream
This commit is contained in:
@@ -0,0 +1,50 @@
|
|||||||
|
namespace Zennysoft.Game.Implementation;
|
||||||
|
|
||||||
|
using Chickensoft.GodotNodeInterfaces;
|
||||||
|
using Godot;
|
||||||
|
using Zennysoft.Game.Abstractions;
|
||||||
|
|
||||||
|
public partial class DimmableAudioStreamPlayer3D : AudioStreamPlayer3D, IDimmableAudioStreamPlayer
|
||||||
|
{
|
||||||
|
#region Constants
|
||||||
|
// -60 to -80 is considered inaudible for decibels.
|
||||||
|
public const float VOLUME_DB_INAUDIBLE = -80f;
|
||||||
|
public const double FADE_DURATION = 3d; // seconds
|
||||||
|
#endregion Constants
|
||||||
|
|
||||||
|
public ITween? FadeTween { get; set; }
|
||||||
|
|
||||||
|
public float InitialVolumeDb;
|
||||||
|
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
InitialVolumeDb = VolumeDb;
|
||||||
|
VolumeDb = VOLUME_DB_INAUDIBLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FadeIn()
|
||||||
|
{
|
||||||
|
SetupFade(InitialVolumeDb, Tween.EaseType.Out);
|
||||||
|
Play();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FadeOut()
|
||||||
|
{
|
||||||
|
SetupFade(VOLUME_DB_INAUDIBLE, Tween.EaseType.In);
|
||||||
|
FadeTween!.TweenCallback(Callable.From(Stop));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetupFade(float volumeDb, Tween.EaseType ease)
|
||||||
|
{
|
||||||
|
FadeTween?.Kill();
|
||||||
|
|
||||||
|
FadeTween = GodotInterfaces.Adapt<ITween>(CreateTween());
|
||||||
|
|
||||||
|
FadeTween.TweenProperty(
|
||||||
|
this,
|
||||||
|
"volume_db",
|
||||||
|
volumeDb,
|
||||||
|
FADE_DURATION
|
||||||
|
).SetTrans(Tween.TransitionType.Circ).SetEase(ease);
|
||||||
|
}
|
||||||
|
}
|
||||||
5
Zennysoft.Game.Ma/src/audio/AmbientSFXPlayer3D.cs
Normal file
5
Zennysoft.Game.Ma/src/audio/AmbientSFXPlayer3D.cs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
using Zennysoft.Game.Implementation;
|
||||||
|
|
||||||
|
public partial class AmbientSFXPlayer3D : DimmableAudioStreamPlayer3D
|
||||||
|
{
|
||||||
|
}
|
||||||
1
Zennysoft.Game.Ma/src/audio/AmbientSFXPlayer3D.cs.uid
Normal file
1
Zennysoft.Game.Ma/src/audio/AmbientSFXPlayer3D.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://b83kye8yinfxs
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
using Chickensoft.AutoInject;
|
using Chickensoft.AutoInject;
|
||||||
using Chickensoft.Introspection;
|
using Chickensoft.Introspection;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using System.Linq;
|
||||||
|
using Zennysoft.Game.Abstractions;
|
||||||
using Zennysoft.Ma.Adapter;
|
using Zennysoft.Ma.Adapter;
|
||||||
|
|
||||||
namespace Zennysoft.Game.Ma;
|
namespace Zennysoft.Game.Ma;
|
||||||
@@ -19,6 +21,8 @@ public partial class Overworld : SpecialFloor, IDungeonFloor
|
|||||||
|
|
||||||
[Node] private Area3D RestoreArea { get; set; } = default!;
|
[Node] private Area3D RestoreArea { get; set; } = default!;
|
||||||
|
|
||||||
|
[Node] private Node DimmableAudio { get; set; } = default!;
|
||||||
|
|
||||||
private Timer RestoreTimer { get; set; }
|
private Timer RestoreTimer { get; set; }
|
||||||
|
|
||||||
public override void InitializeDungeon()
|
public override void InitializeDungeon()
|
||||||
@@ -32,6 +36,17 @@ public partial class Overworld : SpecialFloor, IDungeonFloor
|
|||||||
RestoreTimer.Timeout += RestoreTimer_Timeout;
|
RestoreTimer.Timeout += RestoreTimer_Timeout;
|
||||||
AddChild(RestoreTimer);
|
AddChild(RestoreTimer);
|
||||||
FloorIsLoaded = true;
|
FloorIsLoaded = true;
|
||||||
|
|
||||||
|
var dimmableAudio = DimmableAudio.GetChildren().OfType<IDimmableAudioStreamPlayer>();
|
||||||
|
foreach (var dimmable in dimmableAudio)
|
||||||
|
dimmable.FadeIn();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void FadeOutAudio()
|
||||||
|
{
|
||||||
|
var dimmableAudio = DimmableAudio.GetChildren().OfType<IDimmableAudioStreamPlayer>();
|
||||||
|
foreach (var dimmable in dimmableAudio)
|
||||||
|
dimmable.FadeOut();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RestoreTimer_Timeout()
|
private void RestoreTimer_Timeout()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=557 format=4 uid="uid://dvnc26rebk6o0"]
|
[gd_scene load_steps=558 format=4 uid="uid://dvnc26rebk6o0"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://cuhfkyh3d7noa" path="res://src/map/dungeon/code/Overworld.cs" id="1_5hmt3"]
|
[ext_resource type="Script" uid="uid://cuhfkyh3d7noa" path="res://src/map/dungeon/code/Overworld.cs" id="1_5hmt3"]
|
||||||
[ext_resource type="Texture2D" uid="uid://co6h8vyi11sl2" path="res://src/map/overworld/Models/Overworld_CLOUD_RINGS_INNER_63.png" id="2_g6b7b"]
|
[ext_resource type="Texture2D" uid="uid://co6h8vyi11sl2" path="res://src/map/overworld/Models/Overworld_CLOUD_RINGS_INNER_63.png" id="2_g6b7b"]
|
||||||
@@ -86,6 +86,7 @@
|
|||||||
[ext_resource type="Texture2D" uid="uid://cpuhjnogiqlm3" path="res://src/map/overworld/Models/Overworld_optimized_Pass 1_leafs3.png" id="64_28ka5"]
|
[ext_resource type="Texture2D" uid="uid://cpuhjnogiqlm3" path="res://src/map/overworld/Models/Overworld_optimized_Pass 1_leafs3.png" id="64_28ka5"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dq63vmmpqlww7" path="res://src/map/overworld/Models/Overworld_optimized_Pass 1_VINE.png" id="65_nhnhu"]
|
[ext_resource type="Texture2D" uid="uid://dq63vmmpqlww7" path="res://src/map/overworld/Models/Overworld_optimized_Pass 1_VINE.png" id="65_nhnhu"]
|
||||||
[ext_resource type="Texture2D" uid="uid://wqbflec631rm" path="res://src/map/overworld/Models/Overworld_optimized_Pass 1_BANYAN_LEAVES.png" id="66_plu1v"]
|
[ext_resource type="Texture2D" uid="uid://wqbflec631rm" path="res://src/map/overworld/Models/Overworld_optimized_Pass 1_BANYAN_LEAVES.png" id="66_plu1v"]
|
||||||
|
[ext_resource type="Script" uid="uid://b83kye8yinfxs" path="res://src/audio/AmbientSFXPlayer3D.cs" id="66_q7hpd"]
|
||||||
[ext_resource type="Texture2D" uid="uid://ck2milaawr3ef" path="res://src/map/overworld/Models/Overworld_optimized_Pass 1_BANYAN_LEAVES2.png" id="67_shdaj"]
|
[ext_resource type="Texture2D" uid="uid://ck2milaawr3ef" path="res://src/map/overworld/Models/Overworld_optimized_Pass 1_BANYAN_LEAVES2.png" id="67_shdaj"]
|
||||||
[ext_resource type="Texture2D" uid="uid://c38grr8d22ukg" path="res://src/map/assets/Overworld Assetts/cloudscape.png" id="67_uyygh"]
|
[ext_resource type="Texture2D" uid="uid://c38grr8d22ukg" path="res://src/map/assets/Overworld Assetts/cloudscape.png" id="67_uyygh"]
|
||||||
[ext_resource type="Texture2D" uid="uid://c5jloiaiy7iug" path="res://src/map/overworld/Models/Overworld_optimized_Pass 1_BANYAN_LEAVES_3.png" id="68_8o0x4"]
|
[ext_resource type="Texture2D" uid="uid://c5jloiaiy7iug" path="res://src/map/overworld/Models/Overworld_optimized_Pass 1_BANYAN_LEAVES_3.png" id="68_8o0x4"]
|
||||||
@@ -10823,81 +10824,79 @@ material = SubResource("FogMaterial_b6pah")
|
|||||||
[node name="Audio" type="Node3D" parent="Node3D"]
|
[node name="Audio" type="Node3D" parent="Node3D"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -350.758, -3.90238, 113.556)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -350.758, -3.90238, 113.556)
|
||||||
|
|
||||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="Node3D/Audio"]
|
[node name="DimmableAudio" type="Node3D" parent="Node3D/Audio"]
|
||||||
autoplay = true
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(1.51515, 0, 0, 0, 1.51515, 0, 0, 0, 1.51515, 137.047, -0.658938, -5.82563)
|
||||||
|
|
||||||
[node name="AUDIO" type="Node3D" parent="Node3D/Audio/AudioStreamPlayer"]
|
[node name="Interior" type="AudioStreamPlayer3D" parent="Node3D/Audio/DimmableAudio"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -203.193, -3.01047, 66.0116)
|
|
||||||
|
|
||||||
[node name="Interior" type="AudioStreamPlayer3D" parent="Node3D/Audio/AudioStreamPlayer/AUDIO"]
|
|
||||||
process_mode = 3
|
process_mode = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.4453, 0, 5.97604)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.4453, 0, 5.97604)
|
||||||
stream = ExtResource("2_wbbo3")
|
stream = ExtResource("2_wbbo3")
|
||||||
volume_db = 5.275
|
volume_db = 5.275
|
||||||
unit_size = 10.55
|
unit_size = 10.55
|
||||||
max_db = -3.264
|
max_db = -3.264
|
||||||
autoplay = true
|
|
||||||
max_distance = 100.0
|
max_distance = 100.0
|
||||||
bus = &"AMBIENT"
|
bus = &"AMBIENT"
|
||||||
|
script = ExtResource("66_q7hpd")
|
||||||
|
|
||||||
[node name="Interior2" type="AudioStreamPlayer3D" parent="Node3D/Audio/AudioStreamPlayer/AUDIO"]
|
[node name="Interior2" type="AudioStreamPlayer3D" parent="Node3D/Audio/DimmableAudio"]
|
||||||
process_mode = 3
|
process_mode = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -231.692, 6.43338, -92.712)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -231.692, 6.43338, -92.712)
|
||||||
stream = ExtResource("2_wbbo3")
|
stream = ExtResource("2_wbbo3")
|
||||||
volume_db = 5.275
|
volume_db = 5.275
|
||||||
unit_size = 10.55
|
unit_size = 10.55
|
||||||
max_db = -3.264
|
max_db = -3.264
|
||||||
autoplay = true
|
|
||||||
max_distance = 54.99
|
max_distance = 54.99
|
||||||
bus = &"AMBIENT"
|
bus = &"AMBIENT"
|
||||||
|
script = ExtResource("66_q7hpd")
|
||||||
|
|
||||||
[node name="Ocean" type="AudioStreamPlayer3D" parent="Node3D/Audio/AudioStreamPlayer/AUDIO"]
|
[node name="Ocean" type="AudioStreamPlayer3D" parent="Node3D/Audio/DimmableAudio"]
|
||||||
process_mode = 3
|
process_mode = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -210.527, -9.55156, -81.5173)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -210.527, -9.55156, -81.5173)
|
||||||
stream = ExtResource("3_pvi8n")
|
stream = ExtResource("3_pvi8n")
|
||||||
volume_db = 8.791
|
volume_db = 8.791
|
||||||
unit_size = 4.51
|
unit_size = 4.51
|
||||||
max_db = -13.154
|
max_db = -13.154
|
||||||
autoplay = true
|
|
||||||
max_distance = 247.56
|
max_distance = 247.56
|
||||||
bus = &"AMBIENT"
|
bus = &"AMBIENT"
|
||||||
attenuation_filter_cutoff_hz = 20500.0
|
attenuation_filter_cutoff_hz = 20500.0
|
||||||
|
script = ExtResource("66_q7hpd")
|
||||||
|
|
||||||
[node name="Ocean2" type="AudioStreamPlayer3D" parent="Node3D/Audio/AudioStreamPlayer/AUDIO"]
|
[node name="Ocean2" type="AudioStreamPlayer3D" parent="Node3D/Audio/DimmableAudio"]
|
||||||
process_mode = 3
|
process_mode = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 109.176, -130.646, -48.6352)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 109.176, -130.646, -48.6352)
|
||||||
stream = ExtResource("3_pvi8n")
|
stream = ExtResource("3_pvi8n")
|
||||||
volume_db = 30.769
|
volume_db = 30.769
|
||||||
unit_size = 1.77
|
unit_size = 1.77
|
||||||
max_db = -10.353
|
max_db = -10.353
|
||||||
autoplay = true
|
|
||||||
max_distance = 157.54
|
max_distance = 157.54
|
||||||
max_polyphony = 2
|
max_polyphony = 2
|
||||||
bus = &"AMBIENT"
|
bus = &"AMBIENT"
|
||||||
attenuation_filter_db = -34.0
|
attenuation_filter_db = -34.0
|
||||||
|
script = ExtResource("66_q7hpd")
|
||||||
|
|
||||||
[node name="Ocean3" type="AudioStreamPlayer3D" parent="Node3D/Audio/AudioStreamPlayer/AUDIO"]
|
[node name="Ocean3" type="AudioStreamPlayer3D" parent="Node3D/Audio/DimmableAudio"]
|
||||||
process_mode = 3
|
process_mode = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -329.209, -9.13597, -39.3283)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -329.209, -9.13597, -39.3283)
|
||||||
stream = ExtResource("3_pvi8n")
|
stream = ExtResource("3_pvi8n")
|
||||||
volume_db = 30.769
|
volume_db = 30.769
|
||||||
unit_size = 11.1
|
unit_size = 11.1
|
||||||
max_db = -5.078
|
max_db = -5.078
|
||||||
autoplay = true
|
|
||||||
max_distance = 90.02
|
max_distance = 90.02
|
||||||
max_polyphony = 2
|
max_polyphony = 2
|
||||||
bus = &"AMBIENT"
|
bus = &"AMBIENT"
|
||||||
attenuation_filter_cutoff_hz = 691.0
|
attenuation_filter_cutoff_hz = 691.0
|
||||||
attenuation_filter_db = -34.0
|
attenuation_filter_db = -34.0
|
||||||
|
script = ExtResource("66_q7hpd")
|
||||||
|
|
||||||
[node name="Waterfall" type="AudioStreamPlayer3D" parent="Node3D/Audio/AudioStreamPlayer/AUDIO"]
|
[node name="Waterfall" type="AudioStreamPlayer3D" parent="Node3D/Audio/DimmableAudio"]
|
||||||
process_mode = 3
|
process_mode = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -107.057, 0, -48.0532)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -107.057, 0, -48.0532)
|
||||||
stream = ExtResource("3_c2gp5")
|
stream = ExtResource("3_c2gp5")
|
||||||
volume_db = 2.774
|
volume_db = 2.774
|
||||||
autoplay = true
|
|
||||||
max_distance = 116.36
|
max_distance = 116.36
|
||||||
bus = &"AMBIENT"
|
bus = &"AMBIENT"
|
||||||
|
script = ExtResource("66_q7hpd")
|
||||||
|
|
||||||
[node name="VFX" type="Node3D" parent="Node3D"]
|
[node name="VFX" type="Node3D" parent="Node3D"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -350.758, -3.90238, 113.556)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -350.758, -3.90238, 113.556)
|
||||||
|
|||||||
Reference in New Issue
Block a user