class_name ScenePortal extends Area2D # ============================================================================ # ScenePortal.gd - 场景入口传送组件 # ============================================================================ # 提供轻量级场景跳转能力,用于广场、小区和个人空间之间的入口。 # ============================================================================ @export var targetSceneName: String = "" @export var targetSpawnName: String = "" @export var targetPosition: Vector2 = Vector2.ZERO @export var interactionTitle: String = "进入" @export var interactionDistance: float = 160.0 func _ready() -> void: var label: String = interactionTitle.strip_edges() if label.is_empty(): label = "进入 %s" % targetSceneName var interactable: InteractableComponent = InteractableComponent.new() interactable.interaction_id = "portal:%s" % str(get_path()) interactable.interaction_title = label interactable.interaction_priority = 20 interactable.interaction_distance = interactionDistance interactable.activation_method = &"_change_scene" add_child(interactable) func _on_body_entered(body: Node2D) -> void: return func _change_scene() -> void: if targetSceneName.is_empty(): push_warning("ScenePortal: targetSceneName is empty.") return if not targetSpawnName.is_empty(): SceneManager.set_next_spawn_name(targetSpawnName) elif targetPosition != Vector2.ZERO: SceneManager.set_next_scene_position(targetPosition) SceneManager.change_scene(targetSceneName)