fix: Fixes for when the player scene isn't used in a room. (#404)
Co-authored-by: Dennis Ploeger <develop@dieploegers.de>
This commit is contained in:
@@ -105,112 +105,111 @@ func perform_inputevent_on_object(
|
|||||||
# (because object is inactive for example)
|
# (because object is inactive for example)
|
||||||
var dont_interact = false
|
var dont_interact = false
|
||||||
|
|
||||||
var destination_position: Vector2 = escoria.main.current_scene.player.\
|
if escoria.main.current_scene.player:
|
||||||
global_position
|
var destination_position: Vector2 = escoria.main.current_scene.player.\
|
||||||
|
global_position
|
||||||
# If clicked object not in inventory, player walks towards it
|
|
||||||
if not obj.node is ESCPlayer and \
|
# If clicked object not in inventory, player walks towards it
|
||||||
not escoria.inventory_manager.inventory_has(obj.global_id) and \
|
if not obj.node is ESCPlayer and \
|
||||||
(not has_current_action or not event_flags & ESCEvent.FLAG_TK):
|
not escoria.inventory_manager.inventory_has(obj.global_id) and \
|
||||||
var context = _walk_towards_object(
|
(not has_current_action or not event_flags & ESCEvent.FLAG_TK):
|
||||||
obj,
|
var context = _walk_towards_object(
|
||||||
event.position,
|
|
||||||
event.doubleclick
|
|
||||||
)
|
|
||||||
if context is GDScriptFunctionState:
|
|
||||||
context = yield(_walk_towards_object(
|
|
||||||
obj,
|
obj,
|
||||||
event.position,
|
event.position,
|
||||||
event.doubleclick
|
event.doubleclick
|
||||||
), "completed")
|
)
|
||||||
destination_position = context.target_position
|
if context is GDScriptFunctionState:
|
||||||
dont_interact = context.dont_interact_on_arrival
|
context = yield(_walk_towards_object(
|
||||||
|
obj,
|
||||||
|
event.position,
|
||||||
|
event.doubleclick
|
||||||
|
), "completed")
|
||||||
|
destination_position = context.target_position
|
||||||
|
dont_interact = context.dont_interact_on_arrival
|
||||||
|
|
||||||
|
var player_global_pos = escoria.main.current_scene.player.global_position
|
||||||
|
var clicked_position = event.position
|
||||||
|
|
||||||
|
if not player_global_pos == destination_position:
|
||||||
|
dont_interact = true
|
||||||
|
|
||||||
# If no interaction should happen after player has arrived, leave
|
# If no interaction should happen after player has arrived, leave
|
||||||
# immediately.
|
# immediately.
|
||||||
if dont_interact:
|
if dont_interact:
|
||||||
return
|
return
|
||||||
|
|
||||||
var player_global_pos = escoria.main.current_scene.player.global_position
|
# If NO_TT flag is active, hide tooltip and connect for
|
||||||
var clicked_position = event.position
|
# event finished to show it back
|
||||||
|
if event_flags & ESCEvent.FLAG_NO_TT \
|
||||||
|
and not escoria.event_manager.is_connected(
|
||||||
|
"event_finished",
|
||||||
|
self,
|
||||||
|
"_on_no_tooltip_event_finished"
|
||||||
|
):
|
||||||
|
escoria.main.current_scene.game.tooltip_node.hide()
|
||||||
|
escoria.event_manager.connect(
|
||||||
|
"event_finished",
|
||||||
|
self,
|
||||||
|
"_on_no_tooltip_event_finished"
|
||||||
|
)
|
||||||
|
|
||||||
# If player has arrived at the position he was supposed to reach
|
if event_flags & ESCEvent.FLAG_NO_HUD and \
|
||||||
# so he can interact
|
not escoria.event_manager.is_connected(
|
||||||
if player_global_pos == destination_position:
|
"event_finished",
|
||||||
|
self,
|
||||||
# If NO_TT flag is active, hide tooltip and connect for
|
"_on_no_hud_event_finished"
|
||||||
# event finished to show it back
|
):
|
||||||
if event_flags & ESCEvent.FLAG_NO_TT \
|
escoria.main.current_scene.game.hide_ui()
|
||||||
and not escoria.event_manager.is_connected(
|
escoria.event_manager.connect(
|
||||||
"event_finished",
|
"event_finished",
|
||||||
self,
|
self,
|
||||||
"_on_no_tooltip_event_finished"
|
"_on_no_hud_event_finished"
|
||||||
):
|
)
|
||||||
escoria.main.current_scene.game.tooltip_node.hide()
|
|
||||||
escoria.event_manager.connect(
|
if event_flags & ESCEvent.FLAG_NO_SAVE and \
|
||||||
"event_finished",
|
not escoria.event_manager.is_connected(
|
||||||
self,
|
"event_finished",
|
||||||
"_on_no_tooltip_event_finished"
|
self,
|
||||||
|
"_on_no_save_event_finished"
|
||||||
|
):
|
||||||
|
escoria.save_manager.save_enabled = false
|
||||||
|
escoria.event_manager.connect(
|
||||||
|
"event_finished",
|
||||||
|
self,
|
||||||
|
"_on_no_save_event_finished"
|
||||||
|
)
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Manage exits
|
||||||
|
if obj.node.is_exit and escoria.action_manager.current_action \
|
||||||
|
in ["", "walk"]:
|
||||||
|
escoria.action_manager.activate("exit_scene", obj)
|
||||||
|
else:
|
||||||
|
# Manage movements towards object before activating it
|
||||||
|
if escoria.action_manager.current_action in ["", "walk"] and \
|
||||||
|
not escoria.inventory_manager.inventory_has(obj.global_id):
|
||||||
|
escoria.action_manager.activate("arrived", obj)
|
||||||
|
# Manage action on object
|
||||||
|
elif not escoria.action_manager.current_action in ["", "walk"]:
|
||||||
|
# Check if clicked item awaits a combination
|
||||||
|
var need_combine = _check_item_needs_combine(
|
||||||
|
obj,
|
||||||
|
default_action
|
||||||
)
|
)
|
||||||
|
|
||||||
if event_flags & ESCEvent.FLAG_NO_HUD and \
|
# If apply_interact, perform combine between items
|
||||||
not escoria.event_manager.is_connected(
|
if need_combine:
|
||||||
"event_finished",
|
escoria.action_manager.activate(
|
||||||
self,
|
escoria.action_manager.current_action,
|
||||||
"_on_no_hud_event_finished"
|
escoria.action_manager.current_tool,
|
||||||
):
|
obj
|
||||||
escoria.main.current_scene.game.hide_ui()
|
)
|
||||||
escoria.event_manager.connect(
|
|
||||||
"event_finished",
|
else:
|
||||||
self,
|
escoria.action_manager.activate(
|
||||||
"_on_no_hud_event_finished"
|
escoria.action_manager.current_action,
|
||||||
)
|
obj
|
||||||
|
|
||||||
if event_flags & ESCEvent.FLAG_NO_SAVE and \
|
|
||||||
not escoria.event_manager.is_connected(
|
|
||||||
"event_finished",
|
|
||||||
self,
|
|
||||||
"_on_no_save_event_finished"
|
|
||||||
):
|
|
||||||
escoria.save_manager.save_enabled = false
|
|
||||||
escoria.event_manager.connect(
|
|
||||||
"event_finished",
|
|
||||||
self,
|
|
||||||
"_on_no_save_event_finished"
|
|
||||||
)
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
# Manage exits
|
|
||||||
if obj.node.is_exit and escoria.action_manager.current_action \
|
|
||||||
in ["", "walk"]:
|
|
||||||
escoria.action_manager.activate("exit_scene", obj)
|
|
||||||
else:
|
|
||||||
# Manage movements towards object before activating it
|
|
||||||
if escoria.action_manager.current_action in ["", "walk"] and \
|
|
||||||
not escoria.inventory_manager.inventory_has(obj.global_id):
|
|
||||||
escoria.action_manager.activate("arrived", obj)
|
|
||||||
# Manage action on object
|
|
||||||
elif not escoria.action_manager.current_action in ["", "walk"]:
|
|
||||||
# Check if clicked item awaits a combination
|
|
||||||
var need_combine = _check_item_needs_combine(
|
|
||||||
obj,
|
|
||||||
default_action
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# If apply_interact, perform combine between items
|
|
||||||
if need_combine:
|
|
||||||
escoria.action_manager.activate(
|
|
||||||
escoria.action_manager.current_action,
|
|
||||||
escoria.action_manager.current_tool,
|
|
||||||
obj
|
|
||||||
)
|
|
||||||
|
|
||||||
else:
|
|
||||||
escoria.action_manager.activate(
|
|
||||||
escoria.action_manager.current_action,
|
|
||||||
obj
|
|
||||||
)
|
|
||||||
|
|
||||||
# Checks if object requires a combination with another, according to
|
# Checks if object requires a combination with another, according to
|
||||||
# currently selected action verb (or check with default action of the item).
|
# currently selected action verb (or check with default action of the item).
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
:exit_scene
|
:exit_scene
|
||||||
#set_sound_state bg_sound res://game/sfx/sounds/doorOpen_2.ogg false
|
set_sound_state _sound res://game/sfx/sounds/doorOpen_2.ogg false
|
||||||
#change_scene "res://game/rooms/room13/room13.tscn"
|
change_scene "res://game/rooms/room13/room13.tscn"
|
||||||
|
|||||||
@@ -19,3 +19,5 @@
|
|||||||
:ready
|
:ready
|
||||||
|
|
||||||
transition fade_white in
|
transition fade_white in
|
||||||
|
wait 2
|
||||||
|
transition fade_white out
|
||||||
|
|||||||
30
game/rooms/room13/background.tscn
Normal file
30
game/rooms/room13/background.tscn
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
[gd_scene load_steps=2 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=1]
|
||||||
|
|
||||||
|
[node name="background" type="TextureRect"]
|
||||||
|
margin_right = 1289.0
|
||||||
|
margin_bottom = 555.0
|
||||||
|
mouse_filter = 2
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="l_platform" type="Line2D" parent="."]
|
||||||
|
position = Vector2( 2, -266 )
|
||||||
|
points = PoolVector2Array( -2.96298, 712.01, 129.973, 614.429, 1167.5, 612.894, 1274.59, 669.705, 1273.25, 812.694, 2.36697, 811.043, 2.36697, 713.389 )
|
||||||
|
|
||||||
|
[node name="l_door" type="Line2D" parent="."]
|
||||||
|
position = Vector2( 0, -266 )
|
||||||
|
points = PoolVector2Array( 6.61201, 704.409, 6.61203, 389.558, 87.755, 339.775, 87.5463, 649.784 )
|
||||||
|
__meta__ = {
|
||||||
|
"_editor_description_": ""
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="r_door" type="Line2D" parent="."]
|
||||||
|
position = Vector2( 0, -267.828 )
|
||||||
|
points = PoolVector2Array( 1175.07, 620.086, 1171.24, 311.267, 1274.8, 356.87, 1278.31, 672.412, 1188.64, 624.843 )
|
||||||
|
__meta__ = {
|
||||||
|
"_editor_description_": ""
|
||||||
|
}
|
||||||
2
game/rooms/room13/esc/hint.esc
Normal file
2
game/rooms/room13/esc/hint.esc
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
:look
|
||||||
|
say player "I can just click the exits apparently."
|
||||||
5
game/rooms/room13/esc/left_exit.esc
Normal file
5
game/rooms/room13/esc/left_exit.esc
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
:use
|
||||||
|
set_sound_state _sound res://game/sfx/sounds/doorOpen_2.ogg false
|
||||||
|
change_scene "res://game/rooms/room12/room12.tscn"
|
||||||
|
|
||||||
|
|
||||||
3
game/rooms/room13/esc/right_exit.esc
Normal file
3
game/rooms/room13/esc/right_exit.esc
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
:exit_scene
|
||||||
|
#set_sound_state _sound res://game/sfx/sounds/doorOpen_2.ogg false
|
||||||
|
#change_scene "res://game/rooms/room14/room14.tscn"
|
||||||
5
game/rooms/room13/esc/room13.esc
Normal file
5
game/rooms/room13/esc/room13.esc
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
:setup
|
||||||
|
|
||||||
|
|
||||||
|
:ready
|
||||||
25
game/rooms/room13/r_door.tscn
Normal file
25
game/rooms/room13/r_door.tscn
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=1]
|
||||||
|
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=2]
|
||||||
|
|
||||||
|
[node name="r_door" type="Area2D"]
|
||||||
|
pause_mode = 1
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
__meta__ = {
|
||||||
|
"_editor_description_": ""
|
||||||
|
}
|
||||||
|
global_id = "r1_r_exit"
|
||||||
|
esc_script = "res://game/rooms/room01/esc/right_exit.esc"
|
||||||
|
is_exit = true
|
||||||
|
tooltip_name = "Exit"
|
||||||
|
default_action = "walk"
|
||||||
|
dialog_color = Color( 1, 1, 1, 1 )
|
||||||
|
animations = null
|
||||||
|
|
||||||
|
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
|
||||||
|
polygon = PoolVector2Array( 1177.94, 348.61, 1175.95, 45.3759, 1276.06, 92.0953, 1277.95, 399.407 )
|
||||||
|
|
||||||
|
[node name="Position2D" type="Position2D" parent="."]
|
||||||
|
position = Vector2( 1225.47, 353.99 )
|
||||||
|
script = ExtResource( 2 )
|
||||||
109
game/rooms/room13/room13.tscn
Normal file
109
game/rooms/room13/room13.tscn
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
[gd_scene load_steps=11 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
|
||||||
|
[ext_resource path="res://game/rooms/room12/background.tscn" type="PackedScene" id=2]
|
||||||
|
[ext_resource path="res://game/ui/commons/fonts/caslonantique.tres" type="DynamicFont" id=3]
|
||||||
|
[ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" 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/room12/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 )
|
||||||
|
polygons = [ PoolIntArray( 0, 1, 2, 3 ), PoolIntArray( 4, 5, 0, 3, 6, 7 ), PoolIntArray( 8, 7, 6, 9 ), PoolIntArray( 9, 6, 10, 11, 12 ) ]
|
||||||
|
outlines = [ PoolVector2Array( -6.44019, 711.297, 3.15687, 646.051, 59.2201, 628.698, 84.5821, 654.06, 129.634, 615.792, 386.666, 618.012, 864.626, 613.518, 1143.08, 613.35, 1168.92, 640.557, 1182.53, 588.863, 1269.59, 622.872, 1275.03, 799.721, -9.16094, 803.802 ) ]
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id=2]
|
||||||
|
extents = Vector2( 289.582, 45.1143 )
|
||||||
|
|
||||||
|
[node name="room13" type="Node2D"]
|
||||||
|
script = ExtResource( 6 )
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_vertical_guides_": [ ]
|
||||||
|
}
|
||||||
|
global_id = "room13"
|
||||||
|
esc_script = "res://game/rooms/room13/esc/room13.esc"
|
||||||
|
camera_limits = [ Rect2( 0, 0, 1289, 555 ) ]
|
||||||
|
|
||||||
|
[node name="background" parent="." instance=ExtResource( 2 )]
|
||||||
|
|
||||||
|
[node name="room_label" type="Label" parent="background"]
|
||||||
|
margin_right = 92.0
|
||||||
|
margin_bottom = 21.0
|
||||||
|
custom_fonts/font = ExtResource( 3 )
|
||||||
|
text = "ROOM 12
|
||||||
|
"
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="walkable_area" type="Navigation2D" parent="."]
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
|
[node name="platform" type="NavigationPolygonInstance" parent="walkable_area"]
|
||||||
|
position = Vector2( 6.73163, -264.779 )
|
||||||
|
navpoly = SubResource( 1 )
|
||||||
|
__meta__ = {
|
||||||
|
"_editor_description_": ""
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Hotspots" type="Node" parent="."]
|
||||||
|
|
||||||
|
[node name="l_door" type="Area2D" parent="Hotspots"]
|
||||||
|
pause_mode = 1
|
||||||
|
script = ExtResource( 7 )
|
||||||
|
global_id = "r13_l_exit"
|
||||||
|
esc_script = "res://game/rooms/room13/esc/left_exit.esc"
|
||||||
|
is_exit = true
|
||||||
|
tooltip_name = "Left exit"
|
||||||
|
default_action = "use"
|
||||||
|
dialog_color = Color( 1, 1, 1, 1 )
|
||||||
|
animations = null
|
||||||
|
|
||||||
|
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/l_door"]
|
||||||
|
polygon = PoolVector2Array( 0.328762, 440.897, 1.85199, 119.926, 85.9517, 74.6212, 87.1409, 377.869 )
|
||||||
|
|
||||||
|
[node name="Position2D" type="Position2D" parent="Hotspots/l_door"]
|
||||||
|
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/room12/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 )
|
||||||
|
global_id = "r13_hint"
|
||||||
|
esc_script = "res://game/rooms/room13/esc/hint.esc"
|
||||||
|
tooltip_name = "A hint"
|
||||||
|
default_action = "look"
|
||||||
|
dialog_color = Color( 1, 1, 1, 1 )
|
||||||
|
animations = null
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="Hotspots/Hint"]
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
margin_right = 1278.0
|
||||||
|
margin_bottom = 355.0
|
||||||
|
text = "Click on either doors to go on."
|
||||||
|
align = 1
|
||||||
|
valign = 1
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/Hint"]
|
||||||
|
position = Vector2( 651.176, 177.775 )
|
||||||
|
shape = SubResource( 2 )
|
||||||
|
|
||||||
|
[node name="mark" parent="." instance=ExtResource( 4 )]
|
||||||
|
visible = false
|
||||||
|
position = Vector2( 620.216, 504.362 )
|
||||||
18
game/rooms/room13/walkable_area.tscn
Normal file
18
game/rooms/room13/walkable_area.tscn
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1]
|
||||||
|
|
||||||
|
[sub_resource type="NavigationPolygon" id=1]
|
||||||
|
vertices = PoolVector2Array( 1168.92, 640.557, 1182.53, 588.863, 1269.59, 622.872, 1275.03, 799.721, 129.634, 615.792, 1143.08, 613.35, -9.16094, 803.802, 84.5821, 654.06, -6.44019, 711.297, 3.15687, 646.051, 59.2201, 628.698 )
|
||||||
|
polygons = [ PoolIntArray( 0, 1, 2, 3 ), PoolIntArray( 4, 5, 0, 3, 6, 7 ), PoolIntArray( 7, 6, 8, 9, 10 ) ]
|
||||||
|
outlines = [ PoolVector2Array( -6.44019, 711.297, 3.15687, 646.051, 59.2201, 628.698, 84.5821, 654.06, 129.634, 615.792, 1143.08, 613.35, 1168.92, 640.557, 1182.53, 588.863, 1269.59, 622.872, 1275.03, 799.721, -9.16094, 803.802 ) ]
|
||||||
|
|
||||||
|
[node name="walkable_area" type="Navigation2D"]
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
|
[node name="platform" type="NavigationPolygonInstance" parent="."]
|
||||||
|
position = Vector2( 6.73163, -264.779 )
|
||||||
|
navpoly = SubResource( 1 )
|
||||||
|
__meta__ = {
|
||||||
|
"_editor_description_": ""
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user