Files
whale-town-front/scenes/Maps/DoorTeleport.gd
xiangwang ed7d89e39d feat:增加多角色在线功能
- 增加远程登录角色精灵
- 基于后端接口完成位置同步
- 实现多人在线以及跳转
- 增加个人房间功能
2026-01-10 21:26:15 +08:00

40 lines
1.6 KiB
GDScript

extends Area2D
# 场景名称
@export var target_scene_name: String = ""
@export var target_position: Vector2 = Vector2.ZERO # 兼容旧逻辑
@export var target_spawn_name: String = "" # 新逻辑:指定目标场景的 Marker2D 名称 (例如 "FromSquare") # 目标场景的生成位置 (Vector2.ZERO 表示使用默认位置/不设置)
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
# 连接 body_entered 信号
body_entered.connect(_on_body_entered)
func _on_body_entered(body: Node2D) -> void:
# 检查进入的物体是否为玩家
# 我们可以通过多种方式检查:
# 1. 检查是否在 "player" 组中 (推荐,但需要设置)
# 2. 检查是否有特定方法 (如 _handle_movement)
# 3. 检查类名 (如果 scripts/characters/player.gd 有 class_name)
# 这里使用方法检查作为一种鲁棒的方式,或者检查是否为 CharacterBody2D 且父节点层级符合预期
# 最简单直接的方式是检查是否有 _handle_movement 方法,这是 player.gd 特有的
if body.has_method("_handle_movement"):
print("玩家进入传送门,正在切换到场景: ", target_scene_name)
_teleport_player()
func _teleport_player() -> void:
if target_scene_name == "":
print("Error: Target scene name is empty!")
return
print("Teleporting to scene: ", target_scene_name)
# 设置参数
if target_spawn_name != "":
SceneManager.set_next_spawn_name(target_spawn_name)
elif target_position != Vector2.ZERO:
SceneManager.set_next_scene_position(target_position)
SceneManager.change_scene(target_scene_name)