monsterfangen/entities/monster/monster.gd

47 lines
1.2 KiB
GDScript

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)