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
|