41 lines
836 B
GDScript
41 lines
836 B
GDScript
extends CharacterBody3D
|
|
|
|
signal squashed
|
|
|
|
@export var min_speed = 10
|
|
@export var max_speed = 18
|
|
|
|
# In code timer for brownian motion
|
|
var T: float = 0.5
|
|
var Tinit: float = 1.0
|
|
var dt: float = 0.05
|
|
var t: float = 0.0
|
|
|
|
func _physics_process(_delta):
|
|
if t > T and Tinit < 0:
|
|
t = 0
|
|
set_new_velocity()
|
|
t += dt
|
|
Tinit -= dt
|
|
|
|
move_and_slide()
|
|
|
|
func initialize(start_position, player_position):
|
|
look_at_from_position(start_position, player_position, Vector3.UP)
|
|
|
|
set_new_velocity()
|
|
|
|
func set_new_velocity() -> void:
|
|
rotate_y(randf_range(-PI / 4, PI / 4))
|
|
var random_speed = randi_range(min_speed, max_speed)
|
|
velocity = Vector3.FORWARD * random_speed
|
|
velocity = velocity.rotated(Vector3.UP, rotation.y)
|
|
|
|
func _on_visible_on_screen_notifier_3d_screen_exited() -> void:
|
|
queue_free()
|
|
|
|
|
|
func squash():
|
|
squashed.emit()
|
|
queue_free()
|