class_name Scalpel extends Sprite2D signal cut_started signal cut_ended const SCALPEL_ROTATION_CUTTING = -90.0 var is_cutting_possible = false var is_cutting = false var _scalpel_degrees_default: float @onready var pickup_area: PickupArea = $PickupArea @onready var cut_area: Area2D = $CutArea @onready var feedback_canvas_modulate: FeedbackCanvasModulate = %FeedbackCanvasModulate func _input(event: InputEvent): if event is InputEventMouseButton: if event.is_pressed() and is_cutting_possible: start_cutting() elif event.is_released() and is_cutting: stop_cutting() func _on_cut_area_area_entered(area): is_cutting_possible = true func _on_cut_area_area_exited(area): is_cutting_possible = cut_area.has_overlapping_areas() if not is_cutting_possible: stop_cutting() func start_cutting(): if is_cutting: return _scalpel_degrees_default = rotation_degrees rotation_degrees = SCALPEL_ROTATION_CUTTING _on_cut_hurt_timer_timeout() %CutHurtTimer.start(2) is_cutting = true cut_started.emit() func stop_cutting(): if not is_cutting: return rotation_degrees = _scalpel_degrees_default %CutHurtTimer.stop() is_cutting = false cut_ended.emit() func _on_cut_hurt_timer_timeout(): # TODO: Check if should hurt var patience_bar = get_tree().get_first_node_in_group("patience_bar") as ProgressBar feedback_canvas_modulate.show_hurt_feedback() patience_bar.value = clampi(patience_bar.value - 5, 0, 100)