necra-prototypes/operation/test_scalpel.gd
Antonio Dell'Annunziata 5c785e24af
All checks were successful
/ test (push) Successful in 2s
Integrate map and ritual
2025-03-16 16:26:42 +01:00

53 lines
1.4 KiB
GDScript

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 _unhandled_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)