186 lines
5.4 KiB
GDScript
186 lines
5.4 KiB
GDScript
@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 |