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

@ -90,7 +90,7 @@ public partial class GameManager : Node2D
}
GlobalState.Instance.ResizeCursor();
GlobalState.Instance.ChangeCursor(false);
if (GlobalState.Instance.SessionSettings.AllowSaving)
{
@ -359,17 +359,21 @@ public partial class GameManager : Node2D
case GameState.Dialogue:
case GameState.Shop:
case GameState.Inventory:
GlobalState.Instance.ChangeCursor(true);
GetTree().SetPause(true);
//Input.MouseMode = Input.MouseModeEnum.Visible;
break;
case GameState.Playing:
case GameState.Controlling:
//Input.MouseMode = Input.MouseModeEnum.Confined;
GlobalState.Instance.ChangeCursor(false);
DelayedUnpause();
//CallDeferred(MethodName.DelayedUnpause);
//GetTree().SetPause(false);
break;
case GameState.Menu:
GlobalState.Instance.ChangeCursor(true);
//Input.MouseMode = Input.MouseModeEnum.Visible;
DelayedUnpause();
//CallDeferred(MethodName.DelayedUnpause);

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,6 +31,10 @@ 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()
{
@ -49,6 +53,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 =
OnSizeChanged();
@ -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();
Image scaled;
Vector2I size;
if (useMenuCursor)
{
scaled = (Image)_menuMouseImage.Duplicate();
size = (Vector2I)(scale * _menuMouseTexture.GetSize());
var 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()

View file

@ -46,6 +46,7 @@ public partial class MainMenu : CanvasLayer
public override void _Ready()
{
DefaultSelectedButton.GrabFocus();
GlobalState.Instance.ChangeCursor(true);
}
// Called every frame. 'delta' is the elapsed time since the previous frame.

View file

@ -62,6 +62,7 @@ public partial class PauseMenu : Control
private void QuitButtonOnPressed()
{
_gameManager.Unpause();
GlobalState.Instance.ChangeCursor(true);
GlobalState.Instance.GotoScene(MainMenuScene);
//GetTree().ChangeSceneToFile(MainMenuScene);
}

Binary file not shown.

BIN
Sprites/UI/Aiming_Reticule_Cursor.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b76bhqv247nft"
path="res://.godot/imported/Aiming_Reticule_Cursor.png-de5667f1b24c9f53f238e1f246925739.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Sprites/UI/Aiming_Reticule_Cursor.png"
dest_files=["res://.godot/imported/Aiming_Reticule_Cursor.png-de5667f1b24c9f53f238e1f246925739.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1