Files

62 lines
2.1 KiB
GDScript

extends Node3D
# Attach to the ROOT node (DartboardProto).
# Leave `dartboard_root` empty to auto-search, or drag the glb node in.
@export var dartboard_root: Node
var dartboard: MeshInstance3D
func _ready() -> void:
dartboard = _find_mesh_instance(dartboard_root if dartboard_root else self)
if dartboard == null:
push_error("Could not find a MeshInstance3D. Check that the glb is in the scene.")
return
print("Found dartboard mesh node: ", dartboard.name)
_print_surfaces()
_ensure_collision()
func _find_mesh_instance(node: Node) -> MeshInstance3D:
if node is MeshInstance3D and node.mesh != null:
return node
for child in node.get_children():
var found := _find_mesh_instance(child)
if found:
return found
return null
func _print_surfaces() -> void:
var mesh := dartboard.mesh
print("=== Dartboard surfaces ===")
for i in mesh.get_surface_count():
var mat := mesh.surface_get_material(i)
var mat_name := mat.resource_name if mat else "(no material)"
print("Surface ", i, " material name: '", mat_name, "'")
print("==========================")
var aabb := dartboard.get_aabb()
print("Board local size (x,y,z): ", aabb.size)
# CHEAP collision: one box that matches the board's bounding box.
# This replaces create_trimesh_collision(), which was making it run at ~3 FPS
# because it built a collision triangle for every face of the board.
func _ensure_collision() -> void:
# Remove any existing auto-added body so we don't stack shapes on re-runs.
for child in dartboard.get_children():
if child is StaticBody3D and child.name == "AutoBoardBody":
child.queue_free()
var body := StaticBody3D.new()
body.name = "AutoBoardBody"
var col := CollisionShape3D.new()
var box := BoxShape3D.new()
# Match the mesh's bounding box. Use the AABB size directly as the box size.
var aabb := dartboard.get_aabb()
box.size = aabb.size
col.shape = box
# Center the box on the mesh's bounding-box center (not always the origin).
col.position = aabb.position + aabb.size * 0.5
body.add_child(col)
dartboard.add_child(body)
print("Created cheap box collision for the dartboard.")