diff --git a/Scripts/Components/Actors/KeyboardInputProvider.cs b/Scripts/Components/Actors/KeyboardInputProvider.cs index 1fccba0d..efad25e0 100644 --- a/Scripts/Components/Actors/KeyboardInputProvider.cs +++ b/Scripts/Components/Actors/KeyboardInputProvider.cs @@ -123,6 +123,7 @@ public partial class KeyboardInputProvider : InputProvider private Vector2 GetMouseAimInput() { + return _mouseAImProvider?.GetMouseAimInput() ?? Vector2.Zero; // //Camera2D camera = GetViewport().GetCamera2D(); // //if (camera == null) return Vector2.Zero; // Ensure there's a valid camera diff --git a/Scripts/Components/Actors/MouseAimProvider3D.cs b/Scripts/Components/Actors/MouseAimProvider3D.cs index abfbba91..5ca3689f 100644 --- a/Scripts/Components/Actors/MouseAimProvider3D.cs +++ b/Scripts/Components/Actors/MouseAimProvider3D.cs @@ -5,13 +5,32 @@ namespace Cirno.Scripts.Components.Actors; public partial class MouseAimProvider3D : Node3D, IMouseAimProvider { - public Vector2 GetMouseAimInput() + private Viewport _viewport; + + public override void _Ready() { - Vector2 mouseWorldPos = DisplayServer.MouseGetPosition(); - - var screenPosition = CameraController3D.Instance.UnprojectPosition(this.GlobalPosition); - - return mouseWorldPos - screenPosition; + _viewport = GetViewport(); } + public Vector2 GetMouseAimInput() + { + var mouseWorldPos = GetMouseWorldPosition(this.GlobalPosition.Y); + + var direction = (mouseWorldPos - this.GlobalPosition).Normalized(); + + return new Vector2(direction.X, direction.Z); + } + + public Vector3 GetMouseWorldPosition(float planeHeight = 0) + { + var mousePos = _viewport.GetMousePosition(); + var rayOrigin = CameraController3D.Instance.ProjectRayOrigin(mousePos); + var rayDirection = CameraController3D.Instance.ProjectRayNormal(mousePos); + + var plane = new Plane(Vector3.Up, planeHeight); + + var intersection = plane.IntersectsRay(rayOrigin, rayDirection); + + return intersection ?? Vector3.Zero; + } } \ No newline at end of file diff --git a/addons/debug_draw_3d/libs/~libdd3d.windows.editor.x86_64.dll b/addons/debug_draw_3d/libs/~libdd3d.windows.editor.x86_64.dll new file mode 100644 index 00000000..e733469f Binary files /dev/null and b/addons/debug_draw_3d/libs/~libdd3d.windows.editor.x86_64.dll differ