class_name Monster extends CharacterBody3D @export var data: MonsterData = MonsterData.new() var spawn_point: Vector3 = Vector3(0, 0, 0) # DEBUG MOVEMENT @onready var time: float = 16.0 @onready var frequency: float = 1.0 @onready var amplitude: float = 0.5 var in_battle: bool = false var idle: bool = false # Called when the node enters the scene tree for the first time. func _ready() -> void: var model_instance = data.model.instantiate() frequency = randf_range(1.0, 4.0) amplitude = randf_range(1.0, 6.0) spawn_point = position add_child(model_instance) func _physics_process(delta: float) -> void: if in_battle: velocity = Vector3.ZERO return time += delta var x_movement = sin(time * frequency) * amplitude var y_movement = sin(time * 25) * 4.0 var z_movement = cos(time * frequency) * amplitude if not idle: velocity = Vector3(x_movement, y_movement, z_movement) else: velocity = Vector3(0, y_movement, 0) # if move_and_slide reports collisions if move_and_slide(): var collision = get_slide_collision(0) var collider = collision.get_collider() # if the monster collided with the player... if collider.name == "Player": velocity = Vector3.ZERO in_battle = true collider.start_battle(self) func faint() -> void: self.queue_free() func attack_enemy(enemy: Monster) -> int: var damage = data.attack_enemy(enemy.data) return damage func take_damage(amount: int) -> void: data.take_damage(amount)