finish room enter transition

This commit is contained in:
yuki 2025-11-24 20:00:39 -03:00
parent 4dd9b31c27
commit bd6ced2a16
6 changed files with 83 additions and 9 deletions

View file

@ -5,6 +5,8 @@ class_name Room extends Node2D
@onready var camera: RoomCamera = $RoomCamera
@onready var director: StateMachine = $RoomDirector
@onready var palette_shader: ColorRect = $CanvasLayer/PaletteShader
@onready var canvas_modulate: CanvasModulate = $CanvasModulate
# TODO: better alternative to preloading as i add functionality?
# https://theduriel.github.io/Godot/Do-not-use---Preload

View file

@ -8,7 +8,7 @@
[ext_resource type="Script" uid="uid://drnrd5xlt8imm" path="res://scenes/room/states/room_exiting.gd" id="6_7jj40"]
[ext_resource type="Script" uid="uid://ceevyto3vbq7c" path="res://scenes/room/states/room_paused.gd" id="6_gui0a"]
[ext_resource type="Shader" uid="uid://bxvmsjxx0tj21" path="res://shaders/palette.gdshader" id="8_dv301"]
[ext_resource type="Texture2D" uid="uid://h5523ru86vrd" path="res://assets/palettes/forgotten.png" id="9_68b7a"]
[ext_resource type="Texture2D" uid="uid://h5523ru86vrd" path="res://assets/palettes/forgotten-120.png" id="9_68b7a"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ip1yl"]
shader = ExtResource("8_dv301")
@ -21,7 +21,7 @@ script = ExtResource("1_8xru0")
[node name="CanvasLayer" type="CanvasLayer" parent="."]
[node name="ColorRect" type="ColorRect" parent="CanvasLayer"]
[node name="PaletteShader" type="ColorRect" parent="CanvasLayer"]
material = SubResource("ShaderMaterial_ip1yl")
anchors_preset = 15
anchor_right = 1.0
@ -29,6 +29,9 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="CanvasModulate" type="CanvasModulate" parent="."]
visible = false
[node name="RoomDirector" type="Node" parent="." node_paths=PackedStringArray("initial_state")]
process_mode = 3
script = ExtResource("4_vaubn")

View file

@ -16,7 +16,9 @@ class_name RoomConfig extends Resource
@export var camera_position: Vector2i = Vector2i.ZERO
@export_group('Lighting')
## Enables the default canvas modulate.
@export var enable_canvas_modulate: bool = false
## Color of the canvas modulate.
@export var modulate_color: Color
@export_group('Room Loop')
@ -24,3 +26,12 @@ class_name RoomConfig extends Resource
@export var loopable: bool = false
## Section of the room that will loop itself.
@export var loop_size: Rect2i = Rect2i(Vector2i.ZERO, Vector2i.ZERO)
@export_group('Transitions')
@export_subgroup('In')
## Enables transition when room starts.
@export var enable_transition_in: bool = true
## What transition type plays when starting the room.
@export var transition_in_type: Tween.TransitionType = Tween.TransitionType.TRANS_CUBIC
## How long the transition lasts.
@export var transition_in_duration: float = 1.0

View file

