diff --git a/addons/escoria-core/design/esc_exit.svg b/addons/escoria-core/design/esc_exit.svg new file mode 100644 index 00000000..5b1fcf14 --- /dev/null +++ b/addons/escoria-core/design/esc_exit.svg @@ -0,0 +1,24 @@ + + + esc_exit + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/escoria-core/design/icons.sketch b/addons/escoria-core/design/icons.sketch index 7db211c6..348e920a 100644 Binary files a/addons/escoria-core/design/icons.sketch and b/addons/escoria-core/design/icons.sketch differ diff --git a/addons/escoria-core/game/core-scripts/esc_exit.gd b/addons/escoria-core/game/core-scripts/esc_exit.gd new file mode 100644 index 00000000..74faefa8 --- /dev/null +++ b/addons/escoria-core/game/core-scripts/esc_exit.gd @@ -0,0 +1,43 @@ +# An item that streamlines exiting scenes +extends ESCItem +class_name ESCExit, "res://addons/escoria-core/design/esc_exit.svg" + + +# Path to the target scene to change to +export(String, FILE, "*.tscn") var target_scene = "" + +# Sound effect to play when changing the scene +export(String, FILE, "*.ogg,*.mp3,*.wav") var switch_sound = "" + + +func _enter_tree(): + is_exit = true + player_orients_on_arrival = false + + +func _ready(): + call_deferred("_register_event") + + +# Registers the exit_scene event based on the properties +func _register_event(): + if escoria.object_manager.has(self.global_id) and\ + not "exit_scene" in escoria.object_manager.get_object( + self.global_id + ).events: + var exit_scene_event_script = [ + ":exit_scene", + ] + + if switch_sound != "": + exit_scene_event_script.append( + "play_snd %s" % switch_sound + ) + + exit_scene_event_script.append("change_scene %s" % target_scene) + + var exit_scene_event = escoria.esc_compiler.compile( + exit_scene_event_script + ).events["exit_scene"] + escoria.object_manager.get_object(self.global_id)\ + .events["exit_scene"] = exit_scene_event diff --git a/game/rooms/room12/room12.tscn b/game/rooms/room12/room12.tscn index 90c787e5..1847fe7b 100644 --- a/game/rooms/room12/room12.tscn +++ b/game/rooms/room12/room12.tscn @@ -7,7 +7,7 @@ [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_room.gd" type="Script" id=6] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=7] -[ext_resource path="res://game/rooms/room12/r_door.tscn" type="PackedScene" id=8] +[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_exit.gd" type="Script" id=8] [ext_resource path="res://game/items/escitems/button.tscn" type="PackedScene" id=9] [sub_resource type="NavigationPolygon" id=1] @@ -68,24 +68,28 @@ position = Vector2( 37.4521, 392.045 ) script = ExtResource( 5 ) global_id = "r12_l_exit" -[node name="r_door" parent="Hotspots" instance=ExtResource( 8 )] -global_id = "r12_r_exit" -esc_script = "res://game/rooms/room12/esc/right_exit.esc" - -[node name="ESCLocation" type="Position2D" parent="Hotspots/r_door"] -position = Vector2( 1231.78, 360.624 ) -script = ExtResource( 5 ) - [node name="button" parent="Hotspots" instance=ExtResource( 9 )] -pause_mode = 1 position = Vector2( 301.706, 73.0751 ) global_id = "r12_button" esc_script = "res://game/rooms/room12/esc/button.esc" -animations = null [node name="Position2D" type="Position2D" parent="Hotspots/button"] position = Vector2( 340.052, 298.812 ) +[node name="r_door" type="Area2D" parent="Hotspots"] +script = ExtResource( 8 ) +global_id = "r_door" +tooltip_name = "Right exit" +target_scene = "res://game/rooms/room13/room13.tscn" +switch_sound = "res://game/sfx/sounds/doorOpen_2.ogg" + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/r_door"] +polygon = PoolVector2Array( 1174.44, 47.7028, 1179.5, 355.197, 1277.9, 408.014, 1275.73, 91.8372 ) + +[node name="ESCLocation" type="Position2D" parent="Hotspots/r_door"] +position = Vector2( 1224.19, 375.505 ) +script = ExtResource( 5 ) + [node name="player_start" type="Position2D" parent="."] position = Vector2( 542.824, 468.193 ) script = ExtResource( 5 ) diff --git a/game/rooms/room13/room13.tscn b/game/rooms/room13/room13.tscn index 8611d25d..197ab914 100644 --- a/game/rooms/room13/room13.tscn +++ b/game/rooms/room13/room13.tscn @@ -3,10 +3,10 @@ [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://game/rooms/room13/background.tscn" type="PackedScene" id=2] [ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3] +[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_exit.gd" type="Script" id=4] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_room.gd" type="Script" id=6] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=7] -[ext_resource path="res://game/rooms/room13/r_door.tscn" type="PackedScene" id=8] [sub_resource type="NavigationPolygon" id=1] vertices = PoolVector2Array( 1168.92, 640.557, 1182.53, 588.863, 1269.59, 622.872, 1275.03, 799.721, 864.626, 613.518, 1143.08, 613.35, -9.16094, 803.802, 386.666, 618.012, 129.634, 615.792, 84.5821, 654.06, -6.44019, 711.297, 3.15687, 646.051, 59.2201, 628.698 ) @@ -67,15 +67,6 @@ position = Vector2( 37.4521, 392.045 ) script = ExtResource( 5 ) global_id = "r12_l_exit" -[node name="r_door" parent="Hotspots" instance=ExtResource( 8 )] -global_id = "r13_r_exit" -esc_script = "res://game/rooms/room13/esc/right_exit.esc" -default_action = "use" - -[node name="ESCLocation" type="Position2D" parent="Hotspots/r_door"] -position = Vector2( 1231.78, 360.624 ) -script = ExtResource( 5 ) - [node name="Hint" type="Area2D" parent="Hotspots"] pause_mode = 1 script = ExtResource( 7 ) @@ -101,3 +92,14 @@ __meta__ = { [node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/Hint"] position = Vector2( 651.176, 177.775 ) shape = SubResource( 2 ) + +[node name="r_door" type="Area2D" parent="Hotspots"] +position = Vector2( 1161.53, -2.99619 ) +script = ExtResource( 4 ) +target_scene = "res://game/rooms/room14/room14.tscn" + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/r_door"] +polygon = PoolVector2Array( 11.9329, 46.7699, 15.928, 354.381, 118.798, 416.303, 117.799, 90.7143 ) + +[node name="Position2D" type="Position2D" parent="Hotspots/r_door"] +position = Vector2( 60.9229, 371.53 ) diff --git a/project.godot b/project.godot index f91ff660..d14785d9 100644 --- a/project.godot +++ b/project.godot @@ -199,6 +199,11 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://addons/escoria-core/game/core-scripts/esc/types/esc_execution.gd" }, { +"base": "ESCItem", +"class": "ESCExit", +"language": "GDScript", +"path": "res://addons/escoria-core/game/core-scripts/esc_exit.gd" +}, { "base": "Node2D", "class": "ESCGame", "language": "GDScript", @@ -578,6 +583,7 @@ _global_script_class_icons={ "ESCEvent": "", "ESCEventManager": "", "ESCExecution": "", +"ESCExit": "res://addons/escoria-core/design/esc_exit.svg", "ESCGame": "", "ESCGlobalsManager": "", "ESCGroup": "",