46 lines
1.1 KiB
GDScript
46 lines
1.1 KiB
GDScript
# CursorManager —— 对齐 ClientVS22 mousemodule.py 的光标状态机。
|
|
#
|
|
# 光标和“鼠标跟随物品”是两层:本节点只管理当前交互语义,
|
|
# MouseController 负责跟随鼠标的物品图标。没有对应 .sub 资源时使用 Godot
|
|
# 系统光标,避免把资源缺失误报成输入状态缺失。
|
|
extends Node
|
|
|
|
signal changed(shape: String)
|
|
|
|
const NORMAL := "NORMAL"
|
|
const ATTACK := "ATTACK"
|
|
const TALK := "TALK"
|
|
const CANT_GO := "CANT_GO"
|
|
const PICK := "PICK"
|
|
const BUY := "BUY"
|
|
const SELL := "SELL"
|
|
const ITEM := "ITEM"
|
|
|
|
var _shape := NORMAL
|
|
|
|
func set_cursor(shape: String) -> void:
|
|
if shape not in [NORMAL, ATTACK, TALK, CANT_GO, PICK, BUY, SELL, ITEM]:
|
|
shape = NORMAL
|
|
_shape = shape
|
|
Input.set_default_cursor_shape(_godot_shape(shape))
|
|
changed.emit(shape)
|
|
|
|
func get_cursor() -> String:
|
|
return _shape
|
|
|
|
func reset() -> void:
|
|
set_cursor(NORMAL)
|
|
|
|
func _godot_shape(shape: String) -> Input.CursorShape:
|
|
match shape:
|
|
ATTACK:
|
|
return Input.CURSOR_CROSS
|
|
TALK, BUY, SELL, PICK:
|
|
return Input.CURSOR_POINTING_HAND
|
|
CANT_GO:
|
|
return Input.CURSOR_FORBIDDEN
|
|
ITEM:
|
|
return Input.CURSOR_DRAG
|
|
_:
|
|
return Input.CURSOR_ARROW
|