Audio fade
This commit is contained in:
@@ -5,6 +5,7 @@ using Godot;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Zennysoft.Game.Abstractions;
|
||||
|
||||
namespace Zennysoft.Game.Ma;
|
||||
|
||||
@@ -32,11 +33,35 @@ public partial class Map : Node3D, IMap
|
||||
|
||||
public event Action FloorLoaded;
|
||||
|
||||
private string _sceneName;
|
||||
|
||||
public void OnResolved()
|
||||
{
|
||||
AnimationPlayer.AnimationFinished += AnimationPlayer_AnimationFinished;
|
||||
this.Provide();
|
||||
}
|
||||
|
||||
private async void AnimationPlayer_AnimationFinished(StringName animName)
|
||||
{
|
||||
if (animName == "fade_out")
|
||||
{
|
||||
await LoadNewFloor();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task LoadNewFloor()
|
||||
{
|
||||
CurrentFloor?.CallDeferred(MethodName.QueueFree, []);
|
||||
SpawnPointCreated?.Invoke((Vector3.Forward, new Vector3(-999, -999, -999)));
|
||||
var newFloor = await LoadNewFloor(_sceneName);
|
||||
AddChild(newFloor);
|
||||
InitializeFloor(newFloor);
|
||||
var floor = MapOrder.GetChildren().OfType<FloorNode>().ElementAt(CurrentFloorNumber.Value);
|
||||
if (CurrentFloor is DungeonFloor dungeonFloor && floor is DungeonFloorNode dungeonFloorNode)
|
||||
dungeonFloor.SpawnEnemies(dungeonFloorNode);
|
||||
AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, ("fade_in"));
|
||||
}
|
||||
|
||||
public void InitializeMapData()
|
||||
{
|
||||
CurrentFloorNumber.OnNext(-1);
|
||||
@@ -65,21 +90,10 @@ public partial class Map : Node3D, IMap
|
||||
public async Task LoadFloor(string sceneName)
|
||||
{
|
||||
AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, "fade_out");
|
||||
ClearMap();
|
||||
var newFloor = await LoadNewFloor(sceneName);
|
||||
AddChild(newFloor);
|
||||
InitializeFloor(newFloor);
|
||||
var floor = MapOrder.GetChildren().OfType<FloorNode>().ElementAt(CurrentFloorNumber.Value);
|
||||
if (CurrentFloor is DungeonFloor dungeonFloor && floor is DungeonFloorNode dungeonFloorNode)
|
||||
dungeonFloor.SpawnEnemies(dungeonFloorNode);
|
||||
AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, ("fade_in"));
|
||||
}
|
||||
|
||||
public void ClearMap()
|
||||
{
|
||||
AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, "fade_out");
|
||||
CurrentFloor?.CallDeferred(MethodName.QueueFree, []);
|
||||
SpawnPointCreated?.Invoke((Vector3.Forward, new Vector3(-999, -999, -999)));
|
||||
_sceneName = sceneName;
|
||||
var dimmableAudio = GetTree().GetNodesInGroup("DimmableAudio").OfType<IDimmableAudioStreamPlayer>();
|
||||
foreach (var node in dimmableAudio)
|
||||
node.FadeOut();
|
||||
}
|
||||
|
||||
private void InitializeFloor(Node newFloor)
|
||||
|
||||
Reference in New Issue
Block a user