You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.0 KiB
63 lines
2.0 KiB
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);
|
|
}
|
|
} |