extends CharacterBody2D var lifeTime = 0.6 @onready var parent = get_parent() var lastPos = null var detecting = true var partiDebounce = true func objectHit(body): if body != self: velocity = Vector2.ZERO parent.grappleStart() func _physics_process(delta): if not lastPos: lastPos = position move_and_slide() $"parti".emitting = (lastPos - position).length() > 0 if detecting: if lifeTime <= 0: velocity = Vector2.ZERO parent.retractingProj.append({"proj": self, "retractStart": position, "retractDur": 0}) parent.grappling = false parent.proj = null detecting = false lifeTime -= delta var space_state = get_world_2d().direct_space_state var query = PhysicsRayQueryParameters2D.create(lastPos, position, 3, [parent.get_parent().get_parent()]) var result = space_state.intersect_ray(query) if result: detecting = false position = result.position objectHit(result.collider) lastPos = position