aboutsummaryrefslogtreecommitdiff
path: root/logic/database.gd
diff options
context:
space:
mode:
Diffstat (limited to 'logic/database.gd')
-rw-r--r--logic/database.gd60
1 files changed, 59 insertions, 1 deletions
diff --git a/logic/database.gd b/logic/database.gd
index 4f3e613..41ba679 100644
--- a/logic/database.gd
+++ b/logic/database.gd
@@ -31,7 +31,8 @@ onready var stage: Stage = get_node("/root/main/stage")
onready var delete_button: Button = get_node("actions/delete")
onready var edit_button: Button = get_node("actions/edit")
onready var add_button: Button = get_node("actions/add")
-onready var v_scroll_bar: ScrollBar = get_v_scroll()
+onready var v_scroll_bar: ScrollBar = get_v_scroll() # @DAM Stop scroll inertia when buttons are pressed.
+onready var drag_sensor: PointerInputSensor = get_node("drag_sensor")
func _init():
@@ -44,15 +45,72 @@ func _init():
func _ready():
self.connect("item_selected", self, "item_selected")
self.connect("nothing_selected", self, "clear_selection")
+
delete_button.connect("pressed", self, "delete_action")
edit_button.connect("pressed", self, "edit_action")
add_button.connect("pressed", self, "add_action")
+
stage.connect("save", self, "save")
stage.connect("discard", self, "discard")
+
+ drag_sensor.connect("on_press", self, "on_press")
+ drag_sensor.connect("on_drag", self, "on_drag")
+ drag_sensor.connect("on_end_drag", self, "on_end_drag")
+ drag_sensor.connect("on_click", self, "on_click")
+
for it in db:
self.add_item(get_entry_view(it))
+# @DAM Cleanup this code.
+export var scroll_velocity_decaying_factor: float = 2.5
+var drag_velocity := 0.0
+var is_dragging := false
+
+func _process(delta: float):
+ if is_dragging == false && abs(drag_velocity) > 0.5:
+ drag_velocity *= clamp((1.0 - scroll_velocity_decaying_factor * delta), 0.0, 1.0)
+ v_scroll_bar.value -= drag_velocity * delta
+
+func on_click(pointer: PointerInputSensor.PointerInputData):
+ var target := self
+ var position := target.get_global_mouse_position() - target.rect_global_position
+
+ var event_touch := InputEventScreenTouch.new()
+ event_touch.index = 0
+ event_touch.position = position
+
+ var event_mouse := InputEventMouseButton.new()
+ event_mouse.button_index = BUTTON_LEFT
+ event_mouse.button_mask = BUTTON_MASK_LEFT
+ event_mouse.position = position
+
+ event_mouse.pressed = true
+ event_touch.pressed = true
+ target._gui_input(event_mouse)
+ target._gui_input(event_touch)
+
+ target.grab_focus()
+
+ event_mouse.pressed = false
+ event_touch.pressed = false
+ target._gui_input(event_mouse)
+ target._gui_input(event_touch)
+
+func on_press(pointer: PointerInputSensor.PointerInputData):
+ is_dragging = true
+
+func on_end_drag(pointer: PointerInputSensor.PointerInputData):
+ is_dragging = false
+
+func on_drag(pointer: PointerInputSensor.PointerInputData):
+ is_dragging = true
+ drag_velocity = pointer.velocity.y
+ v_scroll_bar.value -= pointer.relative_position.y
+
+
+
+
func _notification(what: int):
if visible == false:
return