Reticule cursor for gameplay

This commit is contained in:
Marco 2025-05-08 12:32:16 +02:00
commit b40f32bf5e
7 changed files with 76 additions and 8 deletions

View file

@ -23,7 +23,7 @@ public partial class GlobalState : Node
private Control _loadingPlaque;
private readonly StringName _menuMouseTexturePath = "uid://d3oxwik1uoe4j";
private readonly StringName _reticuleMouseTexturePath = "uid://8nns6w0skiy3";
private readonly StringName _reticuleMouseTexturePath = "uid://b76bhqv247nft";
private readonly StringName _mapsDatabaseResource = "uid://blf2ii0j3fqil";
@ -31,7 +31,11 @@ public partial class GlobalState : Node
private Texture2D _menuMouseTexture;
private Image _menuMouseImage;
private Texture2D _reticuleMouseTexture;
private Image _reticuleMouseImage;
public bool UseMenuCursor { get; set; } = true;
public override void _Ready()
{
Instance = this;
@ -48,6 +52,9 @@ public partial class GlobalState : Node
_menuMouseTexture = ResourceLoader.Load<Texture2D>(_menuMouseTexturePath);
_menuMouseImage = _menuMouseTexture.GetImage();
_reticuleMouseTexture = ResourceLoader.Load<Texture2D>(_reticuleMouseTexturePath);
_reticuleMouseImage = _reticuleMouseTexture.GetImage();
GetTree().GetRoot().SizeChanged += OnSizeChanged;
//_mouseTexture =
@ -60,6 +67,12 @@ public partial class GlobalState : Node
ResizeCursor();
}
public void ChangeCursor(bool useMenu)
{
UseMenuCursor = useMenu;
ResizeCursor();
}
public void ResizeCursor()
{
var root = GetTree().GetRoot();
@ -70,7 +83,7 @@ public partial class GlobalState : Node
int scaleY = newSize.Y / baseSize.Y;
int scale = Math.Min(scaleX, scaleY); // Ensure pixel-perfect scaling
ResizeCursor(scale / 2);
ResizeCursor(UseMenuCursor ? scale / 2 : scale, UseMenuCursor);
}
public void GotoScene(string path)
@ -264,15 +277,27 @@ public partial class GlobalState : Node
return true;
}
public void ResizeCursor(float scale)
private void ResizeCursor(float scale, bool useMenuCursor)
{
var scaled = (Image)_menuMouseImage.Duplicate();
var size = (Vector2I)(scale * _menuMouseTexture.GetSize());
Image scaled;
Vector2I size;
if (useMenuCursor)
{
scaled = (Image)_menuMouseImage.Duplicate();
size = (Vector2I)(scale * _menuMouseTexture.GetSize());
}
else
{
scaled = (Image)_reticuleMouseImage.Duplicate();
size = (Vector2I)(scale * _reticuleMouseTexture.GetSize());
}
scaled.Resize(size.X, size.Y, Image.Interpolation.Nearest);
DisplayServer.CursorSetCustomImage(scaled);
Input.SetCustomMouseCursor(scaled, Input.CursorShape.Arrow, useMenuCursor ? Vector2.Zero : new Vector2(size.X / 2,size.Y / 2));
//DisplayServer.CursorSetCustomImage(scaled);
}
public void RestartLevel()