@tool extends HandnoteEvent2D @export_range(0, 5) var chapter := 1 @export_tool_button("同步") var sync_nodes = _sync_nodes @export var slices_path = "res://asset/art/ui/note/c02_slices/" # 0 初始化隐藏,1 开始显示,2 划掉,3 结束隐藏 @export var ignore_stages: Array[int] = [0, 3] func _ready() -> void: if Engine.is_editor_hint(): return super._ready() visible = stage == chapter func _sync_nodes() -> void: if not DirAccess.dir_exists_absolute(slices_path): printerr("目录不存在: ", slices_path) return var existed_events = [] _travase_existed_nodes(get_tree().edited_scene_root, existed_events) for s in DirAccess.get_files_at(slices_path): var evt = &"handnote_" + s.split(".")[0] if existed_events.has(evt): continue print("[color=green]创建事件节点: ", evt) var event_node = HandnoteEvent2D.new() as HandnoteEvent2D event_node.texture = load(slices_path + s) event_node = event_node event_node.event = evt event_node.hide_if_on_stage = ignore_stages.duplicate() add_child(event_node) event_node.owner = get_tree().edited_scene_root func _travase_existed_nodes(node, existed_events: Array): if not node: return if node is HandnoteEvent2D: existed_events.append(node.event) print("配置已存在的事件节点: ", node.event) if len(node.hide_if_on_stage) == 0: print_rich("[color=green]设置 hide_if_on_stage: ", ignore_stages) node.hide_if_on_stage = ignore_stages.duplicate() else: print_rich("[color=cyan]已存在 hide_if_on_stage,跳过设置: ", node.hide_if_on_stage) for c in node.get_children(): _travase_existed_nodes(c, existed_events)