working on picking up arrows
This commit is contained in:
@@ -1,13 +1,45 @@
|
||||
extends Projectile
|
||||
class_name Arrow
|
||||
|
||||
@onready var hit_ray: RayCast3D = $HitRay
|
||||
@onready var land_depth: Marker3D = $LandDepth
|
||||
@onready var arrow: MeshInstance3D = $Arrow
|
||||
@onready var pickup_collision: Area3D = $PickupCollision
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
|
||||
if hit_ray.is_colliding():
|
||||
var stick_point = hit_ray.get_collision_point()
|
||||
if land_depth.global_position.distance_to(stick_point) > .2:
|
||||
var follow_target
|
||||
var spawn_out = false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
pickup_collision.monitorable = false
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if !despawn:
|
||||
if hit_ray.is_colliding():
|
||||
despawn = true
|
||||
var body_hit = hit_ray.get_collider()
|
||||
if body_hit is EnemyCharacter:
|
||||
body_hit.hit(damage)
|
||||
reparent(body_hit)
|
||||
var stick_point = hit_ray.get_collision_point()
|
||||
if land_depth.global_position.distance_to(stick_point) > .2:
|
||||
global_position += global_transform.basis * Vector3(0,0,-speed) * delta
|
||||
else:
|
||||
global_position += global_transform.basis * Vector3(0,0,-speed) * delta
|
||||
else:
|
||||
global_position += global_transform.basis * Vector3(0,0,-speed) * delta
|
||||
pickup_collision.monitorable = true
|
||||
|
||||
pickup_follow(delta)
|
||||
|
||||
func pickup_follow(delta):
|
||||
if follow_target != null:
|
||||
if spawn_out:
|
||||
follow_target.arrow += 1
|
||||
queue_free()
|
||||
else:
|
||||
if global_position.distance_to(follow_target.global_position) < .5:
|
||||
spawn_out = true
|
||||
else:
|
||||
var direction_to_player = global_position.direction_to(follow_target.global_position)
|
||||
var distance_to_player = global_position.distance_to(follow_target.global_position)
|
||||
global_position += global_transform.basis * direction_to_player * (5 + distance_to_player * 3) * delta
|
||||
|
||||
Reference in New Issue
Block a user