41 lines
1.2 KiB
GDScript
41 lines
1.2 KiB
GDScript
extends CharacterBody2D
|
|
|
|
signal mob_died(xp: int)
|
|
|
|
@onready var animation_player: AnimationPlayer = %AnimationPlayer
|
|
@onready var explosion_sound: AudioStreamPlayer2D = %ExplosionSound
|
|
@onready var take_damage_sound: AudioStreamPlayer2D = %TakeDamageSound
|
|
const SMOKE_EXPLOSION = preload("res://smoke_explosion/smoke_explosion.tscn")
|
|
|
|
@onready var player: Node2D = get_node("/root/Game/Player")
|
|
|
|
# Import the MobData class
|
|
const MobDataScript = preload("res://scripts/mob_data.gd")
|
|
|
|
# Create an instance of MobData
|
|
@export var mob_data: MobData = MobDataScript.new(2, 100, 1)
|
|
|
|
func _ready() -> void:
|
|
animation_player.play("walk")
|
|
|
|
func _physics_process(_delta: float) -> void:
|
|
if not player: return
|
|
var direction = global_position.direction_to(player.global_position)
|
|
velocity = direction * mob_data.speed
|
|
move_and_slide()
|
|
|
|
func take_damage() -> void:
|
|
mob_data.health -= 1
|
|
if mob_data.health <= 0:
|
|
var smoke = SMOKE_EXPLOSION.instantiate()
|
|
get_parent().add_child(smoke)
|
|
smoke.global_position = global_position
|
|
explosion_sound.play()
|
|
await explosion_sound.finished
|
|
mob_died.emit(mob_data.xp)
|
|
queue_free()
|
|
else:
|
|
take_damage_sound.play()
|
|
animation_player.play("hurt")
|
|
animation_player.queue("walk")
|