33 lines
1.1 KiB
GDScript
33 lines
1.1 KiB
GDScript
@tool
|
|
extends Node3D
|
|
|
|
@export_tool_button("Clear collisions", "Callable") var clear_col_action = clear_collisions
|
|
@export_tool_button("Generate collisions", "Callable") var generate_col_action = generate_collisions
|
|
|
|
func get_all_children_of_type(node, type) -> Array:
|
|
var nodes : Array = []
|
|
for child in node.get_children():
|
|
if is_instance_of(child, type):
|
|
nodes.append(child)
|
|
if child.get_child_count() > 0:
|
|
nodes.append_array(get_all_children_of_type(child, type))
|
|
return nodes
|
|
|
|
func clear_collisions_on_meshes(meshes: Array):
|
|
for mesh_instance: MeshInstance3D in meshes:
|
|
for child in mesh_instance.get_children():
|
|
child.queue_free()
|
|
|
|
func generate_collisions_on_meshes(meshes: Array):
|
|
for mesh_instance: MeshInstance3D in meshes:
|
|
mesh_instance.create_trimesh_collision()
|
|
|
|
func generate_collisions():
|
|
var mesh_instances = get_all_children_of_type(self, MeshInstance3D)
|
|
clear_collisions_on_meshes(mesh_instances)
|
|
generate_collisions_on_meshes(mesh_instances)
|
|
|
|
func clear_collisions():
|
|
var mesh_instances = get_all_children_of_type(self, MeshInstance3D)
|
|
clear_collisions_on_meshes(mesh_instances)
|