From f4a173e4325198750c9eb1907d1b89962c33a1fb Mon Sep 17 00:00:00 2001 From: Kellan KOZUME Date: Sun, 19 Apr 2026 20:05:50 -0400 Subject: [PATCH] feat(door): implement door mechanics with locked and open states, add loading zone transition --- assets/sprites/door_locked.png | Bin 0 -> 1419 bytes assets/sprites/door_locked.png.import | 40 ++++++++++++++++++++++++++ assets/sprites/door_open.png | Bin 0 -> 857 bytes assets/sprites/door_open.png.import | 40 ++++++++++++++++++++++++++ assets/tilesets/door_locked.tres | 4 +++ autoloads/game_state.gd | 2 ++ levels/entrepot/door.gd | 22 ++++++++++++++ levels/entrepot/door.gd.uid | 1 + levels/entrepot/door.tscn | 23 +++++++++++++++ levels/entrepot/entrepot.tscn | 20 ++++++++----- levels/loading_zone.gd | 28 ++++++++++++++++++ levels/loading_zone.gd.uid | 1 + levels/loading_zone.tscn | 23 +++++++++++++++ 13 files changed, 197 insertions(+), 7 deletions(-) create mode 100755 assets/sprites/door_locked.png create mode 100644 assets/sprites/door_locked.png.import create mode 100755 assets/sprites/door_open.png create mode 100644 assets/sprites/door_open.png.import create mode 100644 assets/tilesets/door_locked.tres create mode 100644 levels/entrepot/door.gd create mode 100644 levels/entrepot/door.gd.uid create mode 100644 levels/entrepot/door.tscn create mode 100644 levels/loading_zone.gd create mode 100644 levels/loading_zone.gd.uid create mode 100644 levels/loading_zone.tscn diff --git a/assets/sprites/door_locked.png b/assets/sprites/door_locked.png new file mode 100755 index 0000000000000000000000000000000000000000..8fd345bac0efa5976808053dc931077f754761c0 GIT binary patch literal 1419 zcmV;61$6p}P)5VQ0q=gHw6*Vs9XO5cP`u%4TuPWh;*lx;(jPu zWYJRE;MOEAB)Ai|alUu*xqRQ5d+*E})B0fMoO^zL&$;*A`{vEc*5>-@rHjvZ%U-|# z@n^TJzkF9FiBEt0_N$!#!To!gZ!xc|ZzT1#cXzs>{_gvfqAZ%!0lAO!Zd2pkepEAh zQt|{qEuk$#663RsKfY-SZvXsK%6sMN+e7kq_(6yG;zqhbhk5+FFjc@z?j=cSkQzHmNK+V@|poFFs1V^t$3W3GHk9@4Mac>mO$c`6QUT z2tU2PnjDn`UWrLAWgI65`?~YYYc}dSFLW+|&wn^c&PwvuCwCGLkX}?9Xc}9WcOdTr zj!Mp6p~fCmpacSN9?;{cYwz9qNAB4lTb+cuGJrG+UrOqW#(9$C;)$_S^4*(XbPo@H zOJ-VxTsp!9qB#Wwl9TfqQ;B%05wFX;rQ|yO`~-CS)B#674KZEWaT?Hha>*h%>?HT9 zk&6PN*#UQOUVt66S1daRBwn9iZf@rgYClg=8Gu)%&F8bb&-U7!y^V>9QMsHw0$l{3 z0bmfR1B*H;g-WmFK8`+dTm_&x(uY>JfOya$$>moCpg^r)+Fs*T0~x15eiW7f)Eqql z4w5N(++N+*`P!X?O|JtEL_A~Xk0rZoeI z$0*Nn1d5c7kks3bt!!#fMA+o5SUV!9^veiGq4(;2+a-uo6{0xA5(s_#*A_bYjmG=a zpFV!}d%#6`=AEs*wZpn@@IIh@z19UP^8~E|RQwD8IwHrocnB5`7r(`{CTP3M@r@w! zB9sA2@oFUj6tH!9+o|4t6o+?0F-{LaRDSc$)A=Wwf_Ttqt8vuFvATQd;u}5J>Q<~) zdaGkFkHW1enRgKz`TBIyG3jU408S;U;H3m^>tI}7;|BpykeFZ|pju+&2>=TRic-`Q z#N^VKWRmN0->GEwdu|7mpcJSkb9o6|EOIUYVJ?9v1;=)_&bp)rz*lG8rLL)gs(TE$ z3p}{DxfOg7U9SV~pd`NMdr}7ze}u4m5=$}UTiXc}fKux}cLu1;P~sfU4?J7dVEo)2_!GG5TC_82|yGF|d+*>t*LQygSs} zGk=4|ODf`ea>)_^2}{$U`SbIDAP$B@%9CQJZg}gFJFPB4Hxlp2osV{LtP@p0{E^Iy zEdt;TxmT|sTs0m&bdg2c1K`LABFe2L3Xh(-XB?>)5p^2(0L0dkjEY6!309hWbXugo zmmqiA1ArpFpg`WDo`}|qF5H1weN09-B==? z^?*!?V{+CRH0=WnQo^(U8e0E`a+f$zctB_xkGts~+~_8MkmcK%E~J0W{I`IN9_JNv Z{R;qE+t1+_|F8f6002ovPDHLkV1lN5v1|YU literal 0 HcmV?d00001 diff --git a/assets/sprites/door_locked.png.import b/assets/sprites/door_locked.png.import new file mode 100644 index 0000000..3a49dbf --- /dev/null +++ b/assets/sprites/door_locked.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bv7imimvd1mmi" +path="res://.godot/imported/door_locked.png-edb433eca7fc40d5d0d415ed77c0cdfa.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/door_locked.png" +dest_files=["res://.godot/imported/door_locked.png-edb433eca7fc40d5d0d415ed77c0cdfa.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/sprites/door_open.png b/assets/sprites/door_open.png new file mode 100755 index 0000000000000000000000000000000000000000..cf40440dc7a9b255ddc254be73e4357e292c192d GIT binary patch literal 857 zcmV-f1E&0mP)0nH<>lwJ+IgHSxWqx$2a5gcHImD+P?q#?Na%{J8Ko6ym|Fp^?yG4 zq~oE%*7jA|zV~3yjpetzXCNh3sRd+t?AX%ujV=AWkEqtV0Dw#AmNAOSlfqA4If4)G z-iqFvx9^P6@5sk~3_p1U0JUk z!0xpj71$guU9&twf|}gg1O?A(dv@@``MLzaYPAxg#bTkvxdu!+ympXFeHd2>!uuD$ zLYFpcXcYjje_T=J7+4Qz9=@YU3HMF{_0I&-E@x}n~7z9AA^Y^XCyyJn~Kt3K{2g; zhWz6704pK(zEKLGL=G6LhzLXha3Oaes)%4Lk6i)4MfO8O4j?E(Y#kVqDFEnxq6!hF zuF)ubFd-PLXWo7c6WPd!1d^&Omd|G2jpYG=h4KFZphse@iKXLfNcYnV9RS>n6`F&t z10aXMkPJS_A@2%++LqfIMDsuhd5$$$kN04!r#vfu1nV9n0l2go|+9Qz#)>&Mo!r}>YT6&jH09F^ j@~fGxRzXy<`MUl9hOtdefRRND00000NkvXXu0mjfI0TI| literal 0 HcmV?d00001 diff --git a/assets/sprites/door_open.png.import b/assets/sprites/door_open.png.import new file mode 100644 index 0000000..b2b514e --- /dev/null +++ b/assets/sprites/door_open.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://qy6a6o0pkhac" +path="res://.godot/imported/door_open.png-c4e87a72620978bb79fec0850ab38e13.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/door_open.png" +dest_files=["res://.godot/imported/door_open.png-c4e87a72620978bb79fec0850ab38e13.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/tilesets/door_locked.tres b/assets/tilesets/door_locked.tres new file mode 100644 index 0000000..56e2828 --- /dev/null +++ b/assets/tilesets/door_locked.tres @@ -0,0 +1,4 @@ +[gd_resource type="CompressedTexture2D" format=3 uid="uid://2c8t30vwqmp2"] + +[resource] +load_path = "res://.godot/imported/entrepot-tilesets.png-e3f6686008bed17574a462f3ad7205e0.ctex" diff --git a/autoloads/game_state.gd b/autoloads/game_state.gd index 9800e08..58e2d08 100644 --- a/autoloads/game_state.gd +++ b/autoloads/game_state.gd @@ -1,6 +1,7 @@ extends Node signal inventory_changed +signal flag_changed(key: String, value: bool) # Pièces requises par PNJ const REPAIR_REQUIREMENTS := { @@ -20,6 +21,7 @@ func get_flag(key: String) -> bool: func set_flag(key: String, value: bool) -> void: flags[key] = value + flag_changed.emit(key, value) # Items func add_item(id: String, amount: int = 1) -> void: diff --git a/levels/entrepot/door.gd b/levels/entrepot/door.gd new file mode 100644 index 0000000..c76247e --- /dev/null +++ b/levels/entrepot/door.gd @@ -0,0 +1,22 @@ +class_name Door +extends StaticBody2D + +@export var required_flag: String = "vrac7_repaired" +@export var locked_sprite: Texture2D +@export var open_sprite: Texture2D + +@onready var sprite := $Sprite2D +@onready var collision := $CollisionShape2D + +func _ready() -> void: + GameState.flag_changed.connect(_on_flag_changed) + _update_state(GameState.get_flag(required_flag)) + +func _on_flag_changed(flag: String, value: bool) -> void: + if flag == required_flag: + _update_state(value) + +func _update_state(is_open: bool) -> void: + + collision.disabled = is_open + sprite.texture = open_sprite if is_open else locked_sprite diff --git a/levels/entrepot/door.gd.uid b/levels/entrepot/door.gd.uid new file mode 100644 index 0000000..4a6a720 --- /dev/null +++ b/levels/entrepot/door.gd.uid @@ -0,0 +1 @@ +uid://diwj53rfcv4nv diff --git a/levels/entrepot/door.tscn b/levels/entrepot/door.tscn new file mode 100644 index 0000000..75ae14c --- /dev/null +++ b/levels/entrepot/door.tscn @@ -0,0 +1,23 @@ +[gd_scene format=3 uid="uid://ceijd4gd1rxos"] + +[ext_resource type="Script" uid="uid://diwj53rfcv4nv" path="res://levels/entrepot/door.gd" id="1_riqri"] +[ext_resource type="Texture2D" uid="uid://bv7imimvd1mmi" path="res://assets/sprites/door_locked.png" id="2_ltwmt"] +[ext_resource type="Texture2D" uid="uid://qy6a6o0pkhac" path="res://assets/sprites/door_open.png" id="3_xn5p3"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_riqri"] +size = Vector2(32, 43) + +[node name="Door" type="StaticBody2D" unique_id=1014453167] +z_index = 5 +script = ExtResource("1_riqri") +locked_sprite = ExtResource("2_ltwmt") +open_sprite = ExtResource("3_xn5p3") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=928832758] +texture = ExtResource("2_ltwmt") +region_enabled = true +region_rect = Rect2(0, 0, 32, 64) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=978481030] +position = Vector2(0, 10.5) +shape = SubResource("RectangleShape2D_riqri") diff --git a/levels/entrepot/entrepot.tscn b/levels/entrepot/entrepot.tscn index 4d85039..1fd7ce2 100644 --- a/levels/entrepot/entrepot.tscn +++ b/levels/entrepot/entrepot.tscn @@ -11,6 +11,8 @@ [ext_resource type="PackedScene" uid="uid://c52luh50w8hi2" path="res://levels/unlock_zone.tscn" id="8_dm063"] [ext_resource type="PackedScene" uid="uid://fftu7ne6spjy" path="res://levels/entrepot/etagere.tscn" id="9_sju6u"] [ext_resource type="PackedScene" uid="uid://do61r73dbypfd" path="res://levels/journal.tscn" id="10_b870l"] +[ext_resource type="PackedScene" uid="uid://ceijd4gd1rxos" path="res://levels/entrepot/door.tscn" id="11_squor"] +[ext_resource type="PackedScene" uid="uid://b1peufx15gr0v" path="res://levels/loading_zone.tscn" id="13_2edww"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_n70cd"] texture = ExtResource("1_qvgxo") @@ -169,7 +171,7 @@ tile_map_data = PackedByteArray("AAAAACYAAAABAAEAAAAeACYAAAABAAEAAAAeACgAAAAAAAI tile_set = SubResource("TileSet_jr8qv") [node name="Ground" type="TileMapLayer" parent="Map" unique_id=1677946938] -tile_map_data = PackedByteArray("AAAeAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAeACYAAAABAAEAAAAAAAYAAAACAAMAAAAAAAgAAAACAAMAAAAAAAoAAAACAAMAAAAAAAwAAAACAAMAAAAcAAYAAAACAAMAAAAcAAgAAAACAAMAAAAcAAoAAAACAAMAAAAcAAwAAAACAAMAAAAcAA4AAAACAAMAAAAaAA4AAAACAAMAAAAYAA4AAAACAAMAAAAWAA4AAAACAAMAAAAUAA4AAAACAAMAAAASAA4AAAACAAMAAAAOAA4AAAACAAMAAAAMAA4AAAACAAMAAAAKAA4AAAACAAMAAAAIAA4AAAACAAMAAAAGAA4AAAACAAMAAAAEAA4AAAACAAMAAAACAA4AAAACAAMAAAAAAA4AAAACAAMAAAACAAYAAAACAAMAAAAEAAYAAAACAAMAAAAGAAYAAAACAAMAAAAIAAYAAAACAAMAAAAKAAYAAAACAAMAAAAMAAYAAAACAAMAAAAOAAYAAAACAAMAAAAQAAYAAAACAAMAAAASAAYAAAACAAMAAAAUAAYAAAACAAMAAAAWAAYAAAACAAMAAAAYAAYAAAACAAMAAAAaAAYAAAACAAMAAAACAAgAAAACAAMAAAAEAAgAAAACAAMAAAAGAAgAAAACAAMAAAAIAAgAAAACAAMAAAAKAAgAAAACAAMAAAAMAAgAAAACAAMAAAAOAAgAAAACAAMAAAAQAAgAAAACAAMAAAASAAgAAAACAAMAAAAUAAgAAAACAAMAAAAWAAgAAAACAAMAAAAYAAgAAAACAAMAAAAaAAgAAAACAAMAAAAaAAoAAAACAAMAAAAYAAoAAAACAAMAAAAWAAoAAAACAAMAAAAUAAoAAAACAAMAAAASAAoAAAACAAMAAAAQAAoAAAACAAMAAAAOAAoAAAACAAMAAAAMAAoAAAACAAMAAAAKAAoAAAACAAMAAAAIAAoAAAACAAMAAAAGAAoAAAACAAMAAAAEAAoAAAACAAMAAAACAAoAAAACAAMAAAACAAwAAAACAAMAAAAEAAwAAAACAAMAAAAGAAwAAAACAAMAAAAIAAwAAAACAAMAAAAKAAwAAAACAAMAAAAMAAwAAAACAAMAAAAOAAwAAAACAAMAAAASAAwAAAACAAMAAAAUAAwAAAACAAMAAAAWAAwAAAACAAMAAAAYAAwAAAACAAMAAAAaAAwAAAACAAMAAAAcABAAAAACAAMAAAAaABAAAAACAAMAAAAYABAAAAACAAMAAAAWABAAAAACAAMAAAAUABAAAAACAAMAAAASABAAAAACAAMAAAAOABAAAAACAAMAAAAMABAAAAACAAMAAAAKABAAAAACAAMAAAAIABAAAAACAAMAAAAGABAAAAACAAMAAAAEABAAAAACAAMAAAACABAAAAACAAMAAAAAABAAAAACAAMAAAAeAAYAAAACAAMAAAAeAAgAAAACAAMAAAAeAAoAAAACAAMAAAAeAAwAAAACAAMAAAAeAA4AAAACAAMAAAAeABAAAAACAAMAAAAQABAAAAACAAMAAAAQAA4AAAACAAMAAAAQAAwAAAACAAMAAAAAABIAAAACAAMAAAACABIAAAACAAMAAAAEABIAAAACAAMAAAAGABIAAAACAAMAAAAIABIAAAACAAMAAAAKABIAAAACAAMAAAAMABIAAAACAAMAAAAOABIAAAACAAMAAAAQABIAAAACAAMAAAASABIAAAACAAMAAAAUABIAAAACAAMAAAAWABIAAAACAAMAAAAYABIAAAACAAMAAAAaABIAAAACAAMAAAAcABIAAAACAAMAAAAeABIAAAACAAMAAAAeABQAAAACAAMAAAAcABQAAAACAAMAAAAaABQAAAACAAMAAAAYABQAAAACAAMAAAAWABQAAAACAAMAAAAUABQAAAACAAMAAAASABQAAAACAAMAAAAQABQAAAACAAMAAAAOABQAAAACAAMAAAAMABQAAAACAAMAAAAKABQAAAACAAMAAAAIABQAAAACAAMAAAAGABQAAAACAAMAAAAEABQAAAACAAMAAAACABQAAAACAAMAAAAAABQAAAACAAMAAAAAABYAAAACAAMAAAACABYAAAACAAMAAAAEABYAAAACAAMAAAAGABYAAAACAAMAAAAIABYAAAACAAMAAAAKABYAAAACAAMAAAAMABYAAAACAAMAAAAOABYAAAACAAMAAAAQABYAAAACAAMAAAASABYAAAACAAMAAAAUABYAAAACAAMAAAAWABYAAAACAAMAAAAYABYAAAACAAMAAAAaABYAAAACAAMAAAAcABYAAAACAAMAAAAeABYAAAACAAMAAAAeABgAAAACAAMAAAAcABgAAAACAAMAAAAaABgAAAACAAMAAAAYABgAAAACAAMAAAAWABgAAAACAAMAAAAUABgAAAACAAMAAAASABgAAAACAAMAAAAQABgAAAACAAMAAAAOABgAAAACAAMAAAAMABgAAAACAAMAAAAKABgAAAACAAMAAAAIABgAAAACAAMAAAAEABgAAAACAAMAAAAGABgAAAACAAMAAAACABgAAAACAAMAAAAAABgAAAACAAMAAAAAABoAAAACAAMAAAACABoAAAACAAMAAAAEABoAAAACAAMAAAAGABoAAAACAAMAAAAIABoAAAACAAMAAAAKABoAAAACAAMAAAAMABoAAAACAAMAAAAOABoAAAACAAMAAAAQABoAAAACAAMAAAASABoAAAACAAMAAAAUABoAAAACAAMAAAAWABoAAAACAAMAAAAYABoAAAACAAMAAAAaABoAAAACAAMAAAAcABoAAAACAAMAAAAeABoAAAACAAMAAAAeABwAAAACAAMAAAAcABwAAAACAAMAAAAaABwAAAACAAMAAAAYABwAAAACAAMAAAAWABwAAAACAAMAAAAUABwAAAACAAMAAAASABwAAAACAAMAAAAQABwAAAACAAMAAAAOABwAAAACAAMAAAAMABwAAAACAAMAAAAKABwAAAACAAMAAAAIABwAAAACAAMAAAAGABwAAAACAAMAAAAEABwAAAACAAMAAAACABwAAAACAAMAAAAAABwAAAACAAMAAAAAAB4AAAACAAMAAAACAB4AAAACAAMAAAAEAB4AAAACAAMAAAAGAB4AAAACAAMAAAAIAB4AAAACAAMAAAAKAB4AAAACAAMAAAAMAB4AAAACAAMAAAAOAB4AAAACAAMAAAAQAB4AAAACAAMAAAASAB4AAAACAAMAAAAUAB4AAAACAAMAAAAWAB4AAAACAAMAAAAYAB4AAAACAAMAAAAaAB4AAAACAAMAAAAcAB4AAAACAAMAAAAeAB4AAAACAAMAAAAeACAAAAACAAMAAAAcACAAAAACAAMAAAAaACAAAAACAAMAAAAYACAAAAACAAMAAAAWACAAAAACAAMAAAAUACAAAAACAAMAAAASACAAAAACAAMAAAAQACAAAAACAAMAAAAOACAAAAACAAMAAAAMACAAAAACAAMAAAAKACAAAAACAAMAAAAIACAAAAACAAMAAAAGACAAAAACAAMAAAAEACAAAAACAAMAAAACACAAAAACAAMAAAAAACAAAAACAAMAAAAAACIAAAACAAMAAAACACIAAAACAAMAAAAEACIAAAACAAMAAAAGACIAAAACAAMAAAAIACIAAAACAAMAAAAKACIAAAACAAMAAAAMACIAAAACAAMAAAAOACIAAAACAAMAAAAQACIAAAACAAMAAAASACIAAAACAAMAAAAUACIAAAACAAMAAAAWACIAAAACAAMAAAAYACIAAAACAAMAAAAaACIAAAACAAMAAAAcACIAAAACAAMAAAAeACIAAAACAAMAAAAeACQAAAACAAMAAAAcACQAAAACAAMAAAAaACQAAAACAAMAAAAYACQAAAACAAMAAAAWACQAAAACAAMAAAAUACQAAAACAAMAAAASACQAAAACAAMAAAAQACQAAAACAAMAAAAOACQAAAACAAMAAAAMACQAAAACAAMAAAAKACQAAAACAAMAAAAIACQAAAACAAMAAAAGACQAAAACAAMAAAAEACQAAAACAAMAAAACACQAAAACAAMAAAAAACQAAAACAAMAAAAAACYAAAABAAEAAAAeACgAAAADAAEAAAAAACgAAAAEAAEAAAAAAAQAAAAAAAIAAAAeAAQAAAAAAAIAAAACAAQAAAAAAAIAAAAEAAQAAAAAAAIAAAAGAAQAAAAAAAIAAAACAAIAAAAAAAIAAAAEAAIAAAAAAAIAAAAGAAIAAAAAAAIAAAAIAAQAAAAAAAIAAAAIAAIAAAAAAAIAAAAKAAIAAAAAAAIAAAAKAAQAAAAAAAIAAAAMAAQAAAAAAAIAAAAMAAIAAAAAAAIAAAAOAAIAAAAAAAIAAAAOAAQAAAAAAAIAAAAQAAQAAAAAAAIAAAAQAAIAAAAAAAIAAAASAAIAAAAAAAIAAAASAAQAAAAAAAIAAAAUAAQAAAAAAAIAAAAUAAIAAAAAAAIAAAAWAAIAAAAAAAIAAAAWAAQAAAAAAAIAAAAYAAQAAAAAAAIAAAAYAAIAAAAAAAIAAAAaAAIAAAAAAAIAAAAaAAQAAAAAAAIAAAAcAAIAAAAAAAIAAAAcAAQAAAAAAAIAAAA=") +tile_map_data = PackedByteArray("AAAeAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAeACYAAAABAAEAAAAAAAYAAAACAAMAAAAAAAgAAAACAAMAAAAAAAoAAAACAAMAAAAAAAwAAAACAAMAAAAcAAYAAAACAAMAAAAcAAgAAAACAAMAAAAcAAoAAAACAAMAAAAcAAwAAAACAAMAAAAcAA4AAAACAAMAAAAaAA4AAAACAAMAAAAYAA4AAAACAAMAAAAWAA4AAAACAAMAAAAUAA4AAAACAAMAAAASAA4AAAACAAMAAAAOAA4AAAACAAMAAAAMAA4AAAACAAMAAAAKAA4AAAACAAMAAAAIAA4AAAACAAMAAAAGAA4AAAACAAMAAAAEAA4AAAACAAMAAAACAA4AAAACAAMAAAAAAA4AAAACAAMAAAACAAYAAAACAAMAAAAEAAYAAAACAAMAAAAGAAYAAAACAAMAAAAIAAYAAAACAAMAAAAKAAYAAAACAAMAAAAMAAYAAAACAAMAAAAOAAYAAAACAAMAAAAQAAYAAAACAAMAAAASAAYAAAACAAMAAAAUAAYAAAACAAMAAAAWAAYAAAACAAMAAAAYAAYAAAACAAMAAAAaAAYAAAACAAMAAAACAAgAAAACAAMAAAAEAAgAAAACAAMAAAAGAAgAAAACAAMAAAAIAAgAAAACAAMAAAAKAAgAAAACAAMAAAAMAAgAAAACAAMAAAAOAAgAAAACAAMAAAAQAAgAAAACAAMAAAASAAgAAAACAAMAAAAUAAgAAAACAAMAAAAWAAgAAAACAAMAAAAYAAgAAAACAAMAAAAaAAgAAAACAAMAAAAaAAoAAAACAAMAAAAYAAoAAAACAAMAAAAWAAoAAAACAAMAAAAUAAoAAAACAAMAAAASAAoAAAACAAMAAAAQAAoAAAACAAMAAAAOAAoAAAACAAMAAAAMAAoAAAACAAMAAAAKAAoAAAACAAMAAAAIAAoAAAACAAMAAAAGAAoAAAACAAMAAAAEAAoAAAACAAMAAAACAAoAAAACAAMAAAACAAwAAAACAAMAAAAEAAwAAAACAAMAAAAGAAwAAAACAAMAAAAIAAwAAAACAAMAAAAKAAwAAAACAAMAAAAMAAwAAAACAAMAAAAOAAwAAAACAAMAAAASAAwAAAACAAMAAAAUAAwAAAACAAMAAAAWAAwAAAACAAMAAAAYAAwAAAACAAMAAAAaAAwAAAACAAMAAAAcABAAAAACAAMAAAAaABAAAAACAAMAAAAYABAAAAACAAMAAAAWABAAAAACAAMAAAAUABAAAAACAAMAAAASABAAAAACAAMAAAAOABAAAAACAAMAAAAMABAAAAACAAMAAAAKABAAAAACAAMAAAAIABAAAAACAAMAAAAGABAAAAACAAMAAAAEABAAAAACAAMAAAACABAAAAACAAMAAAAAABAAAAACAAMAAAAeAAYAAAACAAMAAAAeAAgAAAACAAMAAAAeAAoAAAACAAMAAAAeAAwAAAACAAMAAAAeAA4AAAACAAMAAAAeABAAAAACAAMAAAAQABAAAAACAAMAAAAQAA4AAAACAAMAAAAQAAwAAAACAAMAAAAAABIAAAACAAMAAAACABIAAAACAAMAAAAEABIAAAACAAMAAAAGABIAAAACAAMAAAAIABIAAAACAAMAAAAKABIAAAACAAMAAAAMABIAAAACAAMAAAAOABIAAAACAAMAAAAQABIAAAACAAMAAAASABIAAAACAAMAAAAUABIAAAACAAMAAAAWABIAAAACAAMAAAAYABIAAAACAAMAAAAaABIAAAACAAMAAAAcABIAAAACAAMAAAAeABIAAAACAAMAAAAeABQAAAACAAMAAAAcABQAAAACAAMAAAAaABQAAAACAAMAAAAYABQAAAACAAMAAAAWABQAAAACAAMAAAAUABQAAAACAAMAAAASABQAAAACAAMAAAAQABQAAAACAAMAAAAOABQAAAACAAMAAAAMABQAAAACAAMAAAAKABQAAAACAAMAAAAIABQAAAACAAMAAAAGABQAAAACAAMAAAAEABQAAAACAAMAAAACABQAAAACAAMAAAAAABQAAAACAAMAAAAAABYAAAACAAMAAAACABYAAAACAAMAAAAEABYAAAACAAMAAAAGABYAAAACAAMAAAAIABYAAAACAAMAAAAKABYAAAACAAMAAAAMABYAAAACAAMAAAAOABYAAAACAAMAAAAQABYAAAACAAMAAAASABYAAAACAAMAAAAUABYAAAACAAMAAAAWABYAAAACAAMAAAAYABYAAAACAAMAAAAaABYAAAACAAMAAAAcABYAAAACAAMAAAAeABYAAAACAAMAAAAeABgAAAACAAMAAAAcABgAAAACAAMAAAAaABgAAAACAAMAAAAYABgAAAACAAMAAAAWABgAAAACAAMAAAAUABgAAAACAAMAAAASABgAAAACAAMAAAAQABgAAAACAAMAAAAOABgAAAACAAMAAAAMABgAAAACAAMAAAAKABgAAAACAAMAAAAIABgAAAACAAMAAAAEABgAAAACAAMAAAAGABgAAAACAAMAAAACABgAAAACAAMAAAAAABgAAAACAAMAAAAAABoAAAACAAMAAAACABoAAAACAAMAAAAEABoAAAACAAMAAAAGABoAAAACAAMAAAAIABoAAAACAAMAAAAKABoAAAACAAMAAAAMABoAAAACAAMAAAAOABoAAAACAAMAAAAQABoAAAACAAMAAAASABoAAAACAAMAAAAUABoAAAACAAMAAAAWABoAAAACAAMAAAAYABoAAAACAAMAAAAaABoAAAACAAMAAAAcABoAAAACAAMAAAAeABoAAAACAAMAAAAeABwAAAACAAMAAAAcABwAAAACAAMAAAAaABwAAAACAAMAAAAYABwAAAACAAMAAAAWABwAAAACAAMAAAAUABwAAAACAAMAAAASABwAAAACAAMAAAAQABwAAAACAAMAAAAOABwAAAACAAMAAAAMABwAAAACAAMAAAAKABwAAAACAAMAAAAIABwAAAACAAMAAAAGABwAAAACAAMAAAAEABwAAAACAAMAAAACABwAAAACAAMAAAAAABwAAAACAAMAAAAAAB4AAAACAAMAAAACAB4AAAACAAMAAAAEAB4AAAACAAMAAAAGAB4AAAACAAMAAAAIAB4AAAACAAMAAAAKAB4AAAACAAMAAAAMAB4AAAACAAMAAAAOAB4AAAACAAMAAAAQAB4AAAACAAMAAAASAB4AAAACAAMAAAAUAB4AAAACAAMAAAAWAB4AAAACAAMAAAAYAB4AAAACAAMAAAAaAB4AAAACAAMAAAAcAB4AAAACAAMAAAAeAB4AAAACAAMAAAAeACAAAAACAAMAAAAcACAAAAACAAMAAAAaACAAAAACAAMAAAAYACAAAAACAAMAAAAWACAAAAACAAMAAAAUACAAAAACAAMAAAASACAAAAACAAMAAAAQACAAAAACAAMAAAAOACAAAAACAAMAAAAMACAAAAACAAMAAAAKACAAAAACAAMAAAAIACAAAAACAAMAAAAGACAAAAACAAMAAAAEACAAAAACAAMAAAACACAAAAACAAMAAAAAACAAAAACAAMAAAAAACIAAAACAAMAAAACACIAAAACAAMAAAAEACIAAAACAAMAAAAGACIAAAACAAMAAAAIACIAAAACAAMAAAAKACIAAAACAAMAAAAMACIAAAACAAMAAAAOACIAAAACAAMAAAAQACIAAAACAAMAAAASACIAAAACAAMAAAAUACIAAAACAAMAAAAWACIAAAACAAMAAAAYACIAAAACAAMAAAAaACIAAAACAAMAAAAcACIAAAACAAMAAAAeACIAAAACAAMAAAAeACQAAAACAAMAAAAcACQAAAACAAMAAAAaACQAAAACAAMAAAAYACQAAAACAAMAAAAWACQAAAACAAMAAAAUACQAAAACAAMAAAASACQAAAACAAMAAAAQACQAAAACAAMAAAAOACQAAAACAAMAAAAMACQAAAACAAMAAAAKACQAAAACAAMAAAAIACQAAAACAAMAAAAGACQAAAACAAMAAAAEACQAAAACAAMAAAACACQAAAACAAMAAAAAACQAAAACAAMAAAAAACYAAAABAAEAAAAeACgAAAADAAEAAAAAACgAAAAEAAEAAAAAAAQAAAAAAAIAAAAeAAQAAAAAAAIAAAACAAQAAAAAAAIAAAAEAAQAAAAAAAIAAAAGAAQAAAAAAAIAAAACAAIAAAAAAAIAAAAEAAIAAAAAAAIAAAAGAAIAAAAAAAIAAAAIAAQAAAAAAAIAAAAIAAIAAAAAAAIAAAAKAAIAAAAAAAIAAAAKAAQAAAAAAAIAAAAMAAQAAAAAAAIAAAAMAAIAAAAAAAIAAAAOAAIAAAAAAAIAAAAOAAQAAAAAAAIAAAAQAAQAAAAAAAIAAAAQAAIAAAAAAAIAAAASAAIAAAAAAAIAAAASAAQAAAAAAAIAAAAUAAQAAAAAAAIAAAAUAAIAAAAAAAIAAAAWAAIAAAAAAAIAAAAWAAQAAAAAAAIAAAAYAAQAAAAAAAIAAAAYAAIAAAAAAAIAAAAaAAIAAAAAAAIAAAAaAAQAAAAAAAIAAAAcAAIAAAAAAAIAAAAcAAQAAAAAAAIAAAAQACYAAAACAAMAAAAQACgAAAACAAMAAAA=") tile_set = SubResource("TileSet_jr8qv") [node name="Walls" type="TileMapLayer" parent="Map" unique_id=142135081] @@ -177,11 +179,6 @@ z_index = 2 tile_map_data = PackedByteArray("AAAAAAAAAAACAAAAAAACAAAAAAABAAEAAAAEAAAAAAABAAEAAAAGAAAAAAABAAEAAAAIAAAAAAABAAEAAAAKAAAAAAABAAEAAAAMAAAAAAABAAEAAAAOAAAAAAABAAEAAAAQAAAAAAABAAEAAAASAAAAAAABAAEAAAAUAAAAAAABAAEAAAAWAAAAAAABAAEAAAAYAAAAAAABAAEAAAAaAAAAAAABAAEAAAAcAAAAAAABAAEAAAAeAAAAAAAAAAAAAAAAAAIAAAAEAAAAAAAeAAIAAAADAAAAAAAeAAQAAAADAAAAAAAeAAYAAAADAAAAAAAeAAgAAAADAAAAAAAeAAoAAAADAAAAAAAeAAwAAAADAAAAAAAeAA4AAAADAAAAAAAeABAAAAADAAAAAAAeABIAAAADAAAAAAAeABQAAAADAAAAAAAeABYAAAADAAAAAAAeABgAAAADAAAAAAAeABoAAAADAAAAAAAeABwAAAADAAAAAAAeAB4AAAADAAAAAAAeACAAAAADAAAAAAAeACIAAAADAAAAAAAeACQAAAADAAAAAAAcACYAAAABAAEAAAAaACYAAAABAAEAAAAYACYAAAABAAEAAAAWACYAAAABAAEAAAAUACYAAAABAAEAAAAMACYAAAABAAEAAAAKACYAAAABAAEAAAAAAAQAAAAEAAAAAAAAAAYAAAAEAAAAAAAAAAgAAAAEAAAAAAAAAAoAAAAEAAAAAAAAAAwAAAAEAAAAAAAAAA4AAAAEAAAAAAAAABAAAAAEAAAAAAAAABIAAAAEAAAAAAAAABQAAAAEAAAAAAAAABYAAAAEAAAAAAAAABgAAAAEAAAAAAAAABoAAAAEAAAAAAAAABwAAAAEAAAAAAAAAB4AAAAEAAAAAAAAACAAAAAEAAAAAAAAACIAAAAEAAAAAAAAACQAAAAEAAAAAAAIACYAAAABAAEAAAAGACYAAAABAAEAAAAEACYAAAABAAEAAAACACYAAAABAAEAAAAAACYAAAACAAEAAAAeACcAAAADAAEAAAAeACYAAAADAAEAAAAOACYAAAABAAEAAAASACYAAAABAAEAAAAAACcAAAAEAAEAAAASACgAAAAAAAIAAAAUACgAAAAAAAIAAAAWACgAAAAAAAIAAAAYACgAAAAAAAIAAAAaACgAAAAAAAIAAAAcACgAAAAAAAIAAAAOACgAAAAAAAIAAAAMACgAAAAAAAIAAAAKACgAAAAAAAIAAAAIACgAAAAAAAIAAAAGACgAAAAAAAIAAAAEACgAAAAAAAIAAAACACgAAAAAAAIAAAA=") tile_set = SubResource("TileSet_jr8qv") -[node name="Door" type="TileMapLayer" parent="Map" unique_id=382416981] -z_index = 2 -tile_map_data = PackedByteArray("AAAQACcAAAADAAIAAAAAACYAAAAEAAEAAAAeACYAAAADAAEAAAA=") -tile_set = SubResource("TileSet_jr8qv") - [node name="Windows" type="TileMapLayer" parent="Map" unique_id=836194583] z_index = 5 tile_map_data = PackedByteArray("AAADAAEAAAAAAAQAAAAbAAEAAAAAAAQAAAAHAAEAAAAAAAYAAAAXAAEAAAAAAAYAAAAXAAMAAAAEAAUAAAAXAAUAAAAEAAUAAAAXAAcAAAAEAAUAAAAHAAMAAAAEAAUAAAAHAAUAAAAEAAUAAAAHAAcAAAAEAAUAAAAHAAkAAAAEAAYAAAAXAAkAAAAEAAYAAAADAAMAAAACAAUAAAADAAUAAAACAAUAAAADAAcAAAACAAUAAAAbAAMAAAACAAUAAAAbAAUAAAACAAUAAAAbAAcAAAACAAUAAAAbAAkAAAACAAYAAAADAAkAAAACAAYAAAAPAAEAAAAAAAQAAAAPAAMAAAACAAUAAAAPAAUAAAACAAUAAAAPAAcAAAACAAUAAAAPAAkAAAACAAYAAAA=") @@ -228,4 +225,13 @@ position = Vector2(456, 199) [node name="Player" parent="." unique_id=628518902 instance=ExtResource("2_n70cd")] z_index = 1 -position = Vector2(262, 239) +position = Vector2(248, 103) + +[node name="Door" parent="." unique_id=1014453167 instance=ExtResource("11_squor")] +z_index = 10 +position = Vector2(264, 632) + +[node name="LoadingZone" parent="." unique_id=2123510357 instance=ExtResource("13_2edww")] +z_index = 4096 +position = Vector2(263, 652) +scale = Vector2(2, 1.2) diff --git a/levels/loading_zone.gd b/levels/loading_zone.gd new file mode 100644 index 0000000..228f85c --- /dev/null +++ b/levels/loading_zone.gd @@ -0,0 +1,28 @@ +# loading_zone.gd +extends Area2D + +@export var target_scene: String = "res://levels/atelier/atelier.tscn" +@export var fade_duration: float = 0.6 + +@onready var fade_rect: ColorRect = $TransitionLayer/FadeRect + +var _transitioning := false + +func _ready() -> void: + fade_rect.modulate.a = 0.0 + body_entered.connect(_on_body_entered) + +func _on_body_entered(body: Node2D) -> void: + print("Body entered") + if _transitioning: + return + if body.is_in_group("player"): + _transitioning = true + _start_transition() + +func _start_transition() -> void: + var tween := create_tween() + tween.tween_property(fade_rect, "modulate:a", 1.0, fade_duration) + tween.tween_callback(func(): + get_tree().change_scene_to_file(target_scene) + ) diff --git a/levels/loading_zone.gd.uid b/levels/loading_zone.gd.uid new file mode 100644 index 0000000..c60bd63 --- /dev/null +++ b/levels/loading_zone.gd.uid @@ -0,0 +1 @@ +uid://de0qobntuks5f diff --git a/levels/loading_zone.tscn b/levels/loading_zone.tscn new file mode 100644 index 0000000..f2ef494 --- /dev/null +++ b/levels/loading_zone.tscn @@ -0,0 +1,23 @@ +[gd_scene format=3 uid="uid://b1peufx15gr0v"] + +[ext_resource type="Script" uid="uid://de0qobntuks5f" path="res://levels/loading_zone.gd" id="1_tolmd"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_re8oc"] + +[node name="LoadingZone" type="Area2D" unique_id=2123510357] +collision_layer = 32 +collision_mask = 2 +script = ExtResource("1_tolmd") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=289173289] +shape = SubResource("RectangleShape2D_re8oc") + +[node name="TransitionLayer" type="CanvasLayer" parent="." unique_id=1179968082] + +[node name="FadeRect" type="ColorRect" parent="TransitionLayer" unique_id=820434324] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 1)