@tool class_name PreviewPanel extends PanelContainer # UI panel for displaying the preview # UI elements var preview_viewport: SubViewport var preview_texture: TextureRect var controls_container: HBoxContainer var play_button: Button var pause_button: Button var stop_button: Button var speed_slider: HSlider var progress_bar: ProgressBar var debug_label: Label # Properties var preview_manager: PreviewManager var is_playing: bool = false # Initialize the preview panel func _ready() -> void: _setup_ui() _setup_signals() # Set up the UI func _setup_ui() -> void: # Main container var main_vbox = VBoxContainer.new() main_vbox.size_flags_horizontal = Control.SIZE_EXPAND_FILL main_vbox.size_flags_vertical = Control.SIZE_EXPAND_FILL add_child(main_vbox) # Preview viewport var viewport_container = AspectRatioContainer.new() viewport_container.size_flags_horizontal = Control.SIZE_EXPAND_FILL viewport_container.size_flags_vertical = Control.SIZE_EXPAND_FILL viewport_container.ratio = 16.0/9.0 main_vbox.add_child(viewport_container) preview_viewport = SubViewport.new() preview_viewport.size = Vector2i(800, 450) preview_viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS viewport_container.add_child(preview_viewport) preview_texture = TextureRect.new() preview_texture.expand = true preview_texture.size_flags_horizontal = Control.SIZE_EXPAND_FILL preview_texture.size_flags_vertical = Control.SIZE_EXPAND_FILL preview_texture.texture = preview_viewport.get_texture() viewport_container.add_child(preview_texture) # Controls controls_container = HBoxContainer.new() controls_container.size_flags_horizontal = Control.SIZE_EXPAND_FILL main_vbox.add_child(controls_container) play_button = Button.new() play_button.text = "▶" play_button.flat = true controls_container.add_child(play_button) pause_button = Button.new() pause_button.text = "⏸" pause_button.flat = true controls_container.add_child(pause_button) stop_button = Button.new() stop_button.text = "⏹" stop_button.flat = true controls_container.add_child(stop_button) var speed_label = Label.new() speed_label.text = "Speed:" controls_container.add_child(speed_label) speed_slider = HSlider.new() speed_slider.min = 0.1 speed_slider.max = 2.0 speed_slider.step = 0.1 speed_slider.value = 1.0 speed_slider.size_flags_horizontal = Control.SIZE_EXPAND_FILL controls_container.add_child(speed_slider) # Progress bar progress_bar = ProgressBar.new() progress_bar.size_flags_horizontal = Control.SIZE_EXPAND_FILL progress_bar.percent_visible = true main_vbox.add_child(progress_bar) # Debug info debug_label = Label.new() debug_label.size_flags_horizontal = Control.SIZE_EXPAND_FILL main_vbox.add_child(debug_label) # Set up signal connections func _setup_signals() -> void: play_button.connect("pressed", _on_play_pressed) pause_button.connect("pressed", _on_pause_pressed) stop_button.connect("pressed", _on_stop_pressed) speed_slider.connect("value_changed", _on_speed_changed) # Set the preview manager func set_preview_manager(manager: PreviewManager) -> void: preview_manager = manager # Connect to preview manager signals if preview_manager: preview_manager.connect("preview_started", _on_preview_started) preview_manager.connect("preview_stopped", _on_preview_stopped) preview_manager.connect("preview_paused", _on_preview_paused) preview_manager.connect("preview_resumed", _on_preview_resumed) preview_manager.connect("preview_progress", _on_preview_progress) preview_manager.connect("node_activated", _on_node_activated) preview_manager.connect("node_completed", _on_node_completed) # Set the graph editor func set_graph_edit(graph_edit: CutsceneGraphEdit) -> void: if preview_manager: preview_manager.setup_preview(graph_edit) # Add preview scene to viewport var preview_scene = preview_manager.get_preview_scene() if preview_scene and preview_scene.get_parent() != preview_viewport: preview_viewport.add_child(preview_scene) # Handle play button press func _on_play_pressed() -> void: if preview_manager: if is_playing: preview_manager.resume_preview() else: preview_manager.start_preview() # Handle pause button press func _on_pause_pressed() -> void: if preview_manager: preview_manager.pause_preview() # Handle stop button press func _on_stop_pressed() -> void: if preview_manager: preview_manager.stop_preview() # Handle speed slider change func _on_speed_changed(value: float) -> void: if preview_manager: preview_manager.set_preview_speed(value) # Handle preview started func _on_preview_started() -> void: is_playing = true play_button.text = "⏸" debug_label.text = "Preview started" # Handle preview stopped func _on_preview_stopped() -> void: is_playing = false play_button.text = "▶" progress_bar.value = 0 debug_label.text = "Preview stopped" # Handle preview paused func _on_preview_paused() -> void: is_playing = false play_button.text = "▶" debug_label.text = "Preview paused" # Handle preview resumed func _on_preview_resumed() -> void: is_playing = true play_button.text = "⏸" debug_label.text = "Preview resumed" # Handle preview progress func _on_preview_progress(progress: float) -> void: progress_bar.value = progress * 100 # Handle node activated func _on_node_activated(node_name: String) -> void: debug_label.text = "Executing: %s" % node_name # Handle node completed func _on_node_completed(node_name: String) -> void: debug_label.text = "Completed: %s" % node_name