refines card movement

This commit is contained in:
ShyProton 2025-04-28 01:54:10 -04:00
parent 45919dc5ae
commit 933e6b715c
3 changed files with 37 additions and 29 deletions

View File

@ -32,3 +32,8 @@ MAIN={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
] ]
} }
SELECT={
"deadzone": 0.2,
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
]
}

View File

@ -14,62 +14,65 @@ var oracle_text: String
var tapped: bool var tapped: bool
# Card input state. # Card input state.
var is_focused: bool # Is the card a focus? var hovered: bool # Is the mouse currently on this card?
var is_dragging: bool # Is the card currently being dragged? var dragging: bool # Is the card currently being dragged?
var focused: bool # Is this card currently a focus?
var mouse_offset: Vector2 var mouse_offset: Vector2
func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:
if is_focused: focused = hovered or dragging
if focused:
# TODO: Export handling keypresses to its own area. # TODO: Export handling keypresses to its own area.
if Input.is_action_just_pressed("MAIN"): if Input.is_action_just_pressed("MAIN"):
tapped = not tapped tapped = not tapped
$TweenController.tap(tapped, delta) $TweenController.tap(tapped, delta)
if is_dragging: if Input.is_action_just_pressed("SELECT"):
dragging = true
Input.set_default_cursor_shape(Input.CURSOR_DRAG)
mouse_offset = get_global_mouse_position() - global_position
if Input.is_action_just_released("SELECT"):
dragging = false
check_hover()
if dragging:
$TweenController.move_to(get_global_mouse_position() - mouse_offset, delta) $TweenController.move_to(get_global_mouse_position() - mouse_offset, delta)
func _on_input_event(viewport: Node, event: InputEvent, shape_idx: int) -> void: # This is called when we want to apply the behaviour of the mouse being
if event is not InputEventMouseButton: # inside/outside the card when we can't trigger the enter/exit triggers.
return func check_hover() -> void:
if hovered:
match event.button_index: _on_mouse_entered()
# MOUSE BUTTONS
MOUSE_BUTTON_LEFT:
if event.pressed:
Input.set_default_cursor_shape(Input.CURSOR_DRAG)
mouse_offset = get_global_mouse_position() - global_position
is_dragging = true
else: else:
Input.set_default_cursor_shape(Input.CURSOR_POINTING_HAND) _on_mouse_exited()
is_dragging = false
MOUSE_BUTTON_RIGHT:
# TODO: Tooltip menu for right-button clicking on cards.
pass
func _on_mouse_entered() -> void: func _on_mouse_entered() -> void:
# Do not care about mouse entering if we're dragging the card. hovered = true
if is_dragging:
# Do not apply any more effects if we're dragging the card.
if dragging:
return return
Input.set_default_cursor_shape(Input.CURSOR_POINTING_HAND) Input.set_default_cursor_shape(Input.CURSOR_POINTING_HAND)
$TweenController.scale(1.05) $TweenController.scale(1.05)
is_focused = true
func _on_mouse_exited() -> void: func _on_mouse_exited() -> void:
# Do not care about mouse exiting if we're dragging the card. hovered = false
if is_dragging:
# Do not apply any more effects if we're dragging the card.
if dragging:
return return
Input.set_default_cursor_shape(Input.CURSOR_ARROW) Input.set_default_cursor_shape(Input.CURSOR_ARROW)
$TweenController.scale(1.0) $TweenController.scale(1.0)
is_focused = false
func _card_error(error_type: String) -> String: func _card_error(error_type: String) -> String:
return "ERROR::CARD::%s::%s::%s::\n" % [card_id, card_name, error_type] return "ERROR::CARD::%s::%s::%s::\n" % [card_id, card_name, error_type]

View File

@ -18,7 +18,7 @@ shape = SubResource("RectangleShape2D_kikvd")
[node name="TweenController" type="Node2D" parent="."] [node name="TweenController" type="Node2D" parent="."]
script = ExtResource("2_imta7") script = ExtResource("2_imta7")
move_speed = 50.0
[connection signal="input_event" from="Area2D" to="." method="_on_input_event"]
[connection signal="mouse_entered" from="Area2D" to="." method="_on_mouse_entered"] [connection signal="mouse_entered" from="Area2D" to="." method="_on_mouse_entered"]
[connection signal="mouse_exited" from="Area2D" to="." method="_on_mouse_exited"] [connection signal="mouse_exited" from="Area2D" to="." method="_on_mouse_exited"]