extends Node2D var sprite: Sprite var current_action_idx := 0 var last_action_idx := 0 func _ready() -> void: sprite = preload("res://sprite.tscn").instantiate() sprite.load_file("res://data/extracted/data/sprite/cursors.spr") add_child(sprite) sprite.action_data.frame_times[0] *= 2.0 for idx in sprite.action_data.frame_times.size(): sprite.action_data.frame_times[idx] *= 1.0 Input.mouse_mode = Input.MOUSE_MODE_HIDDEN func _process(_delta: float) -> void: sprite.global_position = get_global_mouse_position() if Input.get_current_cursor_shape() == Input.CURSOR_ARROW: current_action_idx = 0 elif Input.get_current_cursor_shape() == Input.CURSOR_POINTING_HAND: current_action_idx = 2 else: current_action_idx = -1 if current_action_idx == -1: Input.mouse_mode = Input.MOUSE_MODE_VISIBLE sprite.visible = false elif current_action_idx != last_action_idx: sprite.set_current_action(current_action_idx) Input.mouse_mode = Input.MOUSE_MODE_HIDDEN sprite.visible = true if current_action_idx == 0 and sprite.get_node("%SpriteLayers").get_child_count() == 1: Input.set_custom_mouse_cursor(sprite.get_node("%SpriteLayers").get_child(0).texture.get_image()) Input.mouse_mode = Input.MOUSE_MODE_VISIBLE sprite.visible = false last_action_idx = current_action_idx func _input(event: InputEvent) -> void: if event is InputEventMouseButton: pass