Implemented basic duck running away from vesna mechanic

This commit is contained in:
2025-07-08 22:23:28 +02:00
parent a1bbe44105
commit ebc3ee9cf9
112 changed files with 2816 additions and 176 deletions
+63
View File
@@ -0,0 +1,63 @@
using System;
using Godot;
namespace Babushka.scripts.CSharp.Common.Animation;
public partial class Duck : Node2D
{
[Export] private CharacterBody2D _characterBody;
[Export] private AudioPlayer _nakNakAudio;
[Export] private AudioPlayer _wingFlapAudio;
[Export] private Node2D _vesna;
[Export] private float _runningSpeed = 5f;
[Export] private float _slowSpeed = 0.5f;
[Export] private float _minDistanceToVesna = 1000f;
private bool _vesnaInReach = false;
private bool _penEntered = false;
private Vector2 _lastDirection = Vector2.Up;
private int _numberOfFramesPerDirection = 100;
private int _currentFramesThisDirection = 0;
public void PenEntered()
{
_nakNakAudio.PlayOneShot();
_penEntered = true;
}
public override void _Process(double delta)
{
if (_penEntered)
{
_characterBody.Velocity = Vector2.Zero;
_characterBody.MoveAndSlide();
return;
}
float currentDistance = _vesna.GlobalPosition.DistanceTo(_characterBody.GlobalPosition);
if (currentDistance < _minDistanceToVesna)
{
_characterBody.Velocity = new Vector2( _characterBody.GlobalPosition.X - _vesna.GlobalPosition.X,
_characterBody.GlobalPosition.Y - _vesna.GlobalPosition.Y);
_characterBody.Velocity *= _runningSpeed;
_characterBody.MoveAndSlide();
}
else
{
if (_currentFramesThisDirection >= _numberOfFramesPerDirection)
{
_currentFramesThisDirection = 0;
Random random = new Random();
_lastDirection = new Vector2(random.NextSingle(), random.NextSingle()).Normalized();
}
_currentFramesThisDirection++;
_characterBody.Velocity = _lastDirection * _slowSpeed;
_characterBody.MoveAndSlide();
}
base._Process(delta);
}
}
@@ -0,0 +1 @@
uid://c4qxtuym7syjc