Fix tooltip_node wrong references (#332)

* Created a signal room_ready in ESCMain to notify ESCTooltip that it is ready.
Fixes #302

* docs: Automatic update of API docs

Co-authored-by: StraToN <StraToN@users.noreply.github.com>
This commit is contained in:
Julian Murgia
2021-07-29 07:53:44 +02:00
committed by GitHub
parent 387d20ba92
commit 2c8107964c
10 changed files with 201 additions and 48 deletions

View File

@@ -1,46 +1,69 @@
# A tooltip displaying <verb> <item1> [<item2>]
tool tool
extends RichTextLabel extends RichTextLabel
class_name ESCTooltip class_name ESCTooltip
func get_class():
return "ESCTooltip"
# Infinitive verb # Infinitive verb
var current_action: String var current_action: String
# Target item/hotspot # Target item/hotspot
var current_target: String setget set_target var current_target: String setget set_target
# Preposition: on, with... # Preposition: on, with...
var current_prep: String = "with" var current_prep: String = "with"
# Target 2 item/hotspot # Target 2 item/hotspot
var current_target2: String var current_target2: String
# True if tooltip is waiting for a click on second target (use x with y) # True if tooltip is waiting for a click on second target (use x with y)
var waiting_for_target2 = false var waiting_for_target2 = false
# Color of the label
export(Color) var color setget set_color export(Color) var color setget set_color
# Vector2 defining the offset from the cursor
export(Vector2) var offset_from_cursor = Vector2(10,0) export(Vector2) var offset_from_cursor = Vector2(10,0)
# Activates debug mode. If enabled, shows the label with a white background.
export(bool) var debug_mode = false setget set_debug_mode export(bool) var debug_mode = false setget set_debug_mode
# Node containing the debug white background
var debug_texturerect_node: TextureRect var debug_texturerect_node: TextureRect
# Maximum width of the label
const MAX_WIDTH = 200 const MAX_WIDTH = 200
# Minimum height of the label
const MIN_HEIGHT = 30 const MIN_HEIGHT = 30
# Maximum height of the label
const MAX_HEIGHT = 500 const MAX_HEIGHT = 500
# Height of one line in the label
const ONE_LINE_HEIGHT = 16 const ONE_LINE_HEIGHT = 16
# Ready function
func _ready(): func _ready():
if escoria.main.current_scene: escoria.main.connect("room_ready", self, "_on_room_ready")
escoria.main.current_scene.game.tooltip_node = self escoria.action_manager.connect("action_changed", self, "_on_action_selected")
escoria.action_manager.connect("action_changed", self, "on_action_selected")
# Set the color of the label
#
# ## Parameters
# - p_color: the color to set the label
func set_color(p_color: Color): func set_color(p_color: Color):
color = p_color color = p_color
update_tooltip_text() update_tooltip_text()
# Enable/disable debug mode of the label. If enabled, the label is displayed
# with a white background.
#
# ## Parameters
# - p_debug_mode: if true, enable debug mode. False to disable
func set_debug_mode(p_debug_mode: bool): func set_debug_mode(p_debug_mode: bool):
debug_mode = p_debug_mode debug_mode = p_debug_mode
if debug_mode: if debug_mode:
@@ -62,11 +85,17 @@ func set_debug_mode(p_debug_mode: bool):
remove_child(debug_texturerect_node) remove_child(debug_texturerect_node)
func on_action_selected() -> void: # Called when an action is selected in Escoria
func _on_action_selected() -> void:
current_action = escoria.action_manager.current_action current_action = escoria.action_manager.current_action
update_tooltip_text() update_tooltip_text()
# Set the first target of the label.
#
# ## Parameters
# - target: String the target to add to the label
# - needs_second_target: if true, the label will prepare for a second target
func set_target(target: String, needs_second_target: bool = false) -> void: func set_target(target: String, needs_second_target: bool = false) -> void:
current_target = target current_target = target
if needs_second_target: if needs_second_target:
@@ -74,12 +103,16 @@ func set_target(target: String, needs_second_target: bool = false) -> void:
update_tooltip_text() update_tooltip_text()
# Set the second target of the label
#
# ## Parameters
# - target2: String the second target to add to the label
func set_target2(target2: String) -> void: func set_target2(target2: String) -> void:
current_target2 = target2 current_target2 = target2
update_tooltip_text() update_tooltip_text()
# Update the tooltip text.
func update_tooltip_text(): func update_tooltip_text():
""" """
Overriden method. Should not be called directly. Overriden method. Should not be called directly.
@@ -87,7 +120,7 @@ func update_tooltip_text():
pass pass
# Update the tooltip size according to the text.
func update_size(): func update_size():
## RECT_SIZE ## ## RECT_SIZE ##
var rtl_width = rect_size.x var rtl_width = rect_size.x
@@ -132,7 +165,14 @@ func update_size():
# printt("AFTER", "text_height", get_content_height(), "rtl_height", rect_size.y) # printt("AFTER", "text_height", get_content_height(), "rtl_height", rect_size.y)
func _offset(position): # Calculate the offset of the label depending on its position.
#
# ## Parameters
# - position: the position to test
#
# **Return**
# The calculated offset
func _offset(position: Vector2) -> Vector2:
var center_offset_x = rect_size.x / 2 var center_offset_x = rect_size.x / 2
var offset_y = 5 var offset_y = 5
@@ -142,19 +182,56 @@ func _offset(position):
return position return position
# Return the tooltip distance to top edge.
#
# ## Parameters
# - position: the position to test
#
# **Return**
# The distance to the edge.
func tooltip_distance_to_edge_top(position: Vector2): func tooltip_distance_to_edge_top(position: Vector2):
return position.y return position.y
# Return the tooltip distance to bottom edge.
#
# ## Parameters
# - position: the position to test
#
# **Return**
# The distance to the edge.
func tooltip_distance_to_edge_bottom(position: Vector2): func tooltip_distance_to_edge_bottom(position: Vector2):
return escoria.game_size.y - position.y return escoria.game_size.y - position.y
# Return the tooltip distance to left edge.
#
# ## Parameters
# - position: the position to test
#
# **Return**
# The distance to the edge.
func tooltip_distance_to_edge_left(position: Vector2): func tooltip_distance_to_edge_left(position: Vector2):
return position.x return position.x
# Return the tooltip distance to right edge.
#
# ## Parameters
# - position: the position to test
#
# **Return**
# The distance to the edge.
func tooltip_distance_to_edge_right(position: Vector2): func tooltip_distance_to_edge_right(position: Vector2):
return escoria.game_size.x - position.x return escoria.game_size.x - position.x
# Clear the tooltip targets texts
func clear(): func clear():
set_target("") set_target("")
set_target2("") set_target2("")
# Called when the room is loaded to setup the label.
func _on_room_ready():
escoria.main.current_scene.game.tooltip_node = self

View File

@@ -3,6 +3,10 @@ extends Node
# This script is basically the scene-switcher. # This script is basically the scene-switcher.
signal room_ready
# Global id of the last scene the player was before current scene # Global id of the last scene the player was before current scene
var last_scene_global_id: String var last_scene_global_id: String
@@ -47,6 +51,8 @@ func set_scene(p_scene: Node) -> void:
set_camera_limits() set_camera_limits()
emit_signal("room_ready")
# Cleanup the current scene # Cleanup the current scene
func clear_scene() -> void: func clear_scene() -> void:

View File

@@ -1,11 +1,11 @@
[gd_scene load_steps=8 format=2] [gd_scene load_steps=8 format=2]
[ext_resource path="res://game/ui/ui_mouse_icons/inventory/inventory_ui.tscn" type="PackedScene" id=1] [ext_resource path="res://addons/escoria-ui-simplemouse/inventory/inventory_ui.tscn" type="PackedScene" id=1]
[ext_resource path="res://addons/escoria-core/game/scenes/dialogs/dialog_player.tscn" type="PackedScene" id=2] [ext_resource path="res://addons/escoria-core/game/scenes/dialogs/dialog_player.tscn" type="PackedScene" id=2]
[ext_resource path="res://addons/escoria-core/game/scenes/camera_player/camera.tscn" type="PackedScene" id=3] [ext_resource path="res://addons/escoria-core/game/scenes/camera_player/camera.tscn" type="PackedScene" id=3]
[ext_resource path="res://game/ui/ui_mouse_icons/verbs_mouseicons.tscn" type="PackedScene" id=4] [ext_resource path="res://addons/escoria-ui-simplemouse/verbs_mouseicons.tscn" type="PackedScene" id=4]
[ext_resource path="res://game/ui/ui_mouse_icons/game.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-ui-simplemouse/game.gd" type="Script" id=5]
[ext_resource path="res://game/ui/ui_mouse_icons/tooltip/target_tooltip.tscn" type="PackedScene" id=6] [ext_resource path="res://addons/escoria-ui-simplemouse/tooltip/target_tooltip.tscn" type="PackedScene" id=6]
[ext_resource path="res://game/ui/commons/room_select.tscn" type="PackedScene" id=7] [ext_resource path="res://game/ui/commons/room_select.tscn" type="PackedScene" id=7]
[node name="game" type="Node2D"] [node name="game" type="Node2D"]

View File

@@ -1,11 +1,11 @@
[gd_scene load_steps=9 format=2] [gd_scene load_steps=9 format=2]
[ext_resource path="res://addons/escoria-core/game/scenes/inventory/inventory_ui.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/scenes/inventory/inventory_ui.gd" type="Script" id=1]
[ext_resource path="res://game/ui/ui_mouse_icons/images/inventory_bg.png" type="Texture" id=2] [ext_resource path="res://addons/escoria-ui-simplemouse/images/inventory_bg.png" type="Texture" id=2]
[ext_resource path="res://game/ui/ui_mouse_icons/inventory/inventory_ui_container.gd" type="Script" id=3] [ext_resource path="res://addons/escoria-ui-simplemouse/inventory/inventory_ui_container.gd" type="Script" id=3]
[ext_resource path="res://game/ui/ui_mouse_icons/inventory/inventory_showhide.gd" type="Script" id=4] [ext_resource path="res://addons/escoria-ui-simplemouse/inventory/inventory_showhide.gd" type="Script" id=4]
[ext_resource path="res://game/ui/ui_mouse_icons/images/frame.png" type="Texture" id=5] [ext_resource path="res://addons/escoria-ui-simplemouse/images/frame.png" type="Texture" id=5]
[ext_resource path="res://game/ui/ui_mouse_icons/images/inventory_icon.png" type="Texture" id=6] [ext_resource path="res://addons/escoria-ui-simplemouse/images/inventory_icon.png" type="Texture" id=6]
[sub_resource type="Animation" id=1] [sub_resource type="Animation" id=1]
resource_name = "hide" resource_name = "hide"

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=2] [gd_scene load_steps=5 format=2]
[ext_resource path="res://addons/escoria-core/game/assets/fonts/onesize/ONESIZE_.TTF" type="DynamicFontData" id=1] [ext_resource path="res://addons/escoria-core/game/assets/fonts/onesize/ONESIZE_.TTF" type="DynamicFontData" id=1]
[ext_resource path="res://game/ui/ui_mouse_icons/tooltip/tooltip_target.gd" type="Script" id=2] [ext_resource path="res://addons/escoria-ui-simplemouse/tooltip/tooltip_target.gd" type="Script" id=2]
[sub_resource type="DynamicFont" id=1] [sub_resource type="DynamicFont" id=1]
size = 30 size = 30

