Files
mtgodot-poc/project/ui/cursor_manager.gd
T

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