Vesna can walk diagonally now
This commit is contained in:
@@ -0,0 +1,178 @@
|
||||
using System.Threading.Tasks;
|
||||
using Babushka.scripts.CSharp.Common.Inventory;
|
||||
using Babushka.scripts.CSharp.Common.Services;
|
||||
using Godot;
|
||||
|
||||
namespace Babushka.scripts.CSharp.Common.Animation;
|
||||
|
||||
public partial class VesnaAnimations : Node
|
||||
{
|
||||
[Export] private AnimatedSprite2D _sprite;
|
||||
[Export] private CpuParticles2D _wateringParticles;
|
||||
|
||||
private bool anyActionPressed;
|
||||
private string _toolString;
|
||||
private int _toolID = -1; // -1 means no tool.
|
||||
private Vector2 _lastDirection = Vector2.Zero;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
InventoryManager.Instance.playerInventory.InventoryContentsChanged += HandleNewItemInInventory;
|
||||
}
|
||||
|
||||
private void HandleNewItemInInventory()
|
||||
{
|
||||
// for future Kathi: this does not, in fact, check if an item has been added only, but triggers on every content change!
|
||||
PlayPickUpAnimation();
|
||||
}
|
||||
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
anyActionPressed = false;
|
||||
|
||||
if (!InputService.Instance.InputEnabled)
|
||||
return;
|
||||
|
||||
bool right = Input.IsActionPressed("move_right");
|
||||
bool left = Input.IsActionPressed("move_left");
|
||||
bool up = Input.IsActionPressed("move_up");
|
||||
bool down = Input.IsActionPressed("move_down");
|
||||
bool walkingAnimationPicked = false;
|
||||
|
||||
if (up)
|
||||
{
|
||||
_sprite.Animation = "back walking" + _toolString;
|
||||
anyActionPressed = true;
|
||||
_lastDirection = Vector2.Up;
|
||||
walkingAnimationPicked = true;
|
||||
}
|
||||
|
||||
if (down && !walkingAnimationPicked)
|
||||
{
|
||||
_sprite.Animation = "front walking" + _toolString;
|
||||
anyActionPressed = true;
|
||||
_lastDirection = Vector2.Down;
|
||||
walkingAnimationPicked = true;
|
||||
}
|
||||
|
||||
if (right && !walkingAnimationPicked)
|
||||
{
|
||||
_sprite.FlipH = false;
|
||||
_sprite.Animation = "side walking" + _toolString;
|
||||
anyActionPressed = true;
|
||||
_lastDirection = Vector2.Right;
|
||||
walkingAnimationPicked = true;
|
||||
}
|
||||
|
||||
if (left && !walkingAnimationPicked)
|
||||
{
|
||||
_sprite.FlipH = true;
|
||||
_sprite.Animation = "side walking" + _toolString;
|
||||
anyActionPressed = true;
|
||||
_lastDirection = Vector2.Left;
|
||||
walkingAnimationPicked = true;
|
||||
}
|
||||
|
||||
if (Input.IsActionPressed("interact2"))
|
||||
{
|
||||
_sprite.Animation = "back interact";
|
||||
anyActionPressed = true;
|
||||
_lastDirection = Vector2.Up;
|
||||
}
|
||||
|
||||
/*
|
||||
if (Input.IsActionPressed("item"))
|
||||
{
|
||||
_sprite.Animation = "diagonal item";
|
||||
anyActionPressed = true;
|
||||
_lastDirection = Vector2.Right;
|
||||
}
|
||||
*/
|
||||
|
||||
if (anyActionPressed)
|
||||
{
|
||||
_sprite.Play();
|
||||
}
|
||||
else
|
||||
{
|
||||
//idle
|
||||
if(_lastDirection == Vector2.Zero || _lastDirection == Vector2.Down)
|
||||
_sprite.Animation = "front idle" + _toolString;
|
||||
else if(_lastDirection == Vector2.Left || _lastDirection == Vector2.Right)
|
||||
_sprite.Animation = "side idle" + _toolString;
|
||||
else if(_lastDirection == Vector2.Up)
|
||||
_sprite.Animation = "back idle" + _toolString;
|
||||
}
|
||||
}
|
||||
|
||||
public void ActivateTool(bool success, int id)
|
||||
{
|
||||
if (success)
|
||||
{
|
||||
_toolID = id;
|
||||
}
|
||||
else _toolID = -1;
|
||||
|
||||
switch (_toolID)
|
||||
{
|
||||
case 0:
|
||||
_toolString = " rake";
|
||||
break;
|
||||
case 1:
|
||||
_toolString = " wateringcan";
|
||||
break;
|
||||
default:
|
||||
_toolString = "";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called by FarmingControls Signal.
|
||||
/// </summary>
|
||||
public void PlayWateringAnimation()
|
||||
{
|
||||
if (_toolID == 1 && InputService.Instance.InputEnabled)
|
||||
{
|
||||
_sprite.Animation = "diagonal wateringcan";
|
||||
_sprite.Play();
|
||||
InputService.Instance.InputEnabled = false;
|
||||
_wateringParticles.Emitting = true;
|
||||
Task.Run(DelayedInputHandlerReset);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task DelayedInputHandlerReset()
|
||||
{
|
||||
await Task.Delay(1000);
|
||||
_wateringParticles.Emitting = false;
|
||||
InputService.Instance.InputEnabled = true;
|
||||
}
|
||||
|
||||
public void PlayPickUpAnimation()
|
||||
{
|
||||
_sprite.Animation = "side pickup";
|
||||
_sprite.Play();
|
||||
InputService.Instance.InputEnabled = false;
|
||||
Task.Run(DelayedInputHandlerReset);
|
||||
}
|
||||
|
||||
public void PlayFarmingAnimation()
|
||||
{
|
||||
_sprite.Animation = "diagonal farming";
|
||||
_sprite.Play();
|
||||
InputService.Instance.InputEnabled = false;
|
||||
Task.Run(DelayedInputHandlerReset);
|
||||
}
|
||||
|
||||
|
||||
public void PlayWateringCanFillupAnimation()
|
||||
{
|
||||
_sprite.Animation = "back interact";
|
||||
_sprite.Play();
|
||||
_lastDirection = Vector2.Up;
|
||||
InputService.Instance.InputEnabled = false;
|
||||
Task.Run(DelayedInputHandlerReset);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://n7oihifvqp23
|
||||
Reference in New Issue
Block a user