View File

@@ -1,11 +1,11 @@
[gd_scene load_steps=7 format=2] [gd_scene load_steps=7 format=2]
[ext_resource path="res://game/ui/ui_mouse_icons/verbs_mouseicons.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-ui-simplemouse/verbs_mouseicons.gd" type="Script" id=1]
[ext_resource path="res://game/ui/ui_mouse_icons/cursors/cursor_examine.png" type="Texture" id=2] [ext_resource path="res://addons/escoria-ui-simplemouse/cursors/cursor_examine.png" type="Texture" id=2]
[ext_resource path="res://game/ui/ui_mouse_icons/cursors/cursor_tool.png" type="Texture" id=3] [ext_resource path="res://addons/escoria-ui-simplemouse/cursors/cursor_tool.png" type="Texture" id=3]
[ext_resource path="res://game/ui/ui_mouse_icons/cursors/cursor_pen.png" type="Texture" id=4] [ext_resource path="res://addons/escoria-ui-simplemouse/cursors/cursor_pen.png" type="Texture" id=4]
[ext_resource path="res://game/ui/ui_mouse_icons/cursors/cursor_foot.png" type="Texture" id=5] [ext_resource path="res://addons/escoria-ui-simplemouse/cursors/cursor_foot.png" type="Texture" id=5]
[ext_resource path="res://game/ui/ui_mouse_icons/cursors/cursor_hand.png" type="Texture" id=6] [ext_resource path="res://addons/escoria-ui-simplemouse/cursors/cursor_hand.png" type="Texture" id=6]
[node name="verbs_menu" type="Control"] [node name="verbs_menu" type="Control"]
script = ExtResource( 1 ) script = ExtResource( 1 )
@@ -53,10 +53,10 @@ margin_bottom = 132.0
texture = ExtResource( 4 ) texture = ExtResource( 4 )
[node name="mouse_position" type="Control" parent="."] [node name="mouse_position" type="Control" parent="."]
margin_left = 323.435 margin_left = 546.519
margin_top = 57.9191 margin_top = 524.76
margin_right = 323.435 margin_right = 546.519
margin_bottom = 57.9191 margin_bottom = 524.76
mouse_filter = 2 mouse_filter = 2
[node name="tool" type="TextureRect" parent="mouse_position"] [node name="tool" type="TextureRect" parent="mouse_position"]

