58 lines
1.5 KiB
C#
58 lines
1.5 KiB
C#
using Godot;
|
|
using Slimepire.Core;
|
|
|
|
namespace Slimepire.Gameplay.Nodules.Components;
|
|
|
|
[SceneTree]
|
|
public partial class GrowArea : Area2D
|
|
{
|
|
private bool _mouseInsideClickArea;
|
|
private bool _clickedInside;
|
|
|
|
public override void _Ready()
|
|
{
|
|
MouseEntered += ClickAreaOnMouseEntered;
|
|
MouseExited += ClickAreaOnMouseExited;
|
|
}
|
|
|
|
private void ClickAreaOnMouseEntered()
|
|
{
|
|
_mouseInsideClickArea = true;
|
|
}
|
|
|
|
private void ClickAreaOnMouseExited()
|
|
{
|
|
_mouseInsideClickArea = false;
|
|
|
|
// ghost == null check probably unnecessary
|
|
if (_clickedInside && !NoduleManager.Instance.Building)
|
|
{
|
|
NoduleManager.Instance.Building = true;
|
|
_clickedInside = false;
|
|
|
|
var ghost = Instantiator.Instantiate<BuildGhost>();
|
|
ghost.Position = Position;
|
|
|
|
// TODO: Make it better... EntityRoot oder vllt. NoduleRoot
|
|
// Oder einfach den Baum auch als Baum in der Scene darstellen?
|
|
GetTree().Root.AddChild(ghost);
|
|
}
|
|
}
|
|
|
|
public override void _UnhandledInput(InputEvent @event)
|
|
{
|
|
using (@event)
|
|
{
|
|
if (
|
|
@event is InputEventMouseButton { ButtonIndex: MouseButton.Left }
|
|
&& @event.IsPressed()
|
|
&& _mouseInsideClickArea
|
|
)
|
|
{
|
|
_clickedInside = true;
|
|
GetViewport().SetInputAsHandled();
|
|
}
|
|
}
|
|
}
|
|
}
|