26 lines
662 B
GDScript
26 lines
662 B
GDScript
# scripts/barycenter.gd
|
|
class_name Barycenter
|
|
extends OrbitalBody3D
|
|
|
|
func _ready():
|
|
physics_mode = PhysicsMode.INDEPENDENT
|
|
await get_tree().process_frame
|
|
|
|
# We no longer run a local simulation here.
|
|
# We only need physics_process to integrate our own movement.
|
|
set_physics_process(true)
|
|
|
|
func get_internal_attractors() -> Array[OrbitalBody3D]:
|
|
var internal_attractors: Array[OrbitalBody3D] = []
|
|
for child in get_children():
|
|
if child is OrbitalBody3D:
|
|
internal_attractors.append(child)
|
|
|
|
return internal_attractors
|
|
|
|
func recalculate_total_mass():
|
|
base_mass = 0.0
|
|
for child in get_internal_attractors():
|
|
base_mass += child.mass
|
|
mass = base_mass
|