From 4f2977ea98bb676ff98a66931184f438d60c52f0 Mon Sep 17 00:00:00 2001 From: Julian Murgia Date: Wed, 3 Feb 2021 22:40:50 +0100 Subject: [PATCH] Added management of overlapped item in room 9. --- .../escoria-core/game/core-scripts/escitem.gd | 6 +- addons/escoria-core/game/inputs_manager.gd | 23 ++--- .../game/scenes/inventory/inventory_ui.gd | 4 + game/items/ESCORIA_ALL_ITEMS.tscn | 12 ++- game/items/escitems/bottle.esc | 8 ++ game/items/escitems/bottle_escitem.tscn | 28 ++++++ .../inventory/bottle_escinventoryitem.tscn | 14 +++ game/rooms/room9/closet/magical_closet.tscn | 32 +++---- game/rooms/room9/item_wall/item_wall.tscn | 85 ------------------- 9 files changed, 89 insertions(+), 123 deletions(-) create mode 100755 game/items/escitems/bottle.esc create mode 100644 game/items/escitems/bottle_escitem.tscn create mode 100644 game/items/inventory/bottle_escinventoryitem.tscn delete mode 100644 game/rooms/room9/item_wall/item_wall.tscn diff --git a/addons/escoria-core/game/core-scripts/escitem.gd b/addons/escoria-core/game/core-scripts/escitem.gd index b36d5042..165ca153 100644 --- a/addons/escoria-core/game/core-scripts/escitem.gd +++ b/addons/escoria-core/game/core-scripts/escitem.gd @@ -173,13 +173,13 @@ func manage_input(viewport : Viewport, event : InputEvent, shape_idx : int): if event.doubleclick: if event.button_index == BUTTON_LEFT: - emit_signal("mouse_double_left_clicked_item", global_id, event) + emit_signal("mouse_double_left_clicked_item", self, event) else: if event.is_pressed(): if event.button_index == BUTTON_LEFT: - emit_signal("mouse_left_clicked_item", global_id, event) + emit_signal("mouse_left_clicked_item", self, event) elif event.button_index == BUTTON_RIGHT: - emit_signal("mouse_right_clicked_item", global_id, event) + emit_signal("mouse_right_clicked_item", self, event) func _on_mouse_entered(): diff --git a/addons/escoria-core/game/inputs_manager.gd b/addons/escoria-core/game/inputs_manager.gd index d6613c55..3015ec84 100644 --- a/addons/escoria-core/game/inputs_manager.gd +++ b/addons/escoria-core/game/inputs_manager.gd @@ -60,7 +60,7 @@ func _on_mouse_entered_item(item : ESCItem) -> void: printt("Item focused : ", item.global_id) if !hover_stack.empty(): - if item.z_index < hover_stack.back().z_index: + if item.z_index > hover_stack.back().z_index: hover_stack.insert(hover_stack.size()-1, item) else: hover_stack.push_back(item) @@ -82,17 +82,18 @@ func _on_mouse_exited_item(item : ESCItem) -> void: escoria.main.current_scene.game.element_focused(hotspot_focused) -func _on_mouse_left_clicked_item(item_global_id : String, event : InputEvent) -> void: - printt("Item left clicked", item_global_id, event) - escoria.main.current_scene.game.left_click_on_item(item_global_id, event) +func _on_mouse_left_clicked_item(item : ESCItem, event : InputEvent) -> void: + if hover_stack.empty() or hover_stack.back() == item: + printt("Item left clicked", item.global_id, event) + escoria.main.current_scene.game.left_click_on_item(item.global_id, event) -func _on_mouse_left_double_clicked_item(item_global_id : String, event : InputEvent) -> void: - printt("Item left double clicked", item_global_id, event) - escoria.main.current_scene.game.left_double_click_on_item(item_global_id, event) - -func _on_mouse_right_clicked_item(item_global_id : String, event : InputEvent) -> void: - printt("Item right clicked", item_global_id, event) - escoria.main.current_scene.game.right_click_on_item(item_global_id, event) +func _on_mouse_left_double_clicked_item(item : ESCItem, event : InputEvent) -> void: + printt("Item left double clicked", item.global_id, event) + escoria.main.current_scene.game.left_double_click_on_item(item.global_id, event) + +func _on_mouse_right_clicked_item(item : ESCItem, event : InputEvent) -> void: + printt("Item right clicked", item.global_id, event) + escoria.main.current_scene.game.right_click_on_item(item.global_id, event) ################################################################################## diff --git a/addons/escoria-core/game/scenes/inventory/inventory_ui.gd b/addons/escoria-core/game/scenes/inventory/inventory_ui.gd index 4138854c..23faed39 100644 --- a/addons/escoria-core/game/scenes/inventory/inventory_ui.gd +++ b/addons/escoria-core/game/scenes/inventory/inventory_ui.gd @@ -49,6 +49,10 @@ func add_new_item_by_id(item_id : String) -> void: escoria.report_errors("inventory_ui.gd:add_new_item_by_id()", ["Item global id '"+ item_id + "' does not exist.", "Check item's id in ESCORIA_ALL_ITEMS scene."]) + if !all_items.get_inventory_item(item_id): + escoria.report_errors("inventory_ui.gd:add_new_item_by_id()", + ["Item global id '"+ item_id + "' doesn't have corresponding inventory item.", + "Check item's id in ESCORIA_ALL_ITEMS scene."]) var item_inventory_button = all_items.get_inventory_item(item_id).duplicate() items_ids_in_inventory[item_id] = item_inventory_button get_node(items_container).add_item(item_inventory_button) diff --git a/game/items/ESCORIA_ALL_ITEMS.tscn b/game/items/ESCORIA_ALL_ITEMS.tscn index 3857b663..fc718f32 100644 --- a/game/items/ESCORIA_ALL_ITEMS.tscn +++ b/game/items/ESCORIA_ALL_ITEMS.tscn @@ -1,29 +1,31 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=7 format=2] [ext_resource path="res://game/items/escitems/empty_sheet_escitem.tscn" type="PackedScene" id=1] [ext_resource path="res://game/items/escitems/pen_escitem.tscn" type="PackedScene" id=2] [ext_resource path="res://game/items/escitems/wrench_escitem.tscn" type="PackedScene" id=3] [ext_resource path="res://game/items/escitems/filled_sheet_escitem.tscn" type="PackedScene" id=4] [ext_resource path="res://addons/escoria-core/game/core-scripts/items_inventory.gd" type="Script" id=5] +[ext_resource path="res://game/items/escitems/bottle_escitem.tscn" type="PackedScene" id=6] [node name="ESCORIA_ALL_ITEMS" type="Node2D"] visible = false script = ExtResource( 5 ) [node name="empty_sheet" parent="." instance=ExtResource( 1 )] +dialog_color = Color( 1, 1, 1, 1 ) interact_positions = { "default": Vector2( 0, 0 ) } [node name="filled_sheet" parent="." instance=ExtResource( 4 )] position = Vector2( -29.7823, 133.569 ) -dialog_color = Color( 1, 1, 1, 1 ) interact_positions = { "default": Vector2( -29.7823, 133.569 ) } [node name="pen" parent="." instance=ExtResource( 2 )] position = Vector2( 136.277, 13.5374 ) +dialog_color = Color( 1, 1, 1, 1 ) interact_positions = { "default": Vector2( 136.277, 13.5374 ) } @@ -33,3 +35,9 @@ position = Vector2( 293.311, 2.70747 ) interact_positions = { "default": Vector2( 293.311, 2.70747 ) } + +[node name="bottle" parent="." instance=ExtResource( 6 )] +position = Vector2( 59.4604, 167.678 ) +interact_positions = { +"default": Vector2( 0, 0 ) +} diff --git a/game/items/escitems/bottle.esc b/game/items/escitems/bottle.esc new file mode 100755 index 00000000..56806142 --- /dev/null +++ b/game/items/escitems/bottle.esc @@ -0,0 +1,8 @@ +:look +say player "It's a bottle." +stop + +:pickup +inventory_add r9_bottle true +set_active r9_bottle false + diff --git a/game/items/escitems/bottle_escitem.tscn b/game/items/escitems/bottle_escitem.tscn new file mode 100644 index 00000000..2bfa1148 --- /dev/null +++ b/game/items/escitems/bottle_escitem.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://addons/escoria-core/game/core-scripts/escitem.gd" type="Script" id=1] +[ext_resource path="res://game/items/textures/genericItem_color_127.png" type="Texture" id=2] +[ext_resource path="res://game/items/inventory/bottle_escinventoryitem.tscn" type="PackedScene" id=3] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 28.3873, 74.7806 ) + +[node name="bottle" type="Area2D"] +z_index = 1 +script = ExtResource( 1 ) +global_id = "r9_bottle" +esc_script = "res://game/items/escitems/bottle.esc" +tooltip_name = "Bottle" +default_action = "pickup" +use_from_inventory_only = true +inventory_item_scene_file = ExtResource( 3 ) +dialog_color = Color( 1, 1, 1, 1 ) +interact_positions = { +"default": Vector2( 59.3937, 58.8658 ) +} + +[node name="Sprite" type="Sprite" parent="."] +texture = ExtResource( 2 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 1 ) diff --git a/game/items/inventory/bottle_escinventoryitem.tscn b/game/items/inventory/bottle_escinventoryitem.tscn new file mode 100644 index 00000000..0fa4d1f0 --- /dev/null +++ b/game/items/inventory/bottle_escinventoryitem.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://game/items/textures/genericItem_color_127.png" type="Texture" id=1] +[ext_resource path="res://addons/escoria-core/game/core-scripts/inventory_item.gd" type="Script" id=2] + +[node name="empty_sheet" type="TextureButton"] +margin_right = 50.0 +margin_bottom = 140.0 +texture_normal = ExtResource( 1 ) +script = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} +global_id = "r9_bottle" diff --git a/game/rooms/room9/closet/magical_closet.tscn b/game/rooms/room9/closet/magical_closet.tscn index 6447476b..eb2bf1f2 100644 --- a/game/rooms/room9/closet/magical_closet.tscn +++ b/game/rooms/room9/closet/magical_closet.tscn @@ -1,9 +1,7 @@ [gd_scene load_steps=7 format=2] [ext_resource path="res://addons/escoria-core/game/core-scripts/escitem.gd" type="Script" id=1] - -[sub_resource type="RectangleShape2D" id=1] -extents = Vector2( 20.13, 26.023 ) +[ext_resource path="res://game/items/escitems/bottle_escitem.tscn" type="PackedScene" id=2] [sub_resource type="RectangleShape2D" id=2] extents = Vector2( 66.4415, 154.457 ) @@ -47,7 +45,7 @@ tracks/2/keys = { "values": [ false ] } tracks/3/type = "value" -tracks/3/path = NodePath("statue:visible") +tracks/3/path = NodePath("bottle:visible") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/imported = false @@ -98,7 +96,7 @@ tracks/2/keys = { "values": [ false ] } tracks/3/type = "value" -tracks/3/path = NodePath("statue:visible") +tracks/3/path = NodePath("bottle:visible") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/imported = false @@ -149,7 +147,7 @@ tracks/2/keys = { "values": [ true ] } tracks/3/type = "value" -tracks/3/path = NodePath("statue:visible") +tracks/3/path = NodePath("bottle:visible") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/imported = false @@ -221,26 +219,16 @@ default_color = Color( 0.4, 0.501961, 1, 1 ) color = Color( 0.4, 0.501961, 1, 1 ) polygon = PoolVector2Array( 1.07718, 7.2891, -37.6216, 23.335, -37.6216, 328.206, 2.02106, 302.722 ) -[node name="statue" type="Area2D" parent="."] +[node name="bottle" parent="." instance=ExtResource( 2 )] visible = false -position = Vector2( 1.12247, 0 ) -z_index = 1 -script = ExtResource( 1 ) -global_id = "statue" -tooltip_name = "Statue" -dialog_color = Color( 1, 1, 1, 1 ) +position = Vector2( 51.1535, 45.7845 ) +scale = Vector2( 0.507, 0.507 ) interact_positions = { -"default": Vector2( 59.3937, 58.8658 ) +"default": Vector2( 51.1535, 45.7845 ) } -[node name="object" type="Polygon2D" parent="statue"] -position = Vector2( 1.18921, 7.13524 ) -color = Color( 0.662745, 0.529412, 0, 1 ) -polygon = PoolVector2Array( 52.338, 36.2829, 57.6774, 26.2716, 62.3493, 36.9503, 70.3583, 35.6154, 70.692, 27.2727, 76.3651, 26.6053, 76.3651, 29.9424, 72.9964, 30.7421, 72.9964, 39.2744, 61.4878, 45.624, 69.2264, 73.602, 43.4311, 73.4035, 53.7492, 45.4256, 41.4468, 39.8697, 41.6453, 31.139, 37.8752, 30.3453, 37.6768, 26.5752, 44.4232, 27.7657, 44.4232, 34.1154 ) - -[node name="CollisionShape2D" type="CollisionShape2D" parent="statue"] -position = Vector2( 58.2712, 58.8658 ) -shape = SubResource( 1 ) +[node name="Position2D" type="Position2D" parent="bottle"] +position = Vector2( 298.463, 596.926 ) [node name="CollisionPolygon2D" type="CollisionShape2D" parent="."] position = Vector2( 64.2172, 153.408 ) diff --git a/game/rooms/room9/item_wall/item_wall.tscn b/game/rooms/room9/item_wall/item_wall.tscn deleted file mode 100644 index 4b0a2de9..00000000 --- a/game/rooms/room9/item_wall/item_wall.tscn +++ /dev/null @@ -1,85 +0,0 @@ -[gd_scene load_steps=4 format=2] - -[ext_resource path="res://addons/escoria-core/game/core-scripts/escitem.gd" type="Script" id=1] - -[sub_resource type="Animation" id=1] -resource_name = "state_round" -tracks/0/type = "value" -tracks/0/path = NodePath("square:visible") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ false ] -} -tracks/1/type = "value" -tracks/1/path = NodePath("round:visible") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ true ] -} - -[sub_resource type="Animation" id=2] -resource_name = "state_square" -tracks/0/type = "value" -tracks/0/path = NodePath("square:visible") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ true ] -} -tracks/1/type = "value" -tracks/1/path = NodePath("round:visible") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ false ] -} - -[node name="item_wall" type="Area2D"] -script = ExtResource( 1 ) -dialog_color = Color( 1, 1, 1, 1 ) -interact_positions = { -"default": Vector2( 0, 0 ) -} - -[node name="square" type="Line2D" parent="."] -points = PoolVector2Array( 531, 527.828, 532, 483.828, 532.586, 445.745, 533.262, 401.771, 534, 353.828, 575.992, 355.093, 617.954, 356.357, 660.945, 357.652, 700, 358.828, 700.786, 402.832, 701.536, 444.836, 702.286, 486.841, 703, 526.828, 659.007, 526.574, 619.997, 526.348, 574.998, 526.088, 530, 525.828 ) -__meta__ = { -"_editor_description_": "" -} - -[node name="round" type="Line2D" parent="."] -visible = false -points = PoolVector2Array( 559.845, 508.706, 537.622, 482.513, 532.586, 445.745, 537.622, 414.255, 551.908, 384.095, 578.101, 366.633, 617.954, 356.357, 659.058, 363.458, 677.313, 375.364, 692.393, 399.175, 701.918, 441.241, 694.774, 484.101, 677.313, 504.737, 652.708, 518.23, 622.548, 526.167, 586.038, 518.23, 558.258, 506.324 ) -__meta__ = { -"_editor_description_": "" -} - -[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."] -position = Vector2( 0, 265.2 ) -polygon = PoolVector2Array( 528, 85, 529, 264, 708, 263, 706, 85 ) - -[node name="animation" type="AnimationPlayer" parent="."] -anims/state_round = SubResource( 1 ) -anims/state_square = SubResource( 2 )