mtd/Worlds/GreenPlanet/Enemies/enemy_controller.gd

47 lines
1.1 KiB
GDScript3
Raw Normal View History

extends CharacterBody3D
class_name EnemyController
2024-02-22 06:22:22 +11:00
signal reached_goal(enemy: Enemy, penalty: int)
signal died(enemy: Enemy)
@export var stats: Enemy
@export var status_manager: StatusEffector
@export var movement_controller: EnemyMovement
@export var health: Health
@export var sprite: Sprite3D
@export var corpse_scene: PackedScene
var movement_speed: float
2024-02-22 06:22:22 +11:00
var movement_speed_penalty: float = 1.0
var alive: bool = true
func _ready() -> void:
health.max_health = stats.health
health.current_health = stats.health
$SubViewport/HealthBar.setup(stats.health)
sprite.texture = stats.sprite.duplicate()
movement_speed = stats.movement_speed
2024-02-22 06:22:22 +11:00
func damage(amount: float) -> void:
$Hitbox.damage(amount)
2024-02-22 06:22:22 +11:00
func goal_entered() -> void:
if alive:
alive = false
2023-11-09 17:56:08 +11:00
reached_goal.emit(stats, stats.penalty)
queue_free()
2024-02-22 06:22:22 +11:00
func die() -> void:
if alive:
alive = false
died.emit(stats)
2024-02-22 06:22:22 +11:00
var corpse: RigidBody3D = corpse_scene.instantiate()
corpse.set_sprite(stats.death_sprite)
corpse.position = global_position
Game.level.corpses.add_child(corpse)
queue_free()