add: Selectable Tile Map Layer/Mouse Controlled Camera
This commit is contained in:
@@ -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)
|
||||
{
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user