35 lines
960 B
GDScript
35 lines
960 B
GDScript
extends StaticBody3D
|
|
|
|
@export var target_scene: String = "res://scenes/dungeon/dungeon.tscn"
|
|
@export var is_exit: bool = false
|
|
|
|
var active := false
|
|
|
|
func _ready() -> void:
|
|
if not is_exit:
|
|
if GameState.dungeon_cleared:
|
|
queue_free()
|
|
return
|
|
get_tree().create_timer(0.5).timeout.connect(_check_overlapping)
|
|
else:
|
|
get_tree().create_timer(1.0).timeout.connect(func() -> void: active = true)
|
|
|
|
func _check_overlapping() -> void:
|
|
active = true
|
|
for body in $GateArea.get_overlapping_bodies():
|
|
_on_gate_area_body_entered(body)
|
|
|
|
func _on_gate_area_body_entered(body: Node3D) -> void:
|
|
if not active:
|
|
return
|
|
if body is CharacterBody3D and body.name == "Player":
|
|
GameState.save_player(body)
|
|
if is_exit:
|
|
GameState.returning_from_dungeon = true
|
|
else:
|
|
GameState.portal_position = global_position
|
|
call_deferred("_change_scene")
|
|
|
|
func _change_scene() -> void:
|
|
get_tree().change_scene_to_file(target_scene)
|