49 lines
1.1 KiB
GDScript3
49 lines
1.1 KiB
GDScript3
|
extends PathFollow3D
|
||
|
class_name EnemyController
|
||
|
|
||
|
signal reached_goal(penalty)
|
||
|
signal died
|
||
|
|
||
|
var alive = true
|
||
|
|
||
|
@export var stats : Enemy
|
||
|
@export var status_manager : StatusEffector
|
||
|
var movement_speed
|
||
|
|
||
|
func _ready() -> void:
|
||
|
$Dog/Health.max_health = stats.health
|
||
|
$Dog/Health.current_health = stats.health
|
||
|
$Dog/SubViewport/ProgressBar.max_value = stats.health
|
||
|
$Dog/SubViewport/ProgressBar.value = stats.health
|
||
|
$Dog/DirectionSprite.texture = stats.sprite.duplicate()
|
||
|
movement_speed = stats.movement_speed
|
||
|
|
||
|
|
||
|
func damage(amount):
|
||
|
$Dog/Hitbox.damage(amount)
|
||
|
|
||
|
|
||
|
func _physics_process(delta: float) -> void:
|
||
|
progress += movement_speed * delta
|
||
|
if progress_ratio >= 1:
|
||
|
reached_goal.emit(stats.penalty)
|
||
|
queue_free()
|
||
|
|
||
|
|
||
|
func die():
|
||
|
died.emit()
|
||
|
queue_free()
|
||
|
|
||
|
|
||
|
func _on_health_health_depleted() -> void:
|
||
|
if alive:
|
||
|
alive = false
|
||
|
die()
|
||
|
|
||
|
|
||
|
func _on_health_health_changed(health) -> void:
|
||
|
$Dog/SubViewport/ProgressBar.value = health
|
||
|
var percent = float($Dog/Health.current_health) / float($Dog/Health.max_health)
|
||
|
$Dog/SubViewport/ProgressBar.tint_progress = Color(1 - percent, percent, 0.0)
|
||
|
$Dog/SubViewport/ProgressBar.set_visible(true)
|