summaryrefslogtreecommitdiff
path: root/scripts/warlock_projectile.gd
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")