108 lines
2.8 KiB
GDScript
108 lines
2.8 KiB
GDScript
# The inventory representation of an ESC item if pickable (only used by
|
|
# the inventory components)
|
|
extends TextureButton
|
|
class_name ESCInventoryButton
|
|
|
|
|
|
# Signal emitted when the item was left clicked
|
|
#
|
|
# #### Parameters
|
|
#
|
|
# - item_id: Global ID of the clicked item
|
|
signal mouse_left_inventory_item(item_id)
|
|
|
|
# Signal emitted when the item was right clicked
|
|
#
|
|
# #### Parameters
|
|
#
|
|
# - item_id: Global ID of the clicked item
|
|
signal mouse_right_inventory_item(item_id)
|
|
|
|
# Signal emitted when the item was double clicked
|
|
#
|
|
# #### Parameters
|
|
#
|
|
# - item_id: Global ID of the clicked item
|
|
signal mouse_double_left_inventory_item(item_id)
|
|
|
|
# Signal emitted when the item was focused
|
|
#
|
|
# #### Parameters
|
|
#
|
|
# - item_id: Global ID of the clicked item
|
|
signal inventory_item_focused(item_id)
|
|
|
|
# Signal emitted when the item is not focused anymore
|
|
signal inventory_item_unfocused()
|
|
|
|
|
|
# Global ID of the ESCItem that uses this ESCInventoryItem
|
|
var global_id: String = ""
|
|
|
|
|
|
func _init(p_item: ESCInventoryItem) -> void:
|
|
global_id = p_item.global_id
|
|
texture_normal = p_item.texture
|
|
expand = true
|
|
stretch_mode = TextureButton.STRETCH_KEEP_ASPECT
|
|
|
|
|
|
func _process(_delta: float) -> void:
|
|
rect_size = ProjectSettings.get_setting("escoria/ui/inventory_item_size")
|
|
rect_min_size = ProjectSettings.get_setting(
|
|
"escoria/ui/inventory_item_size"
|
|
)
|
|
|
|
# Connect input handlers
|
|
func _ready():
|
|
connect("gui_input", self, "_on_inventory_item_gui_input")
|
|
connect("mouse_entered", self, "_on_inventory_item_mouse_enter")
|
|
connect("mouse_exited", self, "_on_inventory_item_mouse_exit")
|
|
|
|
|
|
# Handle the gui input and emit the respective signals
|
|
#
|
|
# #### Parameters
|
|
#
|
|
# - event: The event received
|
|
func _on_inventory_item_gui_input(event: InputEvent):
|
|
if InputMap.has_action("switch_action_verb") \
|
|
and event.is_action_pressed("switch_action_verb"):
|
|
if event.button_index == BUTTON_WHEEL_UP:
|
|
escoria.inputs_manager._on_mousewheel_action(-1)
|
|
elif event.button_index == BUTTON_WHEEL_DOWN:
|
|
escoria.inputs_manager._on_mousewheel_action(1)
|
|
if event is InputEventMouseButton:
|
|
# var p = get_global_mouse_position()
|
|
if event.doubleclick:
|
|
if event.button_index == BUTTON_LEFT:
|
|
emit_signal(
|
|
"mouse_double_left_inventory_item",
|
|
global_id,
|
|
event
|
|
)
|
|
else:
|
|
if event.is_pressed():
|
|
if event.button_index == BUTTON_LEFT:
|
|
emit_signal(
|
|
"mouse_left_inventory_item",
|
|
global_id,
|
|
event
|
|
)
|
|
if event.button_index == BUTTON_RIGHT:
|
|
emit_signal(
|
|
"mouse_right_inventory_item",
|
|
global_id,
|
|
event
|
|
)
|
|
|
|
|
|
# Handle mouse entering the item and send the respecitve signal
|
|
func _on_inventory_item_mouse_enter():
|
|
emit_signal("inventory_item_focused", global_id)
|
|
|
|
|
|
# Handle mouse leaving the item and send the respecitve signal
|
|
func _on_inventory_item_mouse_exit():
|
|
emit_signal("inventory_item_unfocused")
|