add custom cursor
This commit is contained in:
44
scripts/globals/cursor.gd
Normal file
44
scripts/globals/cursor.gd
Normal 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
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user