class_name Building extends CollisionObject3D @export var health := 10. @export var shake_noise: FastNoiseLite var shake_duration := 0. @onready var initial_shaker_pos: Vector3 = %Shaker.position func _ready() -> void: scale.y = randf_range(.5, 1.25) func _process(delta: float) -> void: if shake_duration <= 0: %Shaker.position = initial_shaker_pos else: var x := shake_noise.get_noise_1d(shake_duration * 10000) var y := shake_noise.get_noise_1d(-shake_duration * 10000) %Shaker.position = initial_shaker_pos + (Vector3(x, 0, y) * 0.75) shake_duration = move_toward(shake_duration, 0., delta) func hit(_proj: PlayerProjectile, damage: float) -> bool: health -= damage if health <= 0.: SignalBus.building_destroyed.emit(self) collision_layer = 1 # World collision only %Shaker.hide() %DestroyedMesh.show() %GPUParticles3D.preprocess = randf() else: shake_duration += 0.5 return true