summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tuomi <jan@jantuomi.fi>2025-11-19 20:06:53 +0200
committerJan Tuomi <jan@jantuomi.fi>2025-11-19 20:06:53 +0200
commitcb1655c3e3958845ec6b2b6ab634149cede152a8 (patch)
tree504040e814e74b00ec6302a40b5543e23f2ccf4d
parentd61ad72495dd1514ad1833a31df3f63208160fe6 (diff)
Improve room change
-rw-r--r--player.gd4
-rw-r--r--player.tscn2
-rw-r--r--top.gd33
-rw-r--r--top.tscn69
4 files changed, 76 insertions, 32 deletions
diff --git a/player.gd b/player.gd
index bda8616..645c8b2 100644
--- a/player.gd
+++ b/player.gd
@@ -1,6 +1,8 @@
class_name Player
extends CharacterBody2D
+@onready var top: Top = get_tree().root.get_node("Top")
+
@export var speed: float
@export var jump_strength: float
@export var coyote_max: int
@@ -39,6 +41,8 @@ func _process(_delta: float) -> void:
$AnimatedSprite2D.set_animation("idle")
func _physics_process(delta: float):
+ if not top.objects_active: return
+
var grav_coef = 1.0
if velocity.y < 0 and Input.is_action_pressed("jump"):
grav_coef = 1.0 + (jump_held_coef * velocity.y / jump_strength)
diff --git a/player.tscn b/player.tscn
index 851952d..40e2720 100644
--- a/player.tscn
+++ b/player.tscn
@@ -109,7 +109,7 @@ position = Vector2(0, -1)
sprite_frames = SubResource("SpriteFrames_rj586")
animation = &"idle"
autoplay = "idle"
-frame_progress = 0.90102535
+frame_progress = 0.4343156
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2(0, 3)
diff --git a/top.gd b/top.gd
index f7e98fe..63335c4 100644
--- a/top.gd
+++ b/top.gd
@@ -5,6 +5,11 @@ extends Node2D
var save_state_path = "user://save_state.cfg"
var save_state = ConfigFile.new()
+## Should objects like the Player react to input, and enemies move
+var objects_active = true
+
+var _transition_room: Node
+
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
var room = initial_room.instantiate()
@@ -19,33 +24,43 @@ func _ready() -> void:
save_state.save(save_state_path)
print(OS.get_data_dir())
-var _transition_room: Node
-
func transition_to_room(room_name: String):
+ # 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
+
# Start animation
# The animation calls _change_room at a specific time
- $TransitionCanvas/AnimationPlayer.play("room_transition")
+ $TransitionCanvas/AnimationPlayer.play("room_trans_start")
+ objects_active = false
var room = ResourceLoader.load("res://room_" + room_name + ".tscn")
_transition_room = room.instantiate()
-func _change_room():
+func _transition_start():
+ print_debug("_transition_start")
var current_room = get_node("active_room")
remove_child(current_room)
+ current_room.queue_free()
- # If the room hasn't loaded yet, busy loop until it is
+ # If the room hasn't loaded yet, loop until it is
while _transition_room == null:
await get_tree().create_timer(0.1).timeout
var next_room: Node = _transition_room
next_room.name = "active_room"
- next_room.process_mode = Node.PROCESS_MODE_PAUSABLE
+ next_room.connect("ready", _on_room_changed)
add_child(next_room)
- _transition_room = null
+func _on_room_changed():
+ print_debug("_on_room_changed")
+ $TransitionCanvas/AnimationPlayer.play("room_trans_end")
-func set_paused(paused: bool):
- get_tree().paused = paused
+func _transition_end():
+ print_debug("_transition_end")
+ objects_active = true
+ _transition_room = null
func save():
save_state.save("user://save_state.cfg")
diff --git a/top.tscn b/top.tscn
index 69776e8..b47a0aa 100644
--- a/top.tscn
+++ b/top.tscn
@@ -1,11 +1,10 @@
-[gd_scene load_steps=6 format=3 uid="uid://cey3jxnpmommt"]
+[gd_scene load_steps=7 format=3 uid="uid://cey3jxnpmommt"]
[ext_resource type="Script" uid="uid://dxbspy72bg0db" path="res://top.gd" id="1_on2c2"]
[ext_resource type="PackedScene" uid="uid://cjdhfl70fgt6m" path="res://room_main_menu.tscn" id="2_58ij3"]
-[sub_resource type="Animation" id="Animation_on2c2"]
-resource_name = "room_transition"
-length = 4.0
+[sub_resource type="Animation" id="Animation_58ij3"]
+length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
@@ -13,10 +12,26 @@ tracks/0/path = NodePath(".:color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
-"times": PackedFloat32Array(0, 2, 4),
-"transitions": PackedFloat32Array(1, 1, 1),
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
"update": 0,
-"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 1), Color(0, 0, 0, 0)]
+"values": [Color(0, 0, 0, 0)]
+}
+
+[sub_resource type="Animation" id="Animation_2exal"]
+resource_name = "room_trans_start"
+length = 2.0
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath(".:color")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0, 2),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 1)]
}
tracks/1/type = "method"
tracks/1/imported = false
@@ -25,22 +40,17 @@ tracks/1/path = NodePath("../..")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
-"times": PackedFloat32Array(0, 2, 4),
-"transitions": PackedFloat32Array(1, 1, 1),
+"times": PackedFloat32Array(2),
+"transitions": PackedFloat32Array(1),
"values": [{
-"args": [true],
-"method": &"set_paused"
-}, {
"args": [],
-"method": &"_change_room"
-}, {
-"args": [false],
-"method": &"set_paused"
+"method": &"_transition_start"
}]
}
-[sub_resource type="Animation" id="Animation_58ij3"]
-length = 0.001
+[sub_resource type="Animation" id="Animation_edsjh"]
+resource_name = "room_trans_end"
+length = 2.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
@@ -48,16 +58,31 @@ tracks/0/path = NodePath(".:color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
-"times": PackedFloat32Array(0),
-"transitions": PackedFloat32Array(1),
+"times": PackedFloat32Array(0, 2),
+"transitions": PackedFloat32Array(1, 1),
"update": 0,
-"values": [Color(0, 0, 0, 0)]
+"values": [Color(0, 0, 0, 1), Color(0, 0, 0, 0)]
+}
+tracks/1/type = "method"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("../..")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(2),
+"transitions": PackedFloat32Array(1),
+"values": [{
+"args": [],
+"method": &"_transition_end"
+}]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_2exal"]
_data = {
&"RESET": SubResource("Animation_58ij3"),
-&"room_transition": SubResource("Animation_on2c2")
+&"room_trans_end": SubResource("Animation_edsjh"),
+&"room_trans_start": SubResource("Animation_2exal")
}
[node name="Top" type="Node2D"]