summaryrefslogtreecommitdiff
path: root/Scripts/Enemy AI/ShoreAI.gd
blob: 16a3e04374f3471c168e2aed8df689587342c15c (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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
extends Node

var player : Entity = null
var parent : Entity

@export var weapon : Node2D
@export var sprite : Node2D
@export var animator : AnimationPlayer
@export var walk_speed : float = 200

var in_range : bool = false
var can_attack : bool = true

func _ready() -> void:
	parent = get_node("..")
	walk_speed = randf_range(walk_speed - 50, walk_speed + 50)

var delta_pos : Vector2

func _process(delta: float) -> void:
	if !player:
		return

	delta_pos = player.global_position - parent.global_position

	if delta_pos.x < 0:
		if weapon.position.x > 0: weapon.position.x = -weapon.position.x
		if weapon.scale.x > 0: weapon.scale.x = -1
		if sprite.scale.x > 0: sprite.scale.x = -1
	else:
		if weapon.position.x < 0: weapon.position.x = -weapon.position.x
		if weapon.scale.x < 0: weapon.scale.x = 1
		if sprite.scale.x < 0: sprite.scale.x = 1
	
	if in_range && can_attack:
		weapon.action()
		parent.linear_velocity.y = 2000
		can_attack = false

func _physics_process(delta: float) -> void:
	if !in_range && parent.linear_velocity.y == 0 && player:
		if delta_pos.x < 0:
			parent.linear_velocity.x = -walk_speed
		else:
			parent.linear_velocity.x = walk_speed
		animator.play("walk")
	elif in_range:
		animator.stop()

func _on_area_2d_body_entered(body:Node2D) -> void:
	print(body)
	if body is Entity:
		if body.is_player:
			player = body
			$"AttackCooldown".start()

func _on_attack_area_body_entered(body: Node2D) -> void:
	if body is Entity:
		if body.is_player:
			in_range = true

func _on_attack_area_body_exited(body: Node2D) -> void:
	if body is Entity:
		if body.is_player:
			in_range = false

func _on_attack_cooldown_timeout() -> void:
	can_attack = true