2025-07-06 23:48:01 +02:00
|
|
|
using System;
|
2025-06-15 18:59:38 +02:00
|
|
|
using Babushka.scripts.CSharp.Common.CharacterControls;
|
2025-05-12 00:16:13 +02:00
|
|
|
using Godot;
|
|
|
|
|
|
|
|
|
|
namespace Babushka.scripts.CSharp.Common.Farming;
|
|
|
|
|
|
|
|
|
|
[GlobalClass]
|
|
|
|
|
public partial class FieldBehaviour2D : Sprite2D
|
|
|
|
|
{
|
2025-07-06 23:48:01 +02:00
|
|
|
[Export] private Sprite2D _fieldSprite;
|
|
|
|
|
[Export] private Sprite2D _maskSprite;
|
|
|
|
|
[Export] private Texture2D[] _maskTexture;
|
2025-05-12 00:16:13 +02:00
|
|
|
[Export] private Texture2D Tilled;
|
|
|
|
|
[Export] private Texture2D Watered;
|
2025-05-18 12:32:56 +02:00
|
|
|
[Export] public FieldState FieldState = FieldState.Tilled;
|
2025-06-15 18:59:38 +02:00
|
|
|
[Export] private InteractionArea2D _growingCollider;
|
2025-05-12 00:16:13 +02:00
|
|
|
|
|
|
|
|
public Vector2 FieldPosition;
|
|
|
|
|
|
|
|
|
|
public override void _Ready()
|
|
|
|
|
{
|
2025-05-18 12:32:56 +02:00
|
|
|
UpdateFieldState(FieldState);
|
2025-07-06 23:48:01 +02:00
|
|
|
int randomIndex = new Random().Next(0, _maskTexture.Length);
|
|
|
|
|
_maskSprite.Texture = _maskTexture[randomIndex];
|
2025-05-12 00:16:13 +02:00
|
|
|
base._Ready();
|
|
|
|
|
}
|
2025-05-18 12:32:56 +02:00
|
|
|
|
|
|
|
|
public void UpdateFieldState(FieldState state)
|
|
|
|
|
{
|
|
|
|
|
switch (state)
|
|
|
|
|
{
|
|
|
|
|
case FieldState.Empty:
|
|
|
|
|
FieldState = FieldState.Empty;
|
|
|
|
|
break;
|
|
|
|
|
case FieldState.Tilled:
|
|
|
|
|
FieldState = FieldState.Tilled;
|
2025-07-06 23:48:01 +02:00
|
|
|
_fieldSprite.Texture = Tilled;
|
2025-06-15 18:59:38 +02:00
|
|
|
_growingCollider.Visible = false;
|
2025-05-18 12:32:56 +02:00
|
|
|
break;
|
|
|
|
|
case FieldState.Watered:
|
|
|
|
|
FieldState = FieldState.Watered;
|
2025-07-06 23:48:01 +02:00
|
|
|
_fieldSprite.Texture = Watered;
|
2025-06-15 18:59:38 +02:00
|
|
|
_growingCollider.Visible = true;
|
2025-05-18 12:32:56 +02:00
|
|
|
break;
|
|
|
|
|
case FieldState.Planted:
|
|
|
|
|
FieldState = FieldState.Planted;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
FieldState = FieldState.NotFound;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-12 00:16:13 +02:00
|
|
|
|
|
|
|
|
public void Water()
|
|
|
|
|
{
|
2025-07-11 03:55:36 +02:00
|
|
|
UpdateFieldState(FieldState.Watered);
|
2025-05-12 00:16:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2025-05-18 12:32:56 +02:00
|
|
|
/// Called when the player enters the field's interaction area and presses <E>.
|
2025-05-12 00:16:13 +02:00
|
|
|
/// </summary>
|
|
|
|
|
public void Farm()
|
|
|
|
|
{
|
|
|
|
|
switch (FieldState)
|
|
|
|
|
{
|
|
|
|
|
case FieldState.Empty:
|
2025-07-06 23:48:01 +02:00
|
|
|
_fieldSprite.Texture = Tilled;
|
2025-05-12 00:16:13 +02:00
|
|
|
FieldState = FieldState.Tilled;
|
|
|
|
|
break;
|
2025-05-18 12:32:56 +02:00
|
|
|
case FieldState.Watered:
|
2025-05-12 00:16:13 +02:00
|
|
|
FieldState = FieldState.Planted;
|
|
|
|
|
break;
|
|
|
|
|
case FieldState.Planted:
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|