add custom cursor

This commit is contained in:
2025-02-27 03:09:30 +10:00
parent 77764f2892
commit 5f1cd4b796
7 changed files with 120 additions and 6 deletions

44
scripts/globals/cursor.gd Normal file
View File

@@ -0,0 +1,44 @@
extends CanvasLayer
@export var side_change_speed: float = 15
var _side: float
@onready var _base: Control = $CursorBase
# @onready var _circle: Control = $CursorBase/CursorCircle
@onready var _bat: Control = $CursorBase/CursorBat
# func _ready() -> void:
# Input.mouse_mode = Input.MOUSE_MODE_HIDDEN
func _process(delta: float) -> void:
if not Referencer.player or not Referencer.main_camera:
var mouse_pos := get_viewport().get_mouse_position()
_base.position = mouse_pos - _base.size / 2
_bat.visible = false
return
_bat.visible = true
var player_pos_world := Referencer.player.attack.global_position
var player_pos_screen := Referencer.main_camera.unproject_position(player_pos_world)
var cursor_pos_world := player_pos_world + Referencer.player.aiming.aim_offset
var cursor_pos_screen := Referencer.main_camera.unproject_position(cursor_pos_world)
_base.position = cursor_pos_screen - _base.size / 2
_side = lerpf(
_side,
(
(PI / 2.0)
* (
1.0
if Referencer.player.attack.side == PlayerAttack.Side.RIGHT
else -1.0
)
),
side_change_speed * delta
)
var angle := (
player_pos_screen.angle_to_point(_base.position + _base.size / 2) + _side
)
_bat.rotation = angle

View File

@@ -46,12 +46,10 @@ func _input(event: InputEvent) -> void:
if mode == Mode.KB_MOUSE and event_mode == Mode.CONTROLLER:
mode = Mode.CONTROLLER
mode_changed.emit(mode)
Input.mouse_mode = Input.MOUSE_MODE_HIDDEN
if mode == Mode.CONTROLLER and event_mode == Mode.KB_MOUSE:
mode = Mode.KB_MOUSE
mode_changed.emit(mode)
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
if Debugger.show_debug() and event.is_pressed():
Debugger.text("input", _get_event_prompt_current_mode(event))