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.
Babushka/scripts/CSharp/Common/Farming/FarmingControls2D.cs

99 lines
2.7 KiB

using System;
using Babushka.scripts.CSharp.Low_Code.Variables;
using Godot;
using Godot.Collections;
namespace Babushka.scripts.CSharp.Common.Farming;
[GlobalClass]
public partial class FarmingControls2D : Node2D
{
[Export] private VariableResource _sceneKeyProvider;
[Export] private Node2D _movingPlayer;
[Export] private Camera2D _camera;
[Export] private float _wateringCanParticlesVerticalOffset = 50f;
[Export] private Vector2I _fieldOffsetVector = new Vector2I(735, 651);
[Export] private Node2D _fieldParent;
private int _toolId = -1;
private bool _wateringCanFilled = false;
[Signal] public delegate void FieldCreatedEventHandler();
#region Tools
/// <summary>
/// If no tool has been set, then set the current tool to the incoming tool id.
/// </summary>
/// <param name="toolId">The id of the tool to activate if possible</param>
/// <returns>If the tool in question was activated.</returns>
public bool TryActivateTool(int toolId)
{
bool activate;
//if our hands are empty, activate
if (toolId == -1)
{
activate = false;
}
else
{
activate = true;
}
_toolId = activate ? toolId : -1;
WateringCanState.SetActive(_toolId == WateringCanState.WATERING_CAN_ID);
return activate;
}
#endregion
public override void _Input(InputEvent @event)
{
if (@event.IsActionPressed("click"))
{
if ( _toolId == 0)
{
Vector2I adjustedPosition = GetAdjustedMousePosition();
MakeField(adjustedPosition);
}
}
}
private Vector2I GetAdjustedMousePosition()
{
Vector2 mousePosition = _camera.GetGlobalMousePosition();
Vector2I mousePositionInteger = (Vector2I) mousePosition;
Vector2I adjustedPosition = AdjustValue(mousePositionInteger, _fieldOffsetVector);
return adjustedPosition;
}
private Vector2I AdjustValue(Vector2I input, Vector2I step)
{
return input.Snapped(step);
}
#region WATERING
public void FillWateringCan()
{
if (_toolId == WateringCanState.WATERING_CAN_ID)
{
WateringCanState.Fill();
}
}
#endregion
#region FIELD CREATION
private void MakeField(Vector2I mousePosition)
{
int potentialFieldIndex = FieldService.Instance.PositionToIndex(mousePosition);
if(FieldService.Instance.TryGet(_sceneKeyProvider.Payload.AsString(), potentialFieldIndex) == null)
EmitSignal(SignalName.FieldCreated);
}
#endregion
}