diff --git a/ExternalMaterial/3DCursor/3DCursor.png b/ExternalMaterial/3DCursor/3DCursor.png new file mode 100644 index 00000000..036475fe --- /dev/null +++ b/ExternalMaterial/3DCursor/3DCursor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42d3346a11e9847904627ebd770233a27cf0f7a2aec0dbec9e0b20826fef2408 +size 460 diff --git a/ExternalMaterial/3DCursor/3DCursor.png.import b/ExternalMaterial/3DCursor/3DCursor.png.import new file mode 100644 index 00000000..f8eef80d --- /dev/null +++ b/ExternalMaterial/3DCursor/3DCursor.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d3oxwik1uoe4j" +path="res://.godot/imported/3DCursor.png-3846395cd15d92b7aa2d0b098e1c7a4b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ExternalMaterial/3DCursor/3DCursor.png" +dest_files=["res://.godot/imported/3DCursor.png-3846395cd15d92b7aa2d0b098e1c7a4b.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 diff --git a/ExternalMaterial/3DCursor/3DCursor.pxc b/ExternalMaterial/3DCursor/3DCursor.pxc new file mode 100644 index 00000000..8dc9763a Binary files /dev/null and b/ExternalMaterial/3DCursor/3DCursor.pxc differ diff --git a/ExternalMaterial/3DCursor/3DCursor.pxc1 b/ExternalMaterial/3DCursor/3DCursor.pxc1 new file mode 100644 index 00000000..52c2c178 Binary files /dev/null and b/ExternalMaterial/3DCursor/3DCursor.pxc1 differ diff --git a/ExternalMaterial/CirnoTitle/CirnoTitleRecovered.pxc b/ExternalMaterial/CirnoTitle/CirnoTitleRecovered.pxc index 38aef310..a64d50fb 100644 Binary files a/ExternalMaterial/CirnoTitle/CirnoTitleRecovered.pxc and b/ExternalMaterial/CirnoTitle/CirnoTitleRecovered.pxc differ diff --git a/ExternalMaterial/CirnoTitle/CirnoTitleRecovered.pxc1 b/ExternalMaterial/CirnoTitle/CirnoTitleRecovered.pxc1 index 5c1b3418..279d7938 100644 Binary files a/ExternalMaterial/CirnoTitle/CirnoTitleRecovered.pxc1 and b/ExternalMaterial/CirnoTitle/CirnoTitleRecovered.pxc1 differ diff --git a/Scripts/GlobalState.cs b/Scripts/GlobalState.cs index 4550a380..d66d4d63 100644 --- a/Scripts/GlobalState.cs +++ b/Scripts/GlobalState.cs @@ -1,3 +1,4 @@ +using System; using System.Threading.Tasks; using Cirno.Scripts.Resources; using Cirno.Scripts.Utils; @@ -20,6 +21,12 @@ public partial class GlobalState : Node private Control _loadingPlaque; + private readonly StringName _menuMouseTexturePath = "uid://d3oxwik1uoe4j"; + private readonly StringName _reticuleMouseTexturePath = "uid://8nns6w0skiy3"; + + private Texture2D _menuMouseTexture; + private Image _menuMouseImage; + public override void _Ready() { Instance = this; @@ -32,9 +39,28 @@ public partial class GlobalState : Node _fader = CreateFader(); + _menuMouseTexture =ResourceLoader.Load(_menuMouseTexturePath); + _menuMouseImage = _menuMouseTexture.GetImage(); + + GetTree().GetRoot().SizeChanged += OnSizeChanged; + //_mouseTexture = + OnSizeChanged(); //LoadPlaque(); } + private void OnSizeChanged() + { + var root = GetTree().GetRoot(); + var baseSize = root.ContentScaleSize; + var newSize = root.Size; + + int scaleX = newSize.X / baseSize.X; + int scaleY = newSize.Y / baseSize.Y; + int scale = Math.Min(scaleX, scaleY); // Ensure pixel-perfect scaling + + ResizeCursor(scale / 2); + } + public void GotoScene(string path) { // This function will usually be called from a signal callback, @@ -176,9 +202,21 @@ public partial class GlobalState : Node saveFile.StoreLine(jsonString); } - + public void LoadGame() { } + + public void ResizeCursor(float scale) + { + var scaled = (Image)_menuMouseImage.Duplicate(); + + var size = (Vector2I)(scale * _menuMouseTexture.GetSize()); + + scaled.Resize(size.X, size.Y, Image.Interpolation.Nearest); + + DisplayServer.CursorSetCustomImage(scaled); + } + } \ No newline at end of file diff --git a/Scripts/UI/OptionsMenu.cs b/Scripts/UI/OptionsMenu.cs index e10f3753..2b4319ed 100644 --- a/Scripts/UI/OptionsMenu.cs +++ b/Scripts/UI/OptionsMenu.cs @@ -120,5 +120,9 @@ public partial class OptionsMenu : MenuBase AudioServer.SetBusVolumeLinear(AudioServer.GetBusIndex("Effects"), config.GetValue("Audio", "Effects", AudioServer.GetBusVolumeLinear(AudioServer.GetBusIndex("Effects"))).AsSingle()); AudioServer.SetBusVolumeLinear(AudioServer.GetBusIndex("Music"), config.GetValue("Audio", "Music", AudioServer.GetBusVolumeLinear(AudioServer.GetBusIndex("Music"))).AsSingle()); + + // Scale mouse + + GlobalState.Instance.ResizeCursor(4); } } \ No newline at end of file diff --git a/project.godot b/project.godot index 959366a3..d68930e0 100644 --- a/project.godot +++ b/project.godot @@ -127,8 +127,6 @@ window/size/window_width_override=1920 window/size/window_height_override=1080 window/stretch/mode="canvas_items" window/stretch/scale_mode="integer" -mouse_cursor/custom_image="uid://8nns6w0skiy3" -mouse_cursor/custom_image_hotspot=Vector2(24, 24) [dotnet]