@ -1,14 +1,70 @@
extends RoomState
var trans_tween: Tween
var player_light_tween: Tween
func _enter(_previous_state_path: String, _data: Dictionary = {}) -> void:
print("entering room")
room.player = _instantiate_player()
assert(room.player != null, "player is null")
room.camera.global_position = room.config.camera_position
room.player.enable_point_light(true, 0.4)
room.player.point_light.texture_scale = 0
room.canvas_modulate.visible = true
room.canvas_modulate.color = Color.BLACK
var timer: Timer = Timer.new()
room.add_child(timer)
timer.one_shot = true
timer.start(room.config.transition_in_duration)
await timer.timeout
timer.queue_free()
if player_light_tween:
player_light_tween.kill()
player_light_tween = create_tween()
player_light_tween.tween_property(room.player.point_light, "texture_scale", 1.0, room.config.transition_in_duration).set_trans(Tween.TRANS_BOUNCE).set_ease(Tween.EASE_OUT)
await player_light_tween.finished
if player_light_tween:
player_light_tween.kill()
player_light_tween = create_tween()
if room.config.enable_point_light:
player_light_tween.tween_property(room.player.point_light, "energy", room.config.point_light_energy, room.config.transition_in_duration).set_trans(room.config.transition_in_type).set_ease(Tween.EASE_OUT)
player_light_tween.tween_callback(func() -> void:
player_light_tween = null
)
else:
player_light_tween.tween_property(room.player.point_light, "energy", 0, room.config.transition_in_duration).set_trans(room.config.transition_in_type).set_ease(Tween.EASE_OUT)
player_light_tween.tween_callback(func() -> void:
room.player.point_light.enabled = false
player_light_tween = null
)
if trans_tween:
trans_tween.kill()
assert(trans_tween == null, "transgender tween wasnt nulled")
trans_tween = create_tween()
if room.config.enable_canvas_modulate:
trans_tween.tween_property(room.canvas_modulate, "color", room.config.modulate_color, room.config.transition_in_duration).set_trans(room.config.transition_in_type).set_ease(Tween.EASE_OUT)
else:
trans_tween.tween_property(room.canvas_modulate, "color", Color.WHITE, room.config.transition_in_duration).set_trans(room.config.transition_in_type).set_ease(Tween.EASE_OUT)
await trans_tween.finished
finished.emit(PLAYING)
return
func _instantiate_player() -> Player:
@ -22,7 +78,5 @@ func _instantiate_player() -> Player:
"invalid player initial spawn provided"
)
p.global_position = room.config.initial_spawn
if room.config.enable_point_light:
p.enable_point_light(true, room.config.point_light_energy)
return p

View file

