@tool extends RefCounted class_name ReedSceneIDEditorSystem const DB_PATH := "res://addons/reedscene/demo/data_base/GLOBAL_SCENE_ID.tres" static func _load_db_readonly() -> SceneIDDatabase: # 忽略缓存,避免拿到同一个共享实例(更稳) return ResourceLoader.load(DB_PATH, "", ResourceLoader.CACHE_MODE_IGNORE) static func _clone_db_to_new(db_ro: SceneIDDatabase) -> SceneIDDatabase: var db := SceneIDDatabase.new() if db_ro: db.next_id = db_ro.next_id # 深拷贝 Dictionary,彻底断开只读引用链 db.scene_map = db_ro.scene_map.duplicate(true) return db static func request_id_for_scene(scene_path: String) -> int: var db_ro := _load_db_readonly() if db_ro == null: push_error("[ReedSceneIDEditorSystem] Database not found: " + DB_PATH) return -1 var db := _clone_db_to_new(db_ro) if db.scene_map.has(scene_path): return int(db.scene_map[scene_path]) var new_id := db.next_id db.next_id += 1 db.scene_map[scene_path] = new_id var err := ResourceSaver.save(db, DB_PATH) if err != OK: push_error("[ReedSceneIDEditorSystem] Failed to save DB (%s), err=%d" % [DB_PATH, err]) return -1 return new_id