From 4acb971d540926d9e839fd0cfa3c4f43603eb812 Mon Sep 17 00:00:00 2001 From: Julian Murgia Date: Tue, 2 Mar 2021 07:39:00 +0100 Subject: [PATCH] Added a default action used when item is in inventory. --- .../escoria-core/game/core-scripts/escitem.gd | 11 +- .../game/core-scripts/inventory_item.gd | 1 - addons/escoria-core/game/escoria.gd | 6 +- game/characters/mark/mark.tscn | 140 +++++++++--------- game/items/escitems/bottle_escitem.tscn | 1 + game/ui/ui_9verbs/game.gd | 10 +- project.godot | 1 + 7 files changed, 95 insertions(+), 75 deletions(-) diff --git a/addons/escoria-core/game/core-scripts/escitem.gd b/addons/escoria-core/game/core-scripts/escitem.gd index d5114205..57ba41f2 100644 --- a/addons/escoria-core/game/core-scripts/escitem.gd +++ b/addons/escoria-core/game/core-scripts/escitem.gd @@ -39,7 +39,12 @@ export(bool) var player_orients_on_arrival = true export(ESCPlayer.Directions) var interaction_direction export(String) var tooltip_name + +# Default action to use if object is not in the inventory export(String) var default_action +# Default action to use if object is in the inventory +export(String) var default_action_inventory + # If action used by player is in the list, game will wait for a second click on another item # to combine objects together (typical USE WITH , GIVE TO ) export(PoolStringArray) var combine_if_action_used_among = [] @@ -98,7 +103,6 @@ var last_dir : int func _ready(): - # Adds movable behavior Movable = Node.new() Movable.set_script(MovableScript) @@ -137,6 +141,11 @@ func _ready(): connect("area_exited", self, "element_exited") connect("body_entered", self, "element_entered") connect("body_exited", self, "element_exited") + + # If object can be in the inventory, set default_action_inventory to same as + # default_action, if default_action_inventory is not set + if use_from_inventory_only and default_action_inventory.empty(): + default_action_inventory = default_action # Perform a first terrain scaling if we have to. if !is_exit or dont_apply_terrain_scaling: diff --git a/addons/escoria-core/game/core-scripts/inventory_item.gd b/addons/escoria-core/game/core-scripts/inventory_item.gd index b1790578..db2e75f9 100644 --- a/addons/escoria-core/game/core-scripts/inventory_item.gd +++ b/addons/escoria-core/game/core-scripts/inventory_item.gd @@ -5,7 +5,6 @@ func get_class(): return "ESCInventoryItem" export(String) var global_id -#export(String, FILE, "*.esc") var esc_script signal mouse_left_inventory_item(item_id) signal mouse_right_inventory_item(item_id) diff --git a/addons/escoria-core/game/escoria.gd b/addons/escoria-core/game/escoria.gd index 14e97225..e77a80b5 100644 --- a/addons/escoria-core/game/escoria.gd +++ b/addons/escoria-core/game/escoria.gd @@ -184,12 +184,14 @@ func ev_left_click_on_item(obj, event, default_action = false): esc_runner.current_tool = obj else: if default_action: - esc_runner.current_action = obj.default_action + if esc_runner.inventory_has(obj.global_id): + esc_runner.current_action = obj.default_action_inventory + else: + esc_runner.current_action = obj.default_action elif esc_runner.current_action in obj.combine_if_action_used_among: esc_runner.current_tool = obj - var action = "walk" # Don't interact after player movement towards object (because object is inactive for example) var dont_interact = false var destination_position : Vector2 = main.current_scene.player.global_position diff --git a/game/characters/mark/mark.tscn b/game/characters/mark/mark.tscn index 4eb3bb0d..3a610818 100644 --- a/game/characters/mark/mark.tscn +++ b/game/characters/mark/mark.tscn @@ -10,58 +10,58 @@ [sub_resource type="AtlasTexture" id=1] atlas = ExtResource( 4 ) -region = Rect2( 120, 0, 24, 70 ) +region = Rect2( 216, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=2] atlas = ExtResource( 4 ) -region = Rect2( 72, 0, 24, 70 ) +region = Rect2( 240, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=3] -atlas = ExtResource( 5 ) -region = Rect2( 0, 0, 24, 70 ) +atlas = ExtResource( 4 ) +region = Rect2( 264, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=4] -atlas = ExtResource( 5 ) -region = Rect2( 24, 0, 24, 70 ) +atlas = ExtResource( 4 ) +region = Rect2( 288, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=5] -atlas = ExtResource( 5 ) -region = Rect2( 48, 0, 24, 70 ) +atlas = ExtResource( 4 ) +region = Rect2( 312, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=6] atlas = ExtResource( 4 ) -region = Rect2( 48, 0, 24, 70 ) +region = Rect2( 72, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=7] -atlas = ExtResource( 4 ) -region = Rect2( 24, 0, 24, 70 ) - -[sub_resource type="AtlasTexture" id=8] -atlas = ExtResource( 2 ) +atlas = ExtResource( 5 ) region = Rect2( 0, 0, 24, 70 ) -[sub_resource type="AtlasTexture" id=9] -atlas = ExtResource( 2 ) +[sub_resource type="AtlasTexture" id=8] +atlas = ExtResource( 5 ) region = Rect2( 24, 0, 24, 70 ) -[sub_resource type="AtlasTexture" id=10] -atlas = ExtResource( 2 ) +[sub_resource type="AtlasTexture" id=9] +atlas = ExtResource( 5 ) region = Rect2( 48, 0, 24, 70 ) +[sub_resource type="AtlasTexture" id=10] +atlas = ExtResource( 7 ) +region = Rect2( 0, 0, 24, 70 ) + [sub_resource type="AtlasTexture" id=11] -atlas = ExtResource( 4 ) -region = Rect2( 144, 0, 24, 70 ) +atlas = ExtResource( 7 ) +region = Rect2( 24, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=12] -atlas = ExtResource( 4 ) -region = Rect2( 168, 0, 24, 70 ) +atlas = ExtResource( 7 ) +region = Rect2( 48, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=13] -atlas = ExtResource( 4 ) -region = Rect2( 192, 0, 24, 70 ) +atlas = ExtResource( 7 ) +region = Rect2( 72, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=14] -atlas = ExtResource( 4 ) +atlas = ExtResource( 7 ) region = Rect2( 96, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=15] @@ -89,85 +89,65 @@ atlas = ExtResource( 6 ) region = Rect2( 24, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=21] -atlas = ExtResource( 7 ) -region = Rect2( 0, 0, 24, 70 ) +atlas = ExtResource( 4 ) +region = Rect2( 48, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=22] -atlas = ExtResource( 7 ) +atlas = ExtResource( 4 ) region = Rect2( 24, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=23] -atlas = ExtResource( 7 ) -region = Rect2( 48, 0, 24, 70 ) +atlas = ExtResource( 2 ) +region = Rect2( 0, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=24] -atlas = ExtResource( 7 ) -region = Rect2( 72, 0, 24, 70 ) +atlas = ExtResource( 2 ) +region = Rect2( 24, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=25] -atlas = ExtResource( 7 ) -region = Rect2( 96, 0, 24, 70 ) +atlas = ExtResource( 2 ) +region = Rect2( 48, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=26] atlas = ExtResource( 4 ) -region = Rect2( 216, 0, 24, 70 ) +region = Rect2( 144, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=27] atlas = ExtResource( 4 ) -region = Rect2( 240, 0, 24, 70 ) +region = Rect2( 168, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=28] atlas = ExtResource( 4 ) -region = Rect2( 264, 0, 24, 70 ) +region = Rect2( 192, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=29] atlas = ExtResource( 4 ) -region = Rect2( 288, 0, 24, 70 ) +region = Rect2( 96, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=30] atlas = ExtResource( 4 ) -region = Rect2( 312, 0, 24, 70 ) +region = Rect2( 120, 0, 24, 70 ) [sub_resource type="SpriteFrames" id=31] animations = [ { -"frames": [ SubResource( 1 ) ], +"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ) ], "loop": true, -"name": "idle_down_left", -"speed": 5.0 -}, { -"frames": [ SubResource( 2 ) ], -"loop": true, -"name": "idle_up", -"speed": 5.0 -}, { -"frames": [ SubResource( 3 ), SubResource( 4 ), SubResource( 5 ) ], -"loop": true, -"name": "speak_down_right", +"name": "walk_right", "speed": 6.0 }, { "frames": [ SubResource( 6 ) ], "loop": true, -"name": "idle_right", +"name": "idle_up", "speed": 5.0 }, { -"frames": [ SubResource( 7 ) ], +"frames": [ SubResource( 7 ), SubResource( 8 ), SubResource( 9 ) ], "loop": true, -"name": "idle_down_right", -"speed": 5.0 -}, { -"frames": [ SubResource( 8 ), SubResource( 9 ), SubResource( 10 ), SubResource( 9 ), SubResource( 10 ) ], -"loop": true, -"name": "speak_down", +"name": "speak_down_right", "speed": 6.0 }, { -"frames": [ SubResource( 11 ), SubResource( 12 ), SubResource( 13 ) ], +"frames": [ SubResource( 10 ), SubResource( 11 ), SubResource( 12 ), SubResource( 13 ), SubResource( 14 ) ], "loop": true, -"name": "walk_down", -"speed": 6.0 -}, { -"frames": [ SubResource( 14 ) ], -"loop": true, -"name": "idle_left", +"name": "speak_right", "speed": 5.0 }, { "frames": [ SubResource( 15 ) ], @@ -185,15 +165,35 @@ animations = [ { "name": "speak_up", "speed": 3.0 }, { -"frames": [ SubResource( 21 ), SubResource( 22 ), SubResource( 23 ), SubResource( 24 ), SubResource( 25 ) ], +"frames": [ SubResource( 21 ) ], "loop": true, -"name": "speak_right", +"name": "idle_right", "speed": 5.0 }, { -"frames": [ SubResource( 26 ), SubResource( 27 ), SubResource( 28 ), SubResource( 29 ), SubResource( 30 ) ], +"frames": [ SubResource( 22 ) ], "loop": true, -"name": "walk_right", +"name": "idle_down_right", +"speed": 5.0 +}, { +"frames": [ SubResource( 23 ), SubResource( 24 ), SubResource( 25 ), SubResource( 24 ), SubResource( 25 ) ], +"loop": true, +"name": "speak_down", "speed": 6.0 +}, { +"frames": [ SubResource( 26 ), SubResource( 27 ), SubResource( 28 ) ], +"loop": true, +"name": "walk_down", +"speed": 6.0 +}, { +"frames": [ SubResource( 29 ) ], +"loop": true, +"name": "idle_left", +"speed": 5.0 +}, { +"frames": [ SubResource( 30 ) ], +"loop": true, +"name": "idle_down_left", +"speed": 5.0 } ] [sub_resource type="CapsuleShape2D" id=32] diff --git a/game/items/escitems/bottle_escitem.tscn b/game/items/escitems/bottle_escitem.tscn index fb3131c5..658f8261 100644 --- a/game/items/escitems/bottle_escitem.tscn +++ b/game/items/escitems/bottle_escitem.tscn @@ -14,6 +14,7 @@ global_id = "r9_bottle" esc_script = "res://game/items/escitems/bottle.esc" tooltip_name = "Bottle" default_action = "pickup" +default_action_inventory = "look" combine_if_action_used_among = PoolStringArray( "use" ) use_from_inventory_only = true inventory_item_scene_file = ExtResource( 3 ) diff --git a/game/ui/ui_9verbs/game.gd b/game/ui/ui_9verbs/game.gd index f0933bc9..3e184006 100644 --- a/game/ui/ui_9verbs/game.gd +++ b/game/ui/ui_9verbs/game.gd @@ -99,16 +99,24 @@ func left_click_on_inventory_item(inventory_item_global_id : String, event : Inp func right_click_on_inventory_item(inventory_item_global_id : String, event : InputEvent) -> void: + escoria.esc_runner.set_current_action($ui/verbs_layer/verbs_menu.selected_action) escoria.do("item_right_click", [inventory_item_global_id, event]) func left_double_click_on_inventory_item(inventory_item_global_id : String, event : InputEvent) -> void: pass func inventory_item_focused(inventory_item_global_id : String) -> void: - $ui/tooltip_layer/tooltip.set_target(escoria.esc_runner.get_object(inventory_item_global_id).tooltip_name) + var target_obj = escoria.esc_runner.get_object(inventory_item_global_id) + $ui/tooltip_layer/tooltip.set_target(target_obj.tooltip_name) + + if escoria.esc_runner.current_action != "use" && escoria.esc_runner.current_tool == null: + if target_obj is ESCItem: + $ui/verbs_layer/verbs_menu.set_by_name(target_obj.default_action_inventory) + func inventory_item_unfocused() -> void: $ui/tooltip_layer/tooltip.set_target("") + $ui/verbs_layer/verbs_menu.unselect_actions() func open_inventory(): diff --git a/project.godot b/project.godot index b4b1bfe6..95fe1b2f 100644 --- a/project.godot +++ b/project.godot @@ -130,6 +130,7 @@ ui/default_dialog_scene="res://game/ui/commons/dialogs/dialog_label.tscn" ui/main_menu_scene="res://game/ui/commons/main_menu.tscn" ui/game_scene="res://game/ui/ui_9verbs/game.tscn" internals/save_data="" +ui/tooltip_follows_mouse=false [input]