diff --git a/scenes/room/room.gd b/scenes/room/room.gd index 5f1fbc6..04193e7 100644 --- a/scenes/room/room.gd +++ b/scenes/room/room.gd @@ -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 diff --git a/scenes/room/room.tscn b/scenes/room/room.tscn index ed6d609..a5e73a3 100644 --- a/scenes/room/room.tscn +++ b/scenes/room/room.tscn @@ -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") diff --git a/scenes/room/room_config.gd b/scenes/room/room_config.gd index 5240e90..0abbaae 100644 --- a/scenes/room/room_config.gd +++ b/scenes/room/room_config.gd @@ -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 diff --git a/scenes/room/states/room_entering.gd b/scenes/room/states/room_entering.gd index c247215..0119179 100644 --- a/scenes/room/states/room_entering.gd +++ b/scenes/room/states/room_entering.gd @@ -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 diff --git a/scenes/worlds/yukotsukis_room/yukotsukis_room.tscn b/scenes/worlds/yukotsukis_room/yukotsukis_room.tscn index 4deb5ac..20888e8 100644 --- a/scenes/worlds/yukotsukis_room/yukotsukis_room.tscn +++ b/scenes/worlds/yukotsukis_room/yukotsukis_room.tscn @@ -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") diff --git a/scenes/worlds/yukotsukis_room/yukotsukis_room_config.tres b/scenes/worlds/yukotsukis_room/yukotsukis_room_config.tres index f0ce783..7e62090 100644 --- a/scenes/worlds/yukotsukis_room/yukotsukis_room_config.tres +++ b/scenes/worlds/yukotsukis_room/yukotsukis_room_config.tres @@ -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"