2019-11-24 15:39:05 +01:00

60 lines
1.6 KiB
GDScript

extends KinematicBody
export(NodePath) var player_path
export(float) var speed
onready var growl_sound = get_node("GrowlSound")
onready var confuse_sound = get_node("ConfuseSound")
onready var see_sound = get_node("SeeSound")
var _current_nav_path: PoolVector3Array
var _player
var _had_path_in_previous_frame = false
onready var _navigation = get_parent()
func _ready():
_player = get_node(player_path)
func _physics_process(delta: float) -> void:
# Play growling sound at random interval
var distance_to_player = (_player.transform.origin - transform.origin).length()
if randi() % 1000 == 1 and not _is_any_sound_playing():
growl_sound.play()
func _process(delta):
var to = _navigation.get_closest_point(_player.transform.origin)
_current_nav_path = _navigation.get_simple_path(transform.origin, to)
var dir: Vector3
if _current_nav_path.size() > 0:
if not _had_path_in_previous_frame and not _is_any_sound_playing():
see_sound.play()
var index = 0
if (_current_nav_path[0] - transform.origin).length() < 0.1: index = 1
dir = (_current_nav_path[index] - transform.origin).normalized()
_had_path_in_previous_frame = true
else:
if _had_path_in_previous_frame and not _is_any_sound_playing():
confuse_sound.play()
dir = (_player.transform.origin - transform.origin).normalized()
_had_path_in_previous_frame = false
if (dir.x != 0.0 and dir.z != 0.0):
look_at(transform.origin + Vector3(dir.x, 0.0, dir.z), Vector3.UP)
move_and_slide(dir * speed)
func _is_any_sound_playing():
return growl_sound.playing or confuse_sound.playing or see_sound.playing