50 lines
1.7 KiB
C#
50 lines
1.7 KiB
C#
using Godot;
|
|
|
|
/// <summary>
|
|
/// 场景过渡控制器
|
|
/// </summary>
|
|
public partial class SceneTransit : CanvasLayer {
|
|
// Called when the node enters the scene tree for the first time.
|
|
/// <summary>
|
|
/// 场景加载完成时调用
|
|
/// </summary>
|
|
public override void _Ready() {
|
|
Layer = -1;
|
|
Hide();
|
|
}
|
|
|
|
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
/// <summary>
|
|
/// 每帧更新
|
|
/// </summary>
|
|
/// <param name="delta">帧间隔</param>
|
|
public override void _Process(double delta) { }
|
|
|
|
/// <summary>
|
|
/// 切换场景
|
|
/// </summary>
|
|
/// <param name="nextScene">下一场景路径</param>
|
|
/// <param name="needLoadResources">是否需要加载资源</param>
|
|
/// <param name="animation">过渡动画名称</param>
|
|
/// <param name="waitSecond">等待时间</param>
|
|
public async void Transit(string nextScene, bool needLoadResources = true, string animation = "transit",
|
|
float waitSecond = 0) {
|
|
SetProcess(true);
|
|
GameManager.NextScene = nextScene;
|
|
var ap = GetNode<AnimationPlayer>("AnimationPlayer");
|
|
Layer = 9999;
|
|
Show();
|
|
ap.Play(animation);
|
|
await ToSignal(ap, AnimationMixer.SignalName.AnimationFinished);
|
|
if (waitSecond > 0) await ToSignal(GetTree().CreateTimer(waitSecond), SceneTreeTimer.SignalName.Timeout);
|
|
if (needLoadResources)
|
|
GetTree().ChangeSceneToFile("res://scenes/loader.tscn");
|
|
else
|
|
GetTree().ChangeSceneToFile(nextScene);
|
|
ap.PlayBackwards(animation);
|
|
await ToSignal(ap, AnimationMixer.SignalName.AnimationFinished);
|
|
Layer = -1;
|
|
Hide();
|
|
SetProcess(false);
|
|
}
|
|
} |