GrappleTest/Player/GrappleHook/GrappleHookProjectile/GrappleHookProjectile.gd

53 lines
1.2 KiB
GDScript3
Raw Permalink Normal View History

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-03-13 16:15:55 -05:00
var target = null
var bodyOffset = Vector2.ZERO
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:
2024-03-13 16:15:55 -05:00
velocity = -velocity
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
2024-03-13 16:15:55 -05:00
global_position = result.position
target = result.collider
bodyOffset = global_position - result.collider.global_position
2024-02-26 08:28:11 -06:00
objectHit(result.collider)
2024-03-13 16:15:55 -05:00
elif parent.grappling and target:
global_position = target.global_position + bodyOffset
2024-02-29 10:38:22 -06:00
2024-03-13 16:15:55 -05:00
lastPos = global_position