diff --git a/Scripts/GameManager.cs b/Scripts/GameManager.cs index 97f03b5d..d512da98 100644 --- a/Scripts/GameManager.cs +++ b/Scripts/GameManager.cs @@ -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); diff --git a/Scripts/GlobalState.cs b/Scripts/GlobalState.cs index 9882ed72..c5935d31 100644 --- a/Scripts/GlobalState.cs +++ b/Scripts/GlobalState.cs @@ -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(_menuMouseTexturePath); _menuMouseImage = _menuMouseTexture.GetImage(); + + _reticuleMouseTexture = ResourceLoader.Load(_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() diff --git a/Scripts/MainMenu.cs b/Scripts/MainMenu.cs index 0a19dac2..cd1224db 100644 --- a/Scripts/MainMenu.cs +++ b/Scripts/MainMenu.cs @@ -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. diff --git a/Scripts/UI/PauseMenu.cs b/Scripts/UI/PauseMenu.cs index 9281d4c5..0c8ace62 100644 --- a/Scripts/UI/PauseMenu.cs +++ b/Scripts/UI/PauseMenu.cs @@ -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); } diff --git a/Sprites/UI/Aiming_Reticule_Cursor.ase b/Sprites/UI/Aiming_Reticule_Cursor.ase new file mode 100644 index 00000000..cedc1544 Binary files /dev/null and b/Sprites/UI/Aiming_Reticule_Cursor.ase differ diff --git a/Sprites/UI/Aiming_Reticule_Cursor.png b/Sprites/UI/Aiming_Reticule_Cursor.png new file mode 100644 index 00000000..c2345096 --- /dev/null +++ b/Sprites/UI/Aiming_Reticule_Cursor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fdad42049f7b27809dbef0ee094fdc34dc74619b09762fbcb46a5269738a1f6 +size 148 diff --git a/Sprites/UI/Aiming_Reticule_Cursor.png.import b/Sprites/UI/Aiming_Reticule_Cursor.png.import new file mode 100644 index 00000000..b153ad00 --- /dev/null +++ b/Sprites/UI/Aiming_Reticule_Cursor.png.import @@ -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