forked from Julian/JuegoClase
101 lines
2.1 KiB
GDScript
101 lines
2.1 KiB
GDScript
extends Personajes
|
|
# comentario
|
|
|
|
|
|
|
|
@onready var raysuelo : RayCast2D = $Raycasts/RayCastSuelo
|
|
@onready var rayMuro : RayCast2D = $Raycasts/RayCastMuro
|
|
@onready var rayos := $Raycasts
|
|
@onready var raycastPlayer = $raycastPlayerDetector
|
|
@onready var anim = $AnimationPlayer
|
|
|
|
var player
|
|
var canChangeDirection = true
|
|
|
|
enum estados {ANGRY,PATRULLAR,MORIRSE}
|
|
var estadoActual = estados.PATRULLAR :
|
|
set(value):
|
|
estadoActual = value
|
|
match value:
|
|
estados.ANGRY:
|
|
speed = 90
|
|
anim.play("runAngry")
|
|
estados.PATRULLAR:
|
|
speed = 60
|
|
anim.play("walk")
|
|
|
|
var direccion = -1 :
|
|
set(value):
|
|
if value != direccion:
|
|
darseVuelta()
|
|
|
|
direccion = value
|
|
|
|
|
|
func _ready():
|
|
anim.play("walk")
|
|
speed = 60
|
|
|
|
func _physics_process(delta):
|
|
velocity.x = direccion * speed
|
|
|
|
if !is_on_floor():
|
|
velocity.y += 9
|
|
move_and_slide()
|
|
|
|
|
|
func _process(delta):
|
|
|
|
if player == null and raycastPlayer.is_colliding():
|
|
var colision = raycastPlayer.get_collider()
|
|
if colision.is_in_group("Player"):
|
|
player = colision
|
|
estadoActual = estados.ANGRY
|
|
|
|
|
|
if estadoActual == estados.ANGRY and player != null:
|
|
|
|
anim.play("runAngry")
|
|
var directionPlayer = global_position.direction_to(player.global_position)
|
|
if directionPlayer.x < 0:
|
|
|
|
direccion = -1
|
|
elif directionPlayer.x > 0:
|
|
|
|
direccion = 1
|
|
|
|
if estadoActual == estados.PATRULLAR:
|
|
if canChangeDirection and (rayMuro.is_colliding() or !raysuelo.is_colliding()):
|
|
direccion *= -1
|
|
|
|
$Sprite2D.flip_h = true if direccion == 1 else false
|
|
|
|
func takeDmg(damage):
|
|
vida-=damage
|
|
print(vida)
|
|
if vida<=0:
|
|
$dmgPlayer/CollisionShape2D.set_deferred("disabled",true)
|
|
estadoActual = estados.MORIRSE
|
|
anim.play("hurt")
|
|
$CollisionShape2D.set_deferred("disabled",true)
|
|
await (anim.animation_finished)
|
|
|
|
queue_free()
|
|
|
|
func _on_ray_timer_timeout():
|
|
canChangeDirection = true
|
|
pass # Replace with function body.
|
|
|
|
func darseVuelta():
|
|
canChangeDirection = false
|
|
$Raycasts/RayTimer.start()
|
|
rayos.scale.x *= -1
|
|
raycastPlayer.scale.x *= -1
|
|
|
|
|
|
|
|
func _on_dmg_player_he_hecho_danio():
|
|
estadoActual = estados.PATRULLAR
|
|
#darseVuelta()
|
|
direccion *= -1
|