614 lines
20 KiB
Diff
614 lines
20 KiB
Diff
diff --git a/addons/escoria-core/game/esc_inputs_manager.gd b/addons/escoria-core/game/esc_inputs_manager.gd
|
|
index c24588eb..b4b8a85d 100644
|
|
--- a/addons/escoria-core/game/esc_inputs_manager.gd
|
|
+++ b/addons/escoria-core/game/esc_inputs_manager.gd
|
|
@@ -3,6 +3,9 @@
|
|
extends Resource
|
|
class_name ESCInputsManager
|
|
|
|
+## Emitted when input mode changes.
|
|
+signal input_mode_changed(new_mode)
|
|
+
|
|
## Valid input flags.[br]
|
|
## INPUT_ALL: All input is allowed.[br]
|
|
## INPUT_NONE: No input is allowed at all.[br]
|
|
@@ -22,7 +25,12 @@ const ESC_SHOW_DEBUG_PROMPT = "esc_show_debug_prompt"
|
|
const ESC_UI_PRIMARY_ACTION = "esc_ui_primary_action"
|
|
|
|
## The current input mode.
|
|
-var input_mode = INPUT_ALL
|
|
+var input_mode = INPUT_ALL:
|
|
+ get:
|
|
+ return input_mode
|
|
+ set(new_mode):
|
|
+ input_mode = new_mode
|
|
+ input_mode_changed.emit(new_mode)
|
|
|
|
## A LIFO stack of hovered items.
|
|
var hover_stack: HoverStack
|
|
@@ -46,12 +54,14 @@ var custom_input_handler = null
|
|
## The currently hovered element. Usually the one on top of the hover stack.
|
|
var _hovered_element = null
|
|
|
|
+
|
|
## Constructor.
|
|
func _init():
|
|
escoria.event_manager.connect("event_finished", Callable(self, "_on_event_finished"))
|
|
hover_stack = HoverStack.new()
|
|
hover_stack.connect("hover_stack_changed", Callable(self, "_on_hover_stack_changed"))
|
|
|
|
+
|
|
## Called when an event is finished, so that the current hotspot is reset.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -62,10 +72,12 @@ func _on_event_finished(return_code: int, event_name: String):
|
|
if _hovered_element == null:
|
|
hotspot_focused = ""
|
|
|
|
+
|
|
## Register core signals (from escoria.gd).
|
|
func register_core():
|
|
escoria.game_scene.request_pause_menu.connect(_on_pause_menu_requested)
|
|
|
|
+
|
|
## Connect the item signals to the local methods.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -78,6 +90,7 @@ func register_inventory_item(item: Node):
|
|
item.inventory_item_focused.connect(_on_mouse_entered_inventory_item)
|
|
item.inventory_item_unfocused.connect(_on_mouse_exited_inventory_item)
|
|
|
|
+
|
|
## Connect background signals to local methods.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -103,7 +116,7 @@ func register_background(background: ESCBackground):
|
|
## - is_default_state: Whether the current state is escoria.GAME_STATE.DEFAULT[br]
|
|
## - returns whether the function processed the event[br]
|
|
##[br]
|
|
-## `callback` is responsible for calling `get_tree().set_input_as_handled()`,
|
|
+## `callback` is responsible for calling `get_tree().set_input_as_handled()`,
|
|
## if appropriate.[br]
|
|
##[br]
|
|
## #### Parameters[br]
|
|
@@ -111,6 +124,7 @@ func register_background(background: ESCBackground):
|
|
func register_custom_input_handler(callback) -> void:
|
|
custom_input_handler = callback
|
|
|
|
+
|
|
## If a callback was specified via register_custom_input_handler(),[br]
|
|
## forwards the event to the callback and returns its result; otherwise,[br]
|
|
## returns false.[br]
|
|
@@ -127,6 +141,7 @@ func try_custom_input_handler(event: InputEvent, is_default_state: bool) -> bool
|
|
else:
|
|
return false
|
|
|
|
+
|
|
## Callback called by hover stack content change.
|
|
func _on_hover_stack_changed():
|
|
if hover_stack.is_empty():
|
|
@@ -134,6 +149,7 @@ func _on_hover_stack_changed():
|
|
else:
|
|
set_hovered_node(hover_stack.get_top_item())
|
|
|
|
+
|
|
## Sets the hovered node and calls its mouse_entered() method if it was the top[br]
|
|
## most item in hover_stack.[br]
|
|
## [br]
|
|
@@ -143,17 +159,20 @@ func _on_hover_stack_changed():
|
|
## [br]
|
|
## *Returns* True if item is the new top hovered object.[br]
|
|
func set_hovered_node(item: ESCItem) -> bool:
|
|
- if _hovered_element != item \
|
|
- and escoria.action_manager.is_object_actionable(item.global_id) \
|
|
- or (item is ESCPlayer and not (item as ESCPlayer).selectable):
|
|
+ if (
|
|
+ _hovered_element != item and escoria.action_manager.is_object_actionable(item.global_id)
|
|
+ or (item is ESCPlayer and not (item as ESCPlayer).selectable)
|
|
+ ):
|
|
_hovered_element = item
|
|
_hovered_element.mouse_entered()
|
|
return true
|
|
# If tested item was already hovered
|
|
# or is not actionable (not selectable for ESCPlayer) then do nothing
|
|
- if _hovered_element == item \
|
|
- or not escoria.action_manager.is_object_actionable(item.global_id) \
|
|
- or (item is ESCPlayer and not (item as ESCPlayer).selectable):
|
|
+ if (
|
|
+ _hovered_element == item
|
|
+ or not escoria.action_manager.is_object_actionable(item.global_id)
|
|
+ or (item is ESCPlayer and not (item as ESCPlayer).selectable)
|
|
+ ):
|
|
return true
|
|
if not is_instance_valid(_hovered_element) or hover_stack.get_top_item() != item:
|
|
_hovered_element = item
|
|
@@ -163,6 +182,7 @@ func set_hovered_node(item: ESCItem) -> bool:
|
|
else:
|
|
return false
|
|
|
|
+
|
|
## Unsets the hovered node.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -176,10 +196,12 @@ func unset_hovered_node(item: ESCItem):
|
|
_hovered_element = null
|
|
hotspot_focused = ""
|
|
|
|
+
|
|
## Background was hovered.
|
|
func _on_hover_bg() -> void:
|
|
escoria.main.current_scene.game.hovered_bg()
|
|
|
|
+
|
|
## The background was clicked with the LMB.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -188,12 +210,10 @@ func _on_hover_bg() -> void:
|
|
func _on_left_click_on_bg(position: Vector2) -> void:
|
|
if input_mode == INPUT_ALL:
|
|
hotspot_focused = ""
|
|
- escoria.logger.info(
|
|
- self,
|
|
- "Left click on background at %s." % str(position)
|
|
- )
|
|
+ escoria.logger.info(self, "Left click on background at %s." % str(position))
|
|
escoria.main.current_scene.game.left_click_on_bg(position)
|
|
|
|
+
|
|
## The background was double-clicked with the LMB.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -202,12 +222,10 @@ func _on_left_click_on_bg(position: Vector2) -> void:
|
|
func _on_double_left_click_on_bg(position: Vector2) -> void:
|
|
if input_mode == INPUT_ALL:
|
|
hotspot_focused = ""
|
|
- escoria.logger.info(
|
|
- self,
|
|
- "Double left click on background at %s." % str(position)
|
|
- )
|
|
+ escoria.logger.info(self, "Double left click on background at %s." % str(position))
|
|
escoria.main.current_scene.game.left_double_click_on_bg(position)
|
|
|
|
+
|
|
## The background was clicked with the RMB.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -215,12 +233,10 @@ func _on_double_left_click_on_bg(position: Vector2) -> void:
|
|
## - position: Position of the click.
|
|
func _on_right_click_on_bg(position: Vector2) -> void:
|
|
if input_mode == INPUT_ALL and hotspot_focused.is_empty():
|
|
- escoria.logger.info(
|
|
- self,
|
|
- "Right click on background at %s." % str(position)
|
|
- )
|
|
+ escoria.logger.info(self, "Right click on background at %s." % str(position))
|
|
escoria.main.current_scene.game.right_click_on_bg(position)
|
|
|
|
+
|
|
## An inventory item was clicked with the LMB.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -228,17 +244,11 @@ func _on_right_click_on_bg(position: Vector2) -> void:
|
|
## - inventory_item_global_id: The global id of the clicked inventory item.[br]
|
|
## - event: The input event received.
|
|
func _on_mouse_left_click_inventory_item(
|
|
- inventory_item_global_id: String,
|
|
- event: InputEvent
|
|
+ inventory_item_global_id: String, event: InputEvent
|
|
) -> void:
|
|
- escoria.logger.info(
|
|
- self,
|
|
- "Inventory item %s left clicked." % inventory_item_global_id
|
|
- )
|
|
- escoria.main.current_scene.game.left_click_on_inventory_item(
|
|
- inventory_item_global_id,
|
|
- event
|
|
- )
|
|
+ escoria.logger.info(self, "Inventory item %s left clicked." % inventory_item_global_id)
|
|
+ escoria.main.current_scene.game.left_click_on_inventory_item(inventory_item_global_id, event)
|
|
+
|
|
|
|
## An inventory item was clicked with the RMB.[br]
|
|
## [br]
|
|
@@ -247,19 +257,15 @@ func _on_mouse_left_click_inventory_item(
|
|
## - inventory_item_global_id: The global id of the clicked inventory item.[br]
|
|
## - event: The input event received.
|
|
func _on_mouse_right_click_inventory_item(
|
|
- inventory_item_global_id: String,
|
|
- event: InputEvent
|
|
+ inventory_item_global_id: String, event: InputEvent
|
|
) -> void:
|
|
if input_mode == INPUT_ALL:
|
|
- escoria.logger.info(
|
|
- self,
|
|
- "Inventory item %s right clicked." % inventory_item_global_id
|
|
- )
|
|
+ escoria.logger.info(self, "Inventory item %s right clicked." % inventory_item_global_id)
|
|
escoria.main.current_scene.game.right_click_on_inventory_item(
|
|
- inventory_item_global_id,
|
|
- event
|
|
+ inventory_item_global_id, event
|
|
)
|
|
|
|
+
|
|
## An inventory item was double-clicked with the LMB.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -267,41 +273,33 @@ func _on_mouse_right_click_inventory_item(
|
|
## - inventory_item_global_id: The global id of the clicked inventory item.[br]
|
|
## - event: The input event received.
|
|
func _on_mouse_double_left_click_inventory_item(
|
|
- inventory_item_global_id: String,
|
|
- event: InputEvent
|
|
+ inventory_item_global_id: String, event: InputEvent
|
|
) -> void:
|
|
if input_mode == INPUT_ALL:
|
|
escoria.logger.info(
|
|
- self,
|
|
- "Inventory item %s double left clicked." % inventory_item_global_id
|
|
+ self, "Inventory item %s double left clicked." % inventory_item_global_id
|
|
)
|
|
escoria.main.current_scene.game.left_double_click_on_inventory_item(
|
|
- inventory_item_global_id,
|
|
- event
|
|
+ inventory_item_global_id, event
|
|
)
|
|
|
|
+
|
|
## The mouse entered an inventory item.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
## [br]
|
|
## - inventory_item_global_id: The global id of the inventory item that is hovered.
|
|
func _on_mouse_entered_inventory_item(inventory_item_global_id: String) -> void:
|
|
- escoria.logger.info(
|
|
- self,
|
|
- "Inventory item %s focused." % inventory_item_global_id
|
|
- )
|
|
- escoria.main.current_scene.game.inventory_item_focused(
|
|
- inventory_item_global_id
|
|
- )
|
|
+ escoria.logger.info(self, "Inventory item %s focused." % inventory_item_global_id)
|
|
+ escoria.main.current_scene.game.inventory_item_focused(inventory_item_global_id)
|
|
+
|
|
|
|
## The mouse exited an inventory item.
|
|
func _on_mouse_exited_inventory_item() -> void:
|
|
- escoria.logger.info(
|
|
- self,
|
|
- "Inventory item unfocused."
|
|
- )
|
|
+ escoria.logger.info(self, "Inventory item unfocused.")
|
|
escoria.main.current_scene.game.inventory_item_unfocused()
|
|
|
|
+
|
|
## The mouse entered an Escoria item.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -310,8 +308,7 @@ func _on_mouse_exited_inventory_item() -> void:
|
|
func _on_mouse_entered_item(item: ESCItem) -> void:
|
|
if item as ESCPlayer and not (item as ESCPlayer).selectable:
|
|
escoria.logger.trace(
|
|
- self,
|
|
- "Ignoring mouse entering player %s: Player not selectable." % [item.global_id]
|
|
+ self, "Ignoring mouse entering player %s: Player not selectable." % [item.global_id]
|
|
)
|
|
if hover_stack.is_empty():
|
|
hotspot_focused = ""
|
|
@@ -322,20 +319,15 @@ func _on_mouse_entered_item(item: ESCItem) -> void:
|
|
return
|
|
|
|
if not escoria.action_manager.is_object_actionable(item.global_id):
|
|
- escoria.logger.debug(
|
|
- self,
|
|
- "Ignoring mouse entering item %s." % [item.global_id]
|
|
- )
|
|
+ escoria.logger.debug(self, "Ignoring mouse entering item %s." % [item.global_id])
|
|
return
|
|
|
|
- escoria.logger.info(
|
|
- self,
|
|
- "Item focused: %s" % item.global_id
|
|
- )
|
|
+ escoria.logger.info(self, "Item focused: %s" % item.global_id)
|
|
|
|
hotspot_focused = item.global_id
|
|
escoria.main.current_scene.game.element_focused(item.global_id)
|
|
|
|
+
|
|
## The mouse exited an Escoria item.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -350,14 +342,16 @@ func _on_mouse_exited_item(item: ESCItem) -> void:
|
|
|
|
if object and not object.interactive:
|
|
return
|
|
- if object and is_instance_valid(object.node) and object.node is ESCPlayer and not (object.node as ESCPlayer).selectable:
|
|
+ if (
|
|
+ object
|
|
+ and is_instance_valid(object.node)
|
|
+ and object.node is ESCPlayer
|
|
+ and not (object.node as ESCPlayer).selectable
|
|
+ ):
|
|
hotspot_focused = ""
|
|
return
|
|
|
|
- escoria.logger.info(
|
|
- self,
|
|
- "Item unfocused: %s" % hotspot_focused
|
|
- )
|
|
+ escoria.logger.info(self, "Item unfocused: %s" % hotspot_focused)
|
|
|
|
if hover_stack.is_empty():
|
|
hotspot_focused = ""
|
|
@@ -366,6 +360,7 @@ func _on_mouse_exited_item(item: ESCItem) -> void:
|
|
hotspot_focused = hover_stack.get_top_item().global_id
|
|
escoria.main.current_scene.game.element_focused(hotspot_focused)
|
|
|
|
+
|
|
## Function called when the item is set interactive, to re-trigger an input on[br]
|
|
## underlying item.[br]
|
|
## [br]
|
|
@@ -382,9 +377,12 @@ func on_item_non_interactive(item: ESCItem) -> void:
|
|
return
|
|
else:
|
|
var new_item = hover_stack.get_top_item()
|
|
- escoria.action_manager.set_action_input_state(ESCActionManager.ACTION_INPUT_STATE.AWAITING_VERB_OR_ITEM)
|
|
+ escoria.action_manager.set_action_input_state(
|
|
+ ESCActionManager.ACTION_INPUT_STATE.AWAITING_VERB_OR_ITEM
|
|
+ )
|
|
new_item.mouse_entered()
|
|
|
|
+
|
|
## An Escoria item was clicked with the LMB.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -396,34 +394,32 @@ func _on_mouse_left_clicked_item(item: ESCItem, event: InputEvent) -> void:
|
|
# Manage clicking through ESCPlayer (if ESCPlayer.selectable is false)
|
|
if item as ESCPlayer and not (item as ESCPlayer).selectable:
|
|
escoria.logger.trace(
|
|
- self,
|
|
- "Ignoring left click on player %s: Player not selectable."
|
|
- % [item.global_id]
|
|
+ self, "Ignoring left click on player %s: Player not selectable." % [item.global_id]
|
|
)
|
|
|
|
# Get next object in hover stack and forward event to it
|
|
if not hover_stack.is_empty():
|
|
var next_item = hover_stack.pop_top_item()
|
|
_on_mouse_left_clicked_item(next_item, event)
|
|
- else: # if no next object, consider this click as background click
|
|
+ else: # if no next object, consider this click as background click
|
|
hotspot_focused = ""
|
|
_on_left_click_on_bg(event.position)
|
|
return
|
|
|
|
# Clicked object can't be actioned and there is no other object behind
|
|
# We consider this click as a background click
|
|
- if not escoria.action_manager.is_object_actionable(item.global_id) \
|
|
- and hover_stack.is_empty():
|
|
+ if (
|
|
+ not escoria.action_manager.is_object_actionable(item.global_id)
|
|
+ and hover_stack.is_empty()
|
|
+ ):
|
|
hotspot_focused = ""
|
|
_on_left_click_on_bg(event.position)
|
|
return
|
|
|
|
# Finally, execute the action on the ESCItem
|
|
hotspot_focused = item.global_id
|
|
- escoria.main.current_scene.game.left_click_on_item(
|
|
- item.global_id,
|
|
- event
|
|
- )
|
|
+ escoria.main.current_scene.game.left_click_on_item(item.global_id, event)
|
|
+
|
|
|
|
## An Escoria item was double-clicked with the LMB.[br]
|
|
## [br]
|
|
@@ -431,42 +427,38 @@ func _on_mouse_left_clicked_item(item: ESCItem, event: InputEvent) -> void:
|
|
## [br]
|
|
## - item: The Escoria item clicked.[br]
|
|
## - event: The input event from the click.
|
|
-func _on_mouse_left_double_clicked_item(
|
|
- item: ESCItem,
|
|
- event: InputEvent
|
|
-) -> void:
|
|
+func _on_mouse_left_double_clicked_item(item: ESCItem, event: InputEvent) -> void:
|
|
if input_mode == INPUT_ALL:
|
|
# Manage clicking through ESCPlayer (if ESCPlayer.selectable is false)
|
|
if item as ESCPlayer and not (item as ESCPlayer).selectable:
|
|
escoria.logger.trace(
|
|
self,
|
|
- "Ignoring double left click on player %s: Player not selectable."
|
|
- % [item.global_id]
|
|
+ "Ignoring double left click on player %s: Player not selectable." % [item.global_id]
|
|
)
|
|
|
|
# Get next object in hover stack and forward event to it
|
|
if not hover_stack.is_empty():
|
|
var next_item = hover_stack.pop_top_item()
|
|
_on_mouse_left_double_clicked_item(next_item, event)
|
|
- else: # if no next object, consider this click as background click
|
|
+ else: # if no next object, consider this click as background click
|
|
hotspot_focused = ""
|
|
_on_double_left_click_on_bg(event.position)
|
|
return
|
|
|
|
# Clicked object can't be actioned and there is no other object behind
|
|
# We consider this click as a background click
|
|
- if not escoria.action_manager.is_object_actionable(item.global_id) \
|
|
- and hover_stack.is_empty():
|
|
+ if (
|
|
+ not escoria.action_manager.is_object_actionable(item.global_id)
|
|
+ and hover_stack.is_empty()
|
|
+ ):
|
|
hotspot_focused = ""
|
|
_on_double_left_click_on_bg(event.position)
|
|
return
|
|
|
|
# Finally, execute the action on the ESCItem
|
|
hotspot_focused = item.global_id
|
|
- escoria.main.current_scene.game.left_double_click_on_item(
|
|
- item.global_id,
|
|
- event
|
|
- )
|
|
+ escoria.main.current_scene.game.left_double_click_on_item(item.global_id, event)
|
|
+
|
|
|
|
## An Escoria item was clicked with the RMB.[br]
|
|
## [br]
|
|
@@ -478,8 +470,7 @@ func _on_mouse_right_clicked_item(item: ESCItem, event: InputEvent) -> void:
|
|
if input_mode == INPUT_ALL:
|
|
if item as ESCPlayer and not (item as ESCPlayer).selectable:
|
|
escoria.logger.debug(
|
|
- self,
|
|
- "Ignoring right click on player %s: Player not selectable." % [item.global_id]
|
|
+ self, "Ignoring right click on player %s: Player not selectable." % [item.global_id]
|
|
)
|
|
|
|
if not hover_stack.is_empty():
|
|
@@ -487,9 +478,11 @@ func _on_mouse_right_clicked_item(item: ESCItem, event: InputEvent) -> void:
|
|
_on_mouse_right_clicked_item(next_item, event)
|
|
return
|
|
|
|
- if not escoria.action_manager.is_object_actionable(item.global_id) \
|
|
- and hover_stack.is_empty():
|
|
- # Treat this as a background click now
|
|
+ if (
|
|
+ not escoria.action_manager.is_object_actionable(item.global_id)
|
|
+ and hover_stack.is_empty()
|
|
+ ):
|
|
+ # Treat this as a background click now
|
|
hotspot_focused = ""
|
|
_on_right_click_on_bg(event.position)
|
|
return
|
|
@@ -508,22 +501,27 @@ func _on_mouse_right_clicked_item(item: ESCItem, event: InputEvent) -> void:
|
|
if event.position:
|
|
(escoria.main.current_scene.game as ESCGame).right_click_on_bg(event.position)
|
|
else:
|
|
- escoria.logger.info(
|
|
- self,
|
|
- "Clicked item %s with event %s cannot be activated (player not selectable or not interactive).\n"
|
|
- % [item.global_id, event] +
|
|
- "No valid item found in the items stack. Action canceled."
|
|
+ (
|
|
+ escoria
|
|
+ . logger
|
|
+ . info(
|
|
+ self,
|
|
+ (
|
|
+ (
|
|
+ "Clicked item %s with event %s cannot be activated (player not selectable or not interactive).\n"
|
|
+ % [item.global_id, event]
|
|
+ )
|
|
+ + "No valid item found in the items stack. Action canceled."
|
|
+ )
|
|
+ )
|
|
)
|
|
else:
|
|
escoria.logger.info(
|
|
- self,
|
|
- "Item %s right clicked with event %s." % [actual_item.global_id, event]
|
|
+ self, "Item %s right clicked with event %s." % [actual_item.global_id, event]
|
|
)
|
|
hotspot_focused = actual_item.global_id
|
|
- escoria.main.current_scene.game.right_click_on_item(
|
|
- actual_item.global_id,
|
|
- event
|
|
- )
|
|
+ escoria.main.current_scene.game.right_click_on_item(actual_item.global_id, event)
|
|
+
|
|
|
|
## The mousewheel was turned.[br]
|
|
## [br]
|
|
@@ -533,13 +531,14 @@ func _on_mouse_right_clicked_item(item: ESCItem, event: InputEvent) -> void:
|
|
func _on_mousewheel_action(direction: int):
|
|
escoria.main.current_scene.game.mousewheel_action(direction)
|
|
|
|
+
|
|
## Event when the pause menu was requested.
|
|
func _on_pause_menu_requested():
|
|
escoria.main.current_scene.game.pause_game()
|
|
|
|
+
|
|
## Hover Stack implementation.
|
|
class HoverStack:
|
|
-
|
|
## Emitted when the content of the hover stack has changed.
|
|
signal hover_stack_changed
|
|
|
|
@@ -562,7 +561,6 @@ class HoverStack:
|
|
_sort()
|
|
hover_stack_changed.emit()
|
|
|
|
-
|
|
## Add the items contained in given list to the stack if not already in it.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -573,7 +571,6 @@ class HoverStack:
|
|
if escoria.action_manager.is_object_actionable(item.global_id):
|
|
add_item(item)
|
|
|
|
-
|
|
## Clean the hover stack.
|
|
func clean():
|
|
for e in hover_stack:
|
|
@@ -581,7 +578,6 @@ class HoverStack:
|
|
hover_stack.erase(e)
|
|
hover_stack_changed.emit()
|
|
|
|
-
|
|
## Pops the top element of the hover stack and returns it.[br]
|
|
## [br]
|
|
## *Returns* The top element of the hover stack.
|
|
@@ -591,14 +587,12 @@ class HoverStack:
|
|
hover_stack_changed.emit()
|
|
return ret
|
|
|
|
-
|
|
## Returns the top element of the hover stack.[br]
|
|
## [br]
|
|
## *Returns* The top element of the hover stack.
|
|
func get_top_item():
|
|
return hover_stack.back()
|
|
|
|
-
|
|
## Remove the given item from the stack.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -610,25 +604,21 @@ class HoverStack:
|
|
_sort()
|
|
hover_stack_changed.emit()
|
|
|
|
-
|
|
## Clear the stack of hovered items.
|
|
func clear():
|
|
hover_stack = []
|
|
hover_stack_emptied.emit()
|
|
|
|
-
|
|
## Returns true if the hover stack is empty, else false.[br]
|
|
## [br]
|
|
## *Returns* True if hover stack is empty, else false.
|
|
func is_empty() -> bool:
|
|
return hover_stack.is_empty()
|
|
|
|
-
|
|
## Sort the hover stack by items' z-index.
|
|
func _sort():
|
|
hover_stack.sort_custom(Callable(HoverStackSorter, "sort_ascending_z_index"))
|
|
|
|
-
|
|
## Returns true if the hover stack contains the given item.[br]
|
|
## [br]
|
|
## #### Parameters[br]
|
|
@@ -639,7 +629,6 @@ class HoverStack:
|
|
func has(item) -> bool:
|
|
return hover_stack.has(item)
|
|
|
|
-
|
|
## Returns the hover stack array.
|
|
## [br]
|
|
## *Returns* The hover stack array.
|