add: Selectable Tile Map Layer/Mouse Controlled Camera

This commit is contained in:
h z
2025-02-26 20:17:37 +00:00
parent 92770d3425
commit 8df4ebb6d5
6 changed files with 145 additions and 8 deletions

View File

@@ -0,0 +1,42 @@
using Godot;
using Polonium.Attributes;
namespace GlobalClasses;
[ProxyNode]
[GlobalClass]
[Tool]
public partial class SelectableTileMapLayer : TileMapLayer
{
[Signal]
public delegate void CellSelectedEventHandler(Vector2I pos);
[Signal]
public delegate void CellEnteredEventHandler(Vector2I pos);
private Vector2I HoveredCell { get; set; } = new Vector2I(-1, -1);
public sealed override void _Process(double delta)
{
Vector2 mousePos = GetGlobalMousePosition();
Vector2 localMousePos = ToLocal(mousePos);
Vector2I cell = LocalToMap(localMousePos);
if(cell != HoveredCell)
{
EmitSignalCellEntered(cell);
HoveredCell = cell;
}
__Process(delta);
base._Process(delta);
}
public override void _UnhandledInput(InputEvent @event)
{
if (@event is InputEventMouseButton mouseEvent)
if (mouseEvent.ButtonIndex == MouseButton.Left && mouseEvent.Pressed)
EmitSignalCellSelected(HoveredCell);
}
[ProxyMethod]
public virtual void __Process(double delta)
{
}
}