@ -8,17 +8,17 @@
[node name="Yukotsuki\'s Room" instance=ExtResource("1_1k8b4")]
config = ExtResource("2_vqekq")
[node name="FloorLayer" type="TileMapLayer" parent="." index="2"]
[node name="FloorLayer" type="TileMapLayer" parent="." index="3"]
tile_map_data = PackedByteArray("AAAPAA4AAQALAAMAAAAPAA0AAQALAAIAAAAPAAwAAQALAA4AAAAPAAsAAQALAAYAAAAPAAoAAQALAAQAAAAOAA4AAQAJAA8AAAAOAA0AAQAJAA4AAAAOAAwAAQAJAAIAAAAOAAsAAQAJAAoAAAAOAAoAAQAKAAQAAAANAA4AAQAJAA8AAAANAA0AAQAJAA4AAAANAAwAAQAJAAYAAAANAAsAAQAJAAYAAAANAAoAAQAKAAwAAAAMAA4AAQAJAAMAAAAMAA0AAQAJAAoAAAAMAAwAAQAJAAYAAAAMAAsAAQAJAA4AAAAMAAoAAQAKAAQAAAALAA4AAQAJAAsAAAALAA0AAQAJAAYAAAALAAwAAQAJAAoAAAALAAsAAQAJAAoAAAALAAoAAQAKAAAAAAAKAA4AAQAJAA8AAAAKAA0AAQAJAAYAAAAKAAwAAQAJAAIAAAAKAAsAAQAJAAIAAAAKAAoAAQAKAAAAAAAJAA4AAQAJAAMAAAAJAA0AAQAJAAYAAAAJAAwAAQAJAAIAAAAJAAsAAQAJAAoAAAAJAAoAAQAKAAwAAAAIAA4AAQAJAAcAAAAIAA0AAQAJAA4AAAAIAAwAAQAJAAIAAAAIAAsAAQAJAAoAAAAIAAoAAQAKAAAAAAAHAA4AAQAJAA8AAAAHAA0AAQAJAAoAAAAHAAwAAQAJAAYAAAAHAAsAAQAJAAoAAAAHAAoAAQAKAAgAAAAGAA4AAQAJAAsAAAAGAA0AAQAJAAYAAAAGAAwAAQAJAAYAAAAGAAsAAQAJAAoAAAAGAAoAAQAKAAgAAAAFAA4AAQAJAA8AAAAFAA0AAQAJAAoAAAAFAAwAAQAJAAoAAAAFAAsAAQAJAAYAAAAFAAoAAQAKAAQAAAAEAA4AAQAIAAcAAAAEAA0AAQAIAAUAAAAEAAwAAQAIAAEAAAAEAAsAAQAIAAUAAAAEAAoAAQAIAAQAAAA=")
tile_set = ExtResource("3_od2gb")
[node name="CarpetLayer" type="TileMapLayer" parent="." index="3"]
[node name="CarpetLayer" type="TileMapLayer" parent="." index="4"]
tile_map_data = PackedByteArray("AAAIAAsAAwAIAAAAAAAJAAsAAwAFAAEAAAAJAAoAAwAIAAAAAAAKAAoAAwAKAAAAAAALAAoAAwAKAAAAAAAMAAoAAwAKAAAAAAANAAoAAwALAAAAAAANAAsAAwAGAAEAAAAOAAsAAwALAAAAAAAOAAwAAwALAAMAAAANAAwAAwAGAAIAAAANAA0AAwALAAMAAAAMAA0AAwAJAAMAAAALAA0AAwAJAAMAAAAKAA0AAwAJAAMAAAAJAA0AAwAJAAMAAAAIAA0AAwAIAAMAAAAIAAwAAwAIAAEAAAAMAAsAAwAJAAIAAAAMAAwAAwAJAAIAAAALAAwAAwAJAAIAAAAKAAwAAwAJAAIAAAAJAAwAAwAJAAIAAAAKAAsAAwAJAAIAAAALAAsAAwAJAAIAAAA=")
tile_set = ExtResource("4_od2gb")
[node name="WallLayer" type="TileMapLayer" parent="." index="4"]
[node name="WallLayer" type="TileMapLayer" parent="." index="5"]
tile_map_data = PackedByteArray("AAADAA4AAAAKAAkAAAADAA0AAAAKAAkAAAADAAwAAAAKAAkAAAADAAsAAAAKAAkAAAADAAoAAAAKAAkAAAADAAkAAAAKAAkAAAAEAAkAAAAKAAkAAAAFAAkAAAAKAAkAAAAGAAkAAAAKAAkAAAAHAAkAAAAKAAkAAAAIAAkAAAAKAAkAAAAJAAkAAAAKAAkAAAAKAAkAAAAKAAkAAAALAAkAAAAKAAkAAAAMAAkAAAAKAAkAAAANAAkAAAAKAAkAAAAOAAkAAAAKAAkAAAAPAAkAAAAKAAkAAAAQAAkAAAAKAAkAAAAQAAoAAAAKAAkAAAAQAAsAAAAKAAkAAAAQAAwAAAAKAAkAAAAQAA0AAAAKAAkAAAAQAA4AAAAKAAkAAAADAA8AAAAKAAkAAAAEAA8AAAAKAAkAAAAFAA8AAAAKAAkAAAAGAA8AAAAKAAkAAAAHAA8AAAAKAAkAAAAIAA8AAAAKAAkAAAAJAA8AAAAKAAkAAAAKAA8AAAAKAAkAAAALAA8AAAAKAAkAAAAMAA8AAAAKAAkAAAANAA8AAAAKAAkAAAAOAA8AAAAKAAkAAAAPAA8AAAAKAAkAAAAQAA8AAAAKAAkAAAA=")
tile_set = ExtResource("4_od2gb")
[node name="CurtainLayer" type="TileMapLayer" parent="." index="5"]
[node name="CurtainLayer" type="TileMapLayer" parent="." index="6"]
tile_set = ExtResource("3_od2gb")

View file

@ -5,6 +5,10 @@
[resource]
script = ExtResource("1_vlksg")
initial_spawn = Vector2i(85, 225)
enable_point_light = true
point_light_energy = 0.4
follow_player = false
camera_position = Vector2i(160, 120)
enable_canvas_modulate = true
modulate_color = Color(0.35156274, 0.35156295, 0.35156283, 1)
metadata/_custom_type_script = "uid://bamoq5wi0lkdy"