diff --git a/Scripts/Activables/LevelTeleporter.cs b/Scripts/Activables/LevelTeleporter.cs new file mode 100644 index 00000000..07639ea7 --- /dev/null +++ b/Scripts/Activables/LevelTeleporter.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections; +using System.Threading.Tasks; +using Godot; + +namespace Cirno.Scripts.Activables; + +public partial class LevelTeleporter : Teleporter +{ + [Export] + public new string Target {get; private set;} + + protected override async Task Teleport(PlayerMovement player) + { + if (string.IsNullOrWhiteSpace(Target)) return; + player.RequestMovementDisable(true); + + await TweenPlayer(player); + + _particles.Emitting = true; + + await Task.Delay((int)(TeleportAnimationLength * 1000)); + + GlobalState.Instance.GotoScene(Target); + } +} \ No newline at end of file diff --git a/Scripts/Activables/Teleporter.cs b/Scripts/Activables/Teleporter.cs index d86a1c20..d86b5f64 100644 --- a/Scripts/Activables/Teleporter.cs +++ b/Scripts/Activables/Teleporter.cs @@ -31,7 +31,7 @@ public partial class Teleporter : Activable // [Export] // public GpuParticles2D Particles { get; set; } - private GpuParticles2D _particles; + protected GpuParticles2D _particles; public override void _Ready() { @@ -118,14 +118,15 @@ public partial class Teleporter : Activable // Teleport player to target if active if (!IsEnabled) return; - if (Target is null) return; + // Call Teleport here _ = Teleport(player); } - private async Task Teleport(PlayerMovement player) + protected virtual async Task Teleport(PlayerMovement player) { + if (Target is null) return; player.RequestMovementDisable(true); await TweenPlayer(player); @@ -140,7 +141,7 @@ public partial class Teleporter : Activable player.RequestMovementDisable(false); } - private async Task TweenPlayer(PlayerMovement player) + protected async Task TweenPlayer(PlayerMovement player) { // Create a Tween for the teleport animation Tween tween = GetTree().CreateTween();