Files
Babushka/scripts/CSharp/Common/Temp/MVPDuck.cs
T

98 lines
2.5 KiB
C#
Raw Normal View History

2025-07-09 22:40:03 +02:00
using System.Threading.Tasks;
using Babushka.scripts.CSharp.Common.Savegame;
using Babushka.scripts.CSharp.Low_Code.Variables;
2025-07-09 22:40:03 +02:00
using Godot;
using Godot.Collections;
2025-07-09 22:40:03 +02:00
namespace Babushka.scripts.CSharp.Common.Temp;
/// <summary>
/// Temporary Duck behaviour to make sure we can use them in the first showcase
/// </summary>
public partial class MVPDuck : Node2D, ISaveable
2025-07-09 22:40:03 +02:00
{
[ExportGroup("Animation")]
2025-07-09 22:40:03 +02:00
[Export] private Node2D _penTarget;
[Export] private int _transferDelayMs;
[Export] private AnimationPlayer _animationPlayer;
[Export] private string _flapAnimationName = "flapFlap";
2025-09-27 17:38:23 +02:00
private bool _collected;
2025-07-09 22:40:03 +02:00
[Signal] public delegate void DuckCollectedEventHandler();
2025-07-09 22:40:03 +02:00
public override void _Ready()
{
LoadFromSaveData();
}
2025-07-09 22:40:03 +02:00
public void TransferToTargetAfterDelay()
{
2025-09-27 17:38:23 +02:00
if (!_collected)
{
MoveAfterDelay();
PlayAnimation();
_collected = true;
}
2025-07-09 22:40:03 +02:00
}
private void PlayAnimation()
{
_animationPlayer.CurrentAnimation = _flapAnimationName;
_animationPlayer.Play();
}
public async void MoveAfterDelay()
{
2025-07-11 00:17:31 +02:00
await ToSignal(GetTree().CreateTimer(1.0f), "timeout");
if(!_penTarget.Equals(null))
Position = _penTarget.GlobalPosition;
EmitSignal(SignalName.DuckCollected);
UpdateSaveData();
2025-07-09 22:40:03 +02:00
}
#region SAVE AND LOAD
2025-07-09 22:40:03 +02:00
2025-11-25 13:46:46 +01:00
/// <summary>
// Saves duck position.
/// </summary>
public void UpdateSaveData()
{
var payloadData = new Dictionary<string, Variant>
{
{ "globalPositionX", GlobalPosition.X },
{ "globalPositionY", GlobalPosition.Y },
};
string id = GetMeta("SaveID").AsString();
SavegameService.AppendDataToSave( id, payloadData);
}
2025-11-25 13:46:46 +01:00
/// <summary>
/// Loads duck position.
/// </summary>
public void LoadFromSaveData()
{
string id = GetMeta("SaveID").AsString();
Dictionary<string, Variant> save = SavegameService.GetSaveData(id);
if (save.Count > 0)
{
float xPos = 0;
float yPos = 0;
if (save.TryGetValue("globalPositionX", out Variant xPosVar))
{
xPos = xPosVar.AsSingle();
}
if (save.TryGetValue("globalPositionY", out Variant yPosVar))
{
yPos = yPosVar.AsSingle();
}
GlobalPosition = new Vector2(xPos, yPos);
}
}
#endregion
2025-07-09 22:40:03 +02:00
}