progress.
This commit is contained in:
186
addons/cutscene_editor/editor/PreviewPanel.gd
Normal file
186
addons/cutscene_editor/editor/PreviewPanel.gd
Normal file
@@ -0,0 +1,186 @@
|
||||
@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
|
||||
Reference in New Issue
Block a user