Small tweak to floor number display, increased chinthe speed, fix Return To Overworld option on floor clear menu
This commit is contained in:
@@ -27,6 +27,8 @@ public partial class Map : Node3D, IMap
|
||||
|
||||
public AutoProp<int> CurrentFloorNumber { get; private set; } = new AutoProp<int>(0);
|
||||
|
||||
public AutoProp<string> CurrentFloorDisplayString { get; private set; } = new AutoProp<string>(string.Empty);
|
||||
|
||||
private readonly string _floorFilePath = @"res://src/map/dungeon/floors/";
|
||||
|
||||
public event Action<(Vector3 Rotation, Vector3 Position)> SpawnPointCreated;
|
||||
@@ -37,29 +39,30 @@ public partial class Map : Node3D, IMap
|
||||
|
||||
public void OnResolved()
|
||||
{
|
||||
AnimationPlayer.AnimationFinished += AnimationPlayer_AnimationFinished;
|
||||
this.Provide();
|
||||
AnimationPlayer.AnimationFinished += AnimationPlayer_AnimationFinished;
|
||||
this.Provide();
|
||||
}
|
||||
|
||||
private async void AnimationPlayer_AnimationFinished(StringName animName)
|
||||
{
|
||||
if (animName == "fade_out")
|
||||
{
|
||||
await LoadNewFloor();
|
||||
FloorLoaded?.Invoke();
|
||||
}
|
||||
if (animName == "fade_out")
|
||||
{
|
||||
await LoadNewFloor();
|
||||
FloorLoaded?.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task LoadNewFloor()
|
||||
{
|
||||
SpawnPointCreated?.Invoke((Vector3.Forward, new Vector3(-999, -999, -999)));
|
||||
var newFloor = await LoadNewFloor(_sceneName);
|
||||
ClearFloor();
|
||||
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);
|
||||
SpawnPointCreated?.Invoke((Vector3.Forward, new Vector3(-999, -999, -999)));
|
||||
var newFloor = await LoadNewFloor(_sceneName);
|
||||
ClearFloor();
|
||||
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);
|
||||
CurrentFloorDisplayString.OnNext(floor.DisplayedFloorNumber);
|
||||
}
|
||||
|
||||
public void FadeIn() => AnimationPlayer.Play("fade_in");
|
||||
@@ -67,49 +70,49 @@ public partial class Map : Node3D, IMap
|
||||
|
||||
public void InitializeMapData()
|
||||
{
|
||||
CurrentFloorNumber.OnNext(-1);
|
||||
CurrentFloorNumber.OnNext(-1);
|
||||
}
|
||||
|
||||
public IDungeonRoom GetPlayersCurrentRoom()
|
||||
{
|
||||
var rooms = CurrentFloor.Rooms;
|
||||
var playersRoom = rooms.SingleOrDefault(x => x.IsPlayerInRoom);
|
||||
return playersRoom;
|
||||
var rooms = CurrentFloor.Rooms;
|
||||
var playersRoom = rooms.SingleOrDefault(x => x.IsPlayerInRoom);
|
||||
return playersRoom;
|
||||
}
|
||||
|
||||
public (Vector3 Rotation, Vector3 Position) GetPlayerSpawnPosition()
|
||||
{
|
||||
var spawnPoint = CurrentFloor.GetPlayerSpawnPoint();
|
||||
return (spawnPoint.Rotation, spawnPoint.Position);
|
||||
var spawnPoint = CurrentFloor.GetPlayerSpawnPoint();
|
||||
return (spawnPoint.Rotation, spawnPoint.Position);
|
||||
}
|
||||
|
||||
public void ClearFloor()
|
||||
{
|
||||
CurrentFloor?.CallDeferred(MethodName.QueueFree, []);
|
||||
CurrentFloor?.CallDeferred(MethodName.QueueFree, []);
|
||||
}
|
||||
|
||||
public async Task LoadFloor()
|
||||
{
|
||||
var floor = MapOrder.GetChildren().OfType<FloorNode>().ElementAt(CurrentFloorNumber.Value + 1);
|
||||
var sceneToLoad = LayoutToScenePathConverter.Convert(floor);
|
||||
await LoadFloor(sceneToLoad);
|
||||
var floor = MapOrder.GetChildren().OfType<FloorNode>().ElementAt(CurrentFloorNumber.Value + 1);
|
||||
var sceneToLoad = LayoutToScenePathConverter.Convert(floor);
|
||||
await LoadFloor(sceneToLoad);
|
||||
}
|
||||
|
||||
public async Task LoadFloor(string sceneName)
|
||||
{
|
||||
CallDeferred(MethodName.FadeOut);
|
||||
_sceneName = sceneName;
|
||||
var dimmableAudio = GetTree().GetNodesInGroup("DimmableAudio").OfType<IDimmableAudioStreamPlayer>();
|
||||
foreach (var node in dimmableAudio)
|
||||
node.FadeOut();
|
||||
CallDeferred(MethodName.FadeOut);
|
||||
_sceneName = sceneName;
|
||||
var dimmableAudio = GetTree().GetNodesInGroup("DimmableAudio").OfType<IDimmableAudioStreamPlayer>();
|
||||
foreach (var node in dimmableAudio)
|
||||
node.FadeOut();
|
||||
}
|
||||
|
||||
private void InitializeFloor(Node newFloor)
|
||||
{
|
||||
CurrentFloor = (IDungeonFloor)newFloor;
|
||||
SetupDungeonFloor();
|
||||
CurrentFloor.FloorIsLoaded = true;
|
||||
CurrentFloorNumber.OnNext(CurrentFloorNumber.Value + 1);
|
||||
CurrentFloor = (IDungeonFloor)newFloor;
|
||||
SetupDungeonFloor();
|
||||
CurrentFloor.FloorIsLoaded = true;
|
||||
CurrentFloorNumber.OnNext(CurrentFloorNumber.Value + 1);
|
||||
if (CurrentFloor is SpecialFloor)
|
||||
Game.ShowMinimap(false);
|
||||
else
|
||||
@@ -118,19 +121,19 @@ public partial class Map : Node3D, IMap
|
||||
|
||||
private async Task<Node> LoadNewFloor(string sceneName)
|
||||
{
|
||||
var sceneLoader = new SceneLoader();
|
||||
AddChild(sceneLoader);
|
||||
sceneLoader.LoadSceneRequest(sceneName);
|
||||
await ToSignal(sceneLoader, SceneLoader.SignalName.SceneLoaded);
|
||||
var result = sceneLoader.LoadedScene;
|
||||
sceneLoader.QueueFree();
|
||||
return result;
|
||||
var sceneLoader = new SceneLoader();
|
||||
AddChild(sceneLoader);
|
||||
sceneLoader.LoadSceneRequest(sceneName);
|
||||
await ToSignal(sceneLoader, SceneLoader.SignalName.SceneLoaded);
|
||||
var result = sceneLoader.LoadedScene;
|
||||
sceneLoader.QueueFree();
|
||||
return result;
|
||||
}
|
||||
|
||||
private void SetupDungeonFloor()
|
||||
{
|
||||
CurrentFloor.InitializeDungeon();
|
||||
var transform = GetPlayerSpawnPosition();
|
||||
SpawnPointCreated?.Invoke(transform);
|
||||
CurrentFloor.InitializeDungeon();
|
||||
var transform = GetPlayerSpawnPosition();
|
||||
SpawnPointCreated?.Invoke(transform);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user