extends Spatial class_name Card signal card_selected() signal card_unselected() signal card_picked() signal card_dropped() var clicked := false var exhausted := false var lifted := false export var cardID := "" export var playerID := 0 export var inHand := false onready var animation := $Border/AnimationPlayer func _mouse_hover(): if inHand: animation.play("focus") emit_signal("card_selected") func _mouse_blur(): if inHand: animation.play("blur") emit_signal("card_unselected") func _input_event(camera, event, click_position, click_normal, shape_idx): if clicked and event is InputEventMouseMotion: if not lifted: animation.play("lift") if inHand: animation.advance(1.0) emit_signal("card_picked") lifted = true var origin: Vector3 = camera.project_ray_origin(event.position) var direction: Vector3 = camera.project_ray_normal(event.position) if inHand: transform.origin = Vector3.ZERO + Vector3.RIGHT * direction * 3.0 else: var denom := Vector3.UP.dot(direction) var t: float = (-camera.transform.origin).dot(Vector3.UP) / denom; transform.origin = origin + direction * t if event is InputEventMouseButton and event.button_index == BUTTON_LEFT: # Update click status clicked = event.pressed # Check for card dropped if not clicked and lifted: if inHand: animation.play("drop") else: animation.play_backwards("lift") emit_signal("card_dropped") lifted = false # Check double click if event.doubleclick and not lifted and not animation.is_playing(): if exhausted: animation.play_backwards("tap") exhausted = false else: animation.play("tap") exhausted = true