41 lines
1 KiB
GDScript
41 lines
1 KiB
GDScript
class_name GrabStep
|
|
extends Node2D
|
|
|
|
signal step_succeeded
|
|
signal step_failed
|
|
|
|
|
|
@export var is_skipped = false
|
|
@export_node_path("BatExtractionBat") var grabbing_target_path: NodePath
|
|
|
|
|
|
@onready var feedback_canvas_modulate: FeedbackCanvasModulate = %FeedbackCanvasModulate
|
|
|
|
|
|
var grabbing_target: BatExtractionBat
|
|
var pliers: Pliers
|
|
|
|
func _ready():
|
|
grabbing_target = get_node(grabbing_target_path) as BatExtractionBat
|
|
pliers = get_tree().get_first_node_in_group("grabber") as Pliers
|
|
pliers.pliers_used.connect(_on_pliers_used)
|
|
|
|
func _on_pliers_used(top_area: Area2D):
|
|
if not grabbing_target.is_grabbed and top_area == grabbing_target.grab_area:
|
|
_target_grabbed()
|
|
elif grabbing_target.is_grabbed and top_area == (%BatDropoff as BatDropoff).dropoff_area:
|
|
_target_dropped()
|
|
else:
|
|
_hurt()
|
|
|
|
|
|
func _target_grabbed():
|
|
grabbing_target.grab_bat()
|
|
|
|
func _target_dropped():
|
|
grabbing_target.drop_bat()
|
|
step_succeeded.emit()
|
|
|
|
func _hurt():
|
|
feedback_canvas_modulate.show_hurt_feedback()
|
|
%PatienceBar.value = clampi(%PatienceBar.value - 10, 0, 100)
|