class_name Monster extends CharacterBody3D signal level_up @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 # 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 z_movement = cos(time * frequency) * amplitude velocity = Vector3(x_movement, 0, z_movement) # 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 # calculate players new position # from the camera 3 units backwards var camera = collider.find_child("Camera3D") # local z axis of the camera var local_z = camera.global_transform.basis.z var new_player_position = camera.global_transform.origin + local_z * 3 collider.start_battle(self, new_player_position) #rotate_toward(rotation.z, collider.rotation.z, 1.0)