2024-02-26 08:28:11 -06:00
|
|
|
extends CharacterBody2D
|
|
|
|
|
|
|
|
var lifeTime = 0.6
|
|
|
|
|
|
|
|
@onready var parent = get_parent()
|
|
|
|
|
|
|
|
var lastPos = null
|
|
|
|
|
|
|
|
var detecting = true
|
|
|
|
|
2024-02-27 11:27:54 -06:00
|
|
|
var partiDebounce = true
|
|
|
|
|
2024-02-26 08:28:11 -06:00
|
|
|
func objectHit(body):
|
|
|
|
if body != self:
|
|
|
|
velocity = Vector2.ZERO
|
|
|
|
parent.grappleStart()
|
|
|
|
|
|
|
|
func _physics_process(delta):
|
|
|
|
if not lastPos:
|
|
|
|
lastPos = position
|
|
|
|
|
|
|
|
move_and_slide()
|
|
|
|
|
2024-02-29 10:38:22 -06:00
|
|
|
if find_child("parti"):
|
|
|
|
$"parti".emitting = (lastPos - position).length() > 0
|
2024-02-27 11:27:54 -06:00
|
|
|
|
2024-02-26 08:28:11 -06:00
|
|
|
if detecting:
|
|
|
|
if lifeTime <= 0:
|
|
|
|
velocity = Vector2.ZERO
|
2024-02-27 11:27:54 -06:00
|
|
|
parent.retractingProj.append({"proj": self, "retractStart": position, "retractDur": 0})
|
|
|
|
parent.grappling = false
|
|
|
|
parent.proj = null
|
|
|
|
detecting = false
|
2024-02-26 08:28:11 -06:00
|
|
|
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)
|
2024-02-29 10:38:22 -06:00
|
|
|
|
2024-02-27 11:27:54 -06:00
|
|
|
lastPos = position
|