using Babushka.scripts.CSharp.Common.Savegame;
using Godot;
using Godot.Collections;
namespace Babushka.scripts.CSharp.Common.Temp;
///
/// Temporary Duck behaviour to make sure we can use them in the first showcase
///
public partial class MVPDuck : Node2D, ISaveable
{
[ExportGroup("Animation")]
[Export] private Node2D _penTarget;
[Export] private int _transferDelayMs;
[Export] private AnimationPlayer _animationPlayer;
[Export] private string _flapAnimationName = "flapFlap";
private bool _collected;
[Signal] public delegate void DuckCollectedEventHandler();
public override void _Ready()
{
LoadFromSaveData();
}
public void TransferToTargetAfterDelay()
{
if (!_collected)
{
MoveAfterDelay();
PlayAnimation();
_collected = true;
}
}
private void PlayAnimation()
{
_animationPlayer.CurrentAnimation = _flapAnimationName;
_animationPlayer.Play();
}
public async void MoveAfterDelay()
{
await ToSignal(GetTree().CreateTimer(1.0f), "timeout");
if(!_penTarget.Equals(null))
Position = _penTarget.GlobalPosition;
EmitSignal(SignalName.DuckCollected);
UpdateSaveData();
}
#region SAVE AND LOAD
///
// Saves duck position.
///
public void UpdateSaveData()
{
var payloadData = new Dictionary
{
{ "globalPositionX", GlobalPosition.X },
{ "globalPositionY", GlobalPosition.Y },
};
string id = GetMeta("SaveID").AsString();
SavegameService.AppendDataToSave( id, payloadData);
}
///
/// Loads duck position.
///
public void LoadFromSaveData()
{
string id = GetMeta("SaveID").AsString();
Dictionary 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
}