blob: 2c3830fcf697587d0ae72c8042baccacc961a5e3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
extends CharacterBody2D
var target : CharacterBody2D
var speed : int
var projectile_damage : int
var max_lifetime : float
var chaos_factor : float
var _total_lifetime : float = 0.0
func _physics_process(delta: float):
if _total_lifetime > max_lifetime:
queue_free()
else:
_total_lifetime += delta
_move_projectile()
func _on_area_2d_body_entered(body: Node2D):
if "Crawler" in body.name:
body.deal_damage(projectile_damage)
queue_free()
func _move_projectile():
var pos : Vector2 = _get_target_position()
var curve_offset = Vector2(
sin(_total_lifetime * 5) * chaos_factor,
cos(_total_lifetime * 5) * chaos_factor,
)
velocity = global_position.direction_to(pos) * speed + curve_offset
move_and_slide()
func _get_target_position() -> Vector2:
if is_instance_valid(target):
return target.global_position
else:
return Vector2(randf_range(-2.0, 2.0), randf_range(-2.0, 2.0)) + global_position
#func _assign_new_target():
#var enemies = get_tree().get_nodes_in_group("enemies")
|