extends Spatial onready var camera := $Camera onready var hand := $Camera/Hand onready var cards := $Cards onready var handCard := $Camera/Hand/Card4 export var mouseHandThreshold = 0.9 var holdingCard: bool var mouseOrigin: Vector2 var lastCameraTransform: Transform func _input(event: InputEvent): # Camera zoom if event.is_action("zoom_in"): camera.zoom(true) elif event.is_action("zoom_out"): camera.zoom(false) # Save original camera and mouse position before panning if event.is_action_pressed("pan"): mouseOrigin = get_viewport().get_mouse_position() lastCameraTransform = camera.transform func _process(delta: float): # If mouse is under a certain area then we're managing our hand var absMousePos := get_viewport().get_mouse_position() # If panning, translate mouse delta to camera delta if Input.is_action_pressed("pan"): var mouseDelta := absMousePos - mouseOrigin var mousePos: Vector2 = mouseDelta * 0.0096 * (1-camera.getZoomLevel()/5) # Magic numbers everywhere camera.transform.origin = lastCameraTransform.origin - Vector3(mousePos.x, 0, mousePos.y) # If holding a card, move it between board/hand if holdingCard: var relPos: float = absMousePos.y / get_viewport().size.y var selectingHand: bool = relPos > mouseHandThreshold if selectingHand and not handCard.inHand: call_deferred("reparent", handCard, cards, hand) handCard.inHand = true elif not selectingHand and handCard.inHand: call_deferred("reparent", handCard, hand, cards) handCard.inHand = false func _card_picked(): holdingCard = true func _card_dropped(): holdingCard = false func reparent(object: Node, from: Node, to: Node): from.remove_child(object) to.add_child(object) object.set_owner(to)