From bab42e969acb3fdfcfe2f383ae04c2aea67d4fe7 Mon Sep 17 00:00:00 2001 From: Rendo Date: Mon, 28 Jul 2025 05:26:23 +0500 Subject: [PATCH] Toggle drag --- scripts/entities/plants/DragAction.cs | 39 ++++++++++++++++++++------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/scripts/entities/plants/DragAction.cs b/scripts/entities/plants/DragAction.cs index b672106..e39717c 100644 --- a/scripts/entities/plants/DragAction.cs +++ b/scripts/entities/plants/DragAction.cs @@ -7,26 +7,47 @@ public partial class DragAction : Node [Signal] public delegate void DragBeginEventHandler(); [Signal] public delegate void DragEndEventHandler(); private bool dragging = false; - + private bool toggle = false; + private bool can_end = false; + private bool mouseIn = false; public override void _Ready() { - GetParent().InputEvent += OnInputEvent; + GetParent().MouseEntered += OnMouseEntered; + GetParent().MouseExited += OnMouseExited; } - public void OnInputEvent(Node viewport, InputEvent @event, long shape_index) + public void OnMouseEntered() { - if (@event.IsActionPressed("primary_action")) - { - dragging = true; - EmitSignal(SignalName.DragBegin); - } + mouseIn = true; } + public void OnMouseExited() + { + mouseIn = false; + } + public override void _Input(InputEvent @event) { - if (dragging && @event.IsActionReleased("primary_action")) + if (mouseIn && @event.IsActionPressed("primary_action")) + { + dragging = true; + toggle = false; + can_end = false; + EmitSignal(SignalName.DragBegin); + GetTree().CreateTimer(0.2).Timeout += OnToggleTimeout; + } + if (dragging && can_end && (toggle == false && @event.IsActionReleased("primary_action") || (toggle == true && @event.IsActionPressed("primary_action")))) { dragging = false; EmitSignal(SignalName.DragEnd); } } + public void OnToggleTimeout() + { + can_end = true; + if (Input.IsActionPressed("primary_action") == false) + { + toggle = true; + } + + } }