extends KinematicBody # stats var curHp : int = 3 var maxHp : int = 3 # attacking var damage : int = 1 var attackDist : float = 1.5 var attackRate : float = 1.0 # physics var moveSpeed : float = 2.5 var gravity : float = 15.0 # vectors var vel : Vector3 = Vector3() # components onready var timer = get_node("Timer") export var player_path : NodePath onready var player = get_node(player_path) onready var anim = get_node("Zombie_Male/AnimationPlayer") func _ready (): # set the timer wait time timer.wait_time = attackRate timer.start() # called every "attackRate" seconds func _on_Timer_timeout (): # if we're within the attack distance - attack the player if translation.distance_to(player.translation) <= attackDist: player.take_damage(damage) # called 60 times a second func _physics_process (delta): # get the distance from us to the player var dist = translation.distance_to(player.translation) # if we're outside of the attack distance, chase after the player if dist > attackDist: # calculate the direction between us and the player var dir = (player.translation - translation).normalized() vel.x = dir.x vel.z = dir.z # gravity vel.y -= gravity * delta # move towards the player vel = move_and_slide(vel, Vector3.UP) # called when the player deals damage to us func take_damage (damageToTake): curHp -= damageToTake anim.play("RecieveHit") # if our health reaches 0 - die if curHp <= 0: die() # called when our health reaches 0 func die (): # destroy the node queue_free()