VampireSurvivor/scripts/mob.gd

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")