summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tuomi <jan@jantuomi.fi>2025-11-21 09:37:32 +0200
committerJan Tuomi <jan@jantuomi.fi>2025-11-21 09:37:32 +0200
commit691d9967bd9fac6c3b0e272d3c91f60ba077104a (patch)
treec5582ae0f33f2da9dd4293d20c7f6c85dba8236d
parenta2ed86861122d25f0d4fe1ce7a8ec31429a134b2 (diff)
Refactor transitions
-rw-r--r--door.gd7
-rw-r--r--esc_listener.gd2
-rw-r--r--player.gd1
-rw-r--r--room_main_menu.gd2
-rw-r--r--top.gd24
5 files changed, 19 insertions, 17 deletions
diff --git a/door.gd b/door.gd
index c1b8968..ed8e65b 100644
--- a/door.gd
+++ b/door.gd
@@ -2,6 +2,8 @@
class_name Door
extends Area2D
+@onready var top: Top = get_tree().root.get_node("Top")
+
@export var target_room: String:
set(v):
target_room = v
@@ -19,10 +21,7 @@ func _ready():
update_configuration_warnings()
func _on_body_entered(player: Player) -> void:
- var top: Top = get_tree().root.get_node("Top")
- if not top.is_transitioning():
- player.set_forced_input(enter_towards)
- top.transition_to_room(to_room_path(target_room), target_door)
+ top.room_transition(self, to_room_path(target_room), target_door)
func _get_configuration_warnings() -> PackedStringArray:
var warnings: PackedStringArray = []
diff --git a/esc_listener.gd b/esc_listener.gd
index c0b276a..a10d9d6 100644
--- a/esc_listener.gd
+++ b/esc_listener.gd
@@ -4,4 +4,4 @@ extends Node
func _process(_delta: float) -> void:
if Input.is_action_just_pressed("menu"):
- top.transition_to_room("res://room_main_menu.tscn", null)
+ top.room_transition(null, "res://room_main_menu.tscn", null)
diff --git a/player.gd b/player.gd
index 194e244..3d9addd 100644
--- a/player.gd
+++ b/player.gd
@@ -85,7 +85,6 @@ func _physics_process(delta: float):
move_and_slide()
-## dir: String or null
func set_forced_input(dir: Variant):
var jump_coef = 1.3
if dir == null:
diff --git a/room_main_menu.gd b/room_main_menu.gd
index cba6d69..fd595a5 100644
--- a/room_main_menu.gd
+++ b/room_main_menu.gd
@@ -7,4 +7,4 @@ func _ready() -> void:
func _test_room_button_pressed():
var top: Top = get_tree().root.get_node("Top")
- top.transition_to_room("res://room_test1.tscn", null)
+ top.room_transition(null, "res://room_test1.tscn", null)
diff --git a/top.gd b/top.gd
index 54a8baf..005bca8 100644
--- a/top.gd
+++ b/top.gd
@@ -11,7 +11,7 @@ var _transition_door_name: Variant # String or null
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
var room = initial_room.instantiate()
- room.name = "active_room"
+ room.name = "ActiveRoom"
room.process_mode = Node.PROCESS_MODE_PAUSABLE
add_child(room)
@@ -25,23 +25,27 @@ func _ready() -> void:
func is_transitioning() -> bool:
return _transition_room != null
-func transition_to_room(room_path: String, door_name: Variant):
+func room_transition(from_door: Door, to_room_path: String, door_name: Variant):
# Do not transition if there is already a transition in process
if _transition_room != null:
#print_debug("Tried to transition to ", room_name, " but a transition was already in process")
return
+ if from_door:
+ var player: Player = get_node("ActiveRoom").find_child("Player")
+ player.set_forced_input(from_door.enter_towards)
+
# Start animation
# The animation calls _change_room at a specific time
$TransitionCanvas/AnimationPlayer.play("room_trans_start")
- var room = ResourceLoader.load(room_path)
+ var room = ResourceLoader.load(to_room_path)
_transition_room = room.instantiate()
_transition_door_name = door_name
func _transition_start():
- print_debug("_transition_start")
- var current_room = get_node("active_room")
+ #print_debug("_transition_start")
+ var current_room = get_node("ActiveRoom")
remove_child(current_room)
current_room.queue_free()
@@ -50,15 +54,15 @@ func _transition_start():
await get_tree().create_timer(0.1).timeout
var next_room: Node = _transition_room
- next_room.name = "active_room"
+ next_room.name = "ActiveRoom"
#next_room.connect("ready", _on_room_changed)
next_room.connect("tree_entered", _on_room_changed)
next_room.process_mode = Node.PROCESS_MODE_PAUSABLE
add_child(next_room)
func _on_room_changed():
- print_debug("_on_room_changed")
- var room = get_node("active_room")
+ #print_debug("_on_room_changed")
+ var room = get_node("ActiveRoom")
var player: Player = room.find_child("Player")
if _transition_door_name:
var door: Door = room.find_child(_transition_door_name)
@@ -68,11 +72,11 @@ func _on_room_changed():
$TransitionCanvas/AnimationPlayer.play("room_trans_end")
func _transition_end():
- print_debug("_transition_end")
+ #print_debug("_transition_end")
_transition_room = null
_transition_door_name = null
- var room = get_node("active_room")
+ var room = get_node("ActiveRoom")
var player: Player = room.find_child("Player")
if player:
player.set_forced_input(null)