summaryrefslogtreecommitdiff
path: root/addons/escoria-ui-simplemouse/inventory/inventory_ui.gd
diff options
context:
space:
mode:
Diffstat (limited to 'addons/escoria-ui-simplemouse/inventory/inventory_ui.gd')
-rw-r--r--addons/escoria-ui-simplemouse/inventory/inventory_ui.gd88
1 files changed, 88 insertions, 0 deletions
diff --git a/addons/escoria-ui-simplemouse/inventory/inventory_ui.gd b/addons/escoria-ui-simplemouse/inventory/inventory_ui.gd
new file mode 100644
index 0000000..14cf871
--- /dev/null
+++ b/addons/escoria-ui-simplemouse/inventory/inventory_ui.gd
@@ -0,0 +1,88 @@
+extends ESCInventory
+
+
+# Whether the inventory is visible currently
+var inventory_visible: bool = false
+
+var hovering_inventory_item: bool = false
+
+var _tween: Tween3
+
+var being_closed: bool
+var being_opened: bool
+
+@onready var inventory_scene = $panel
+
+# Height of the title part of the inventory that stays visible when inventory
+# is hidden. To be computed depending on the resolution of the game, hardcoded
+# here for demonstration purpose.
+const _inventory_title_height: int = 34
+
+func _ready() -> void:
+ super._ready()
+ _tween = Tween3.new(self)
+ # Hide inventory by default
+ hide_inventory()
+
+
+func show_inventory():
+ if being_opened:
+ return
+ being_opened = true
+ _tween.stop()
+ _tween.reset()
+ var start_pos_y = inventory_scene.position.y
+ var end_pos_y = get_viewport_rect().size.y - inventory_scene.size.y
+ _tween.interpolate_property(
+ inventory_scene,
+ "position:y",
+ start_pos_y,
+ end_pos_y,
+ 0.4,
+ Tween.TransitionType.TRANS_CUBIC
+ )
+ _tween.play()
+ await _tween.finished
+ _tween.stop()
+ inventory_visible = true
+ being_opened = false
+
+func hide_inventory():
+ if being_closed:
+ return
+ being_closed = true
+ _tween.stop()
+ _tween.reset()
+ var start_pos_y = inventory_scene.position.y
+ var end_pos_y = get_viewport_rect().size.y - _inventory_title_height
+ _tween.interpolate_property(
+ inventory_scene,
+ "position:y",
+ start_pos_y,
+ end_pos_y,
+ 0.4,
+ Tween.TransitionType.TRANS_CUBIC
+ )
+ _tween.play()
+ await _tween.finished
+ _tween.stop()
+ inventory_visible = false
+ being_closed = false
+
+
+func detector_in():
+ if not inventory_visible:
+ inventory_scene.get_node("MarginContainer/ScrollContainer/container").item_focused = false
+ show_inventory()
+ $panel/detector_out.show()
+
+
+func detector_out():
+ if inventory_visible:
+ hide_inventory()
+ $panel/detector_out.hide()
+
+
+
+func _on_detector_out_gui_input(event):
+ detector_out()