# res://scenes/debug/orrery_view.gd extends Node2D @export_group("Generation Assets") @export var star_scene: PackedScene @export var planet_scene: PackedScene @export var moon_scene: PackedScene @export var barycenter_scene: PackedScene @export var spaceship_scene: PackedScene # Add this even if unused for now @export_group("Orrery Settings") @export var debug_marker_scene: PackedScene # Link your new DebugMarker.tscn here @onready var camera: Camera2D = $Camera2D @onready var system_root: Node2D = $GeneratedSystem @onready var info_label: RichTextLabel = $UI/InfoPanel/MarginContainer/InfoLabel var markers: Dictionary = {} # Maps a body to its marker func _ready(): # 1. Create and configure the generator tool. var generator = StarSystemGenerator.new() # Create a temporary StarSystem-like object to pass to the generator var temp_system_node = Node2D.new() temp_system_node.star_scene = star_scene temp_system_node.planet_scene = planet_scene temp_system_node.moon_scene = moon_scene temp_system_node.barycenter_scene = barycenter_scene temp_system_node.spaceship_scene = spaceship_scene # 2. Generate the system under our dedicated root node. var generation_result = generator.generate(temp_system_node) system_root.add_child(temp_system_node) # Keep the generated hierarchy # 3. Create a debug marker for every generated body. var all_bodies = generation_result.all_bodies + generation_result.all_barycenters for body in all_bodies: if is_instance_valid(body): var marker = debug_marker_scene.instantiate() add_child(marker) # Add markers to the OrreryView, not the generated system marker.initialize(body) marker.marker_selected.connect(_on_marker_selected) markers[body] = marker func _process(_delta): # Keep the markers synced with their body's global position. for body in markers: var marker = markers[body] marker.global_position = body.global_position func _unhandled_input(event: InputEvent): # Simple camera controls if event is InputEventMouseMotion and event.button_mask & MOUSE_BUTTON_MASK_MIDDLE: camera.offset -= event.relative / camera.zoom.x if event is InputEventMouseButton: if event.button_index == MOUSE_BUTTON_WHEEL_UP: camera.zoom *= 1.2 elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN: camera.zoom /= 1.2 func _on_marker_selected(body): # Update the info panel with the selected body's data. var text = "[b]%s[/b]\n" % body.name if body is OrbitalBody3D: text += "Mass: %.2f\n" % body.mass text += "Velocity: (%.2f, %.2f)\n" % [body.linear_velocity.x, body.linear_velocity.y] text += "Position: (%.0f, %.0f)\n" % [body.global_position.x, body.global_position.y] if body is Barycenter and is_instance_valid(body.get_parent()): text += "Parent: %s" % body.get_parent().name info_label.text = text