extends Node @export var shatter_scenes: Array[PackedScene] @export var building_meshes: Array[PackedScene] @export var building_scales: PackedVector3Array var shatter_scene: PackedScene func _ready() -> void: var idx := randi_range(0, building_meshes.size() - 1) # for child in %Shaker.get_children(): # child.visible = child.get_index() == idx var building_mesh: Node3D = building_meshes[idx].instantiate() building_mesh.scale = building_scales[idx] %Shaker.add_child(building_mesh) shatter_scene = shatter_scenes[idx] func _on_building_destroyed_from(global_pos: Vector3) -> void: var shatter = shatter_scene.instantiate() shatter.show() %Shatters.add_child(shatter) var meshes: Array[MeshInstance3D] var rbs := shatter.get_child(1).get_children() for rb: RigidBody3D in rbs: if randf() > .35: rb.queue_free() else: var dir := global_pos.direction_to(rb.global_position) rb.apply_impulse(dir * 10) rb.collision_layer = 0 meshes.push_back(rb.get_child(1)) var t := shatter.create_tween() var first := true t.tween_interval(2) for mesh in meshes: var t2 = t if not first: t2 = t.parallel() t2.tween_property(mesh, "transparency", 1., 0.5) first = false t.finished.connect(shatter.queue_free)