using System; using Babushka.scripts.CSharp.Common.CharacterControls; using Godot; namespace Babushka.scripts.CSharp.Common.Farming; public enum FieldState { Empty = 0, Tilled = 1, Planted = 2, Watered = 3, NotFound = 99 } [GlobalClass] public partial class FieldBehaviour2D : Sprite2D { [Export] private Sprite2D _fieldSprite; [Export] private Sprite2D _maskSprite; [Export] private Texture2D[] _maskTexture; [Export] private Texture2D Tilled; [Export] private Texture2D Watered; [Export] public FieldState FieldState = FieldState.Tilled; [Export] private InteractionArea2D _growingCollider; public Vector2 FieldPosition; public override void _Ready() { UpdateFieldState(FieldState); int randomIndex = new Random().Next(0, _maskTexture.Length); _maskSprite.Texture = _maskTexture[randomIndex]; base._Ready(); } public void UpdateFieldState(FieldState state) { switch (state) { case FieldState.Empty: FieldState = FieldState.Empty; break; case FieldState.Tilled: FieldState = FieldState.Tilled; _fieldSprite.Texture = Tilled; _growingCollider.Visible = false; break; case FieldState.Watered: FieldState = FieldState.Watered; _fieldSprite.Texture = Watered; _growingCollider.Visible = true; break; case FieldState.Planted: FieldState = FieldState.Planted; break; default: FieldState = FieldState.NotFound; break; } } public void Water() { UpdateFieldState(FieldState.Watered); } /// /// Called when the player enters the field's interaction area and presses . /// public void Farm() { switch (FieldState) { case FieldState.Empty: _fieldSprite.Texture = Tilled; FieldState = FieldState.Tilled; break; case FieldState.Watered: FieldState = FieldState.Planted; break; case FieldState.Planted: break; default: break; } } }