Files
whale-town-front-v2/scenes/Maps/ScenePortal.gd
2026-07-21 23:23:26 +08:00

42 lines
1.5 KiB
GDScript

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)