Gamepad support

This commit is contained in:
Rendo 2025-07-28 05:07:37 +05:00
commit ed369cf718
24 changed files with 240 additions and 78 deletions

View file

@ -1,50 +1,52 @@
using Godot;
using Newlon.Components.Level;
namespace Newlon;
public partial class Cursor : Node
public partial class Cursor : Node2D
{
public static Cursor Instance { get; private set; }
#region Textures
private readonly Texture2D defaultArrow = ResourceLoader.Load<Texture2D>("uid://c20dwjohaljdk");
private readonly Texture2D defaultPoint = ResourceLoader.Load<Texture2D>("uid://cw0rqtl8ulndd");
private readonly Texture2D shovelArrow = ResourceLoader.Load<Texture2D>("uid://dq375kjjo17g2");
private readonly Texture2D plantArrow = ResourceLoader.Load<Texture2D>("uid://dx123mhv4oee");
#endregion
public static Cursor Instance { get; private set; }
public bool shovel = false;
public bool plant = false;
public static CursorMode Mode = CursorMode.Mouse;
private float sensitivity = 200.0f;
public override void _Ready()
public enum CursorMode
{
Mouse,
Gamepad
}
public override void _EnterTree()
{
Instance = this;
SetDefaultCursor();
}
public void UpdateCursor()
public override void _Process(double delta)
{
if (shovel)
switch (Mode)
{
SetShovelCursor();
return;
case CursorMode.Mouse:
break;
case CursorMode.Gamepad:
var vector = Input.GetVector("cursor_left", "cursor_right", "cursor_up", "cursor_down");
var set_position = GetGlobalMousePosition() + vector * (float)delta * sensitivity;
GetViewport().WarpMouse(GetGlobalTransformWithCanvas() * set_position);
break;
}
if (plant)
{
SetPlantCursor();
return;
}
SetDefaultCursor() ;
}
public void SetDefaultCursor()
}
public static Vector2 GetCursorPosition()
{
Input.SetCustomMouseCursor(ResourceLoader.Load<Texture2D>("res://assets/sprites/atlases/cursor/default_arrow.png"),shape:Input.CursorShape.Arrow);
Input.SetCustomMouseCursor(ResourceLoader.Load<Texture2D>("res://assets/sprites/atlases/cursor/default_point.png"),shape:Input.CursorShape.PointingHand);
}
public void SetPlantCursor()
{
Input.SetCustomMouseCursor(ResourceLoader.Load<Texture2D>("res://assets/sprites/atlases/cursor/plant_arrow.png"));
}
public void SetShovelCursor()
{
Input.SetCustomMouseCursor(ResourceLoader.Load<Texture2D>("res://assets/sprites/atlases/cursor/shovel_arrow.png"));
return Instance.GetGlobalMousePosition();
}
}