View File

@@ -6,6 +6,8 @@
## Description ## Description
A tooltip displaying <verb> <item1> [<item2>]
## Constants Descriptions ## Constants Descriptions
### MAX\_HEIGHT ### MAX\_HEIGHT
@@ -14,24 +16,32 @@
const MAX_HEIGHT: int = 500 const MAX_HEIGHT: int = 500
``` ```
Maximum height of the label
### MAX\_WIDTH ### MAX\_WIDTH
```gdscript ```gdscript
const MAX_WIDTH: int = 200 const MAX_WIDTH: int = 200
``` ```
Maximum width of the label
### MIN\_HEIGHT ### MIN\_HEIGHT
```gdscript ```gdscript
const MIN_HEIGHT: int = 30 const MIN_HEIGHT: int = 30
``` ```
 Minimum height of the label
### ONE\_LINE\_HEIGHT ### ONE\_LINE\_HEIGHT
```gdscript ```gdscript
const ONE_LINE_HEIGHT: int = 16 const ONE_LINE_HEIGHT: int = 16
``` ```
Height of one line in the label
## Property Descriptions ## Property Descriptions
### current\_action ### current\_action
@@ -84,12 +94,16 @@ export var color = "0,0,0,1"
- **Setter**: `set_color` - **Setter**: `set_color`
Color of the label
### offset\_from\_cursor ### offset\_from\_cursor
```gdscript ```gdscript
export var offset_from_cursor = "(10, 0)" export var offset_from_cursor = "(10, 0)"
``` ```
Vector2 defining the offset from the cursor
### debug\_mode ### debug\_mode
```gdscript ```gdscript
@@ -98,37 +112,40 @@ export var debug_mode = false
- **Setter**: `set_debug_mode` - **Setter**: `set_debug_mode`
Activates debug mode. If enabled, shows the label with a white background.
### debug\_texturerect\_node ### debug\_texturerect\_node
```gdscript ```gdscript
var debug_texturerect_node: TextureRect var debug_texturerect_node: TextureRect
``` ```
Node containing the debug white background
## Method Descriptions ## Method Descriptions
### get\_class
```gdscript
func get_class()
```
### set\_color ### set\_color
```gdscript ```gdscript
func set_color(p_color: Color) func set_color(p_color: Color)
``` ```
 Set the color of the label
## Parameters
 - p_color: the color to set the label
### set\_debug\_mode ### set\_debug\_mode
```gdscript ```gdscript
func set_debug_mode(p_debug_mode: bool) func set_debug_mode(p_debug_mode: bool)
``` ```
### on\_action\_selected  Enable/disable debug mode of the label. If enabled, the label is displayed
with a white background.
```gdscript ## Parameters
func on_action_selected() -> void - p_debug_mode: if true, enable debug mode. False to disable
```
### set\_target ### set\_target
@@ -136,51 +153,99 @@ func on_action_selected() -> void
func set_target(target: String, needs_second_target: bool = false) -> void func set_target(target: String, needs_second_target: bool = false) -> void
``` ```
 Set the first target of the label.
## Parameters
- target: String the target to add to the label
- needs_second_target: if true, the label will prepare for a second target
### set\_target2 ### set\_target2
```gdscript ```gdscript
func set_target2(target2: String) -> void func set_target2(target2: String) -> void
``` ```
 Set the second target of the label
## Parameters
- target2: String the second target to add to the label
### update\_tooltip\_text ### update\_tooltip\_text
```gdscript ```gdscript
func update_tooltip_text() func update_tooltip_text()
``` ```
Update the tooltip text.
### update\_size ### update\_size
```gdscript ```gdscript
func update_size() func update_size()
``` ```
Update the tooltip size according to the text.
### tooltip\_distance\_to\_edge\_top ### tooltip\_distance\_to\_edge\_top
```gdscript ```gdscript
func tooltip_distance_to_edge_top(position: Vector2) func tooltip_distance_to_edge_top(position: Vector2)
``` ```
Return the tooltip distance to top edge.
## Parameters
- position: the position to test
**Return**
The distance to the edge.
### tooltip\_distance\_to\_edge\_bottom ### tooltip\_distance\_to\_edge\_bottom
```gdscript ```gdscript
func tooltip_distance_to_edge_bottom(position: Vector2) func tooltip_distance_to_edge_bottom(position: Vector2)
``` ```
Return the tooltip distance to bottom edge.
## Parameters
- position: the position to test
**Return**
The distance to the edge.
### tooltip\_distance\_to\_edge\_left ### tooltip\_distance\_to\_edge\_left
```gdscript ```gdscript
func tooltip_distance_to_edge_left(position: Vector2) func tooltip_distance_to_edge_left(position: Vector2)
``` ```
Return the tooltip distance to left edge.
## Parameters
- position: the position to test
**Return**
The distance to the edge.
### tooltip\_distance\_to\_edge\_right ### tooltip\_distance\_to\_edge\_right
```gdscript ```gdscript
func tooltip_distance_to_edge_right(position: Vector2) func tooltip_distance_to_edge_right(position: Vector2)
``` ```
Return the tooltip distance to right edge.
## Parameters
- position: the position to test
**Return**
The distance to the edge.
### clear ### clear
```gdscript ```gdscript
func clear() func clear()
``` ```
Clear the tooltip targets texts

View File

@@ -107,3 +107,7 @@ func check_game_scene_methods()
Sanity check that the game.tscn scene's root node script MUST Sanity check that the game.tscn scene's root node script MUST
implement the following methods. If they do not exist, stop immediately. implement the following methods. If they do not exist, stop immediately.
Implement them, even if empty Implement them, even if empty
## Signals
- signal room_ready():

View File

@@ -406,6 +406,7 @@ Makes the `player` walk to the position `x`/`y`.
## Dialogs ## Dialogs
Dialogs are specified by writing `?` with optional parameters, followed by a list of dialog options starting with `-`. Use `!` to end the dialog. Dialogs are specified by writing `?` with optional parameters, followed by a list of dialog options starting with `-`. Use `!` to end the dialog.

View File

@@ -588,7 +588,7 @@ main/force_quit=true
debug/terminate_on_warnings=false debug/terminate_on_warnings=false
debug/terminate_on_errors=true debug/terminate_on_errors=true
debug/development_lang="en" debug/development_lang="en"
ui/tooltip_follows_mouse=false ui/tooltip_follows_mouse=true
ui/dialogs_folder="res://game/ui/commons/dialogs" ui/dialogs_folder="res://game/ui/commons/dialogs"
ui/default_dialog_scene="res://game/ui/commons/dialogs/dialog_label.tscn" ui/default_dialog_scene="res://game/ui/commons/dialogs/dialog_label.tscn"
ui/main_menu_scene="res://game/ui/commons/main_menu/main_menu.tscn" ui/main_menu_scene="res://game/ui/commons/main_menu/main_menu.tscn"
@@ -610,13 +610,13 @@ main/savegames_path="res://saves/"
main/settings_path="user://" main/settings_path="user://"
main/escoria_version="" main/escoria_version=""
sound/speech_enabled=1 sound/speech_enabled=1
ui/game_scene="res://addons/escoria-ui-9verbs/game.tscn" ui/game_scene="res://addons/escoria-ui-simplemouse/game.tscn"
[input] [input]
esc_show_debug_prompt={ esc_show_debug_prompt={
"deadzone": 0.5, "deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777245,"unicode":0,"echo":false,"script":null) "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777245,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
] ]
} }
switch_action_verb={ switch_action_verb={