show playback in free roam mode
This commit is contained in:
parent
143d95a297
commit
9f11ea283f
7 changed files with 419 additions and 22 deletions
|
@ -876,6 +876,15 @@ offset_right = 504.0
|
||||||
offset_bottom = 248.0
|
offset_bottom = 248.0
|
||||||
text = "Open"
|
text = "Open"
|
||||||
|
|
||||||
|
[node name="PleaseWaitText" type="Label" parent="ShowtapeLoadScreen/DialogPanel"]
|
||||||
|
visible = false
|
||||||
|
offset_left = 4.0
|
||||||
|
offset_top = 156.0
|
||||||
|
offset_right = 430.0
|
||||||
|
offset_bottom = 205.0
|
||||||
|
text = "Please wait! Showtape is loading
|
||||||
|
The program may stop responding, but it is still loading"
|
||||||
|
|
||||||
[node name="ShowtapeSaveScreen" type="Control" parent="."]
|
[node name="ShowtapeSaveScreen" type="Control" parent="."]
|
||||||
visible = false
|
visible = false
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
[gd_scene load_steps=14 format=3 uid="uid://cd67bfok34xhy"]
|
[gd_scene load_steps=17 format=3 uid="uid://cd67bfok34xhy"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://pwg37gka2qr4" path="res://Scripts/InGameMenu.gd" id="1_cp535"]
|
[ext_resource type="Script" uid="uid://pwg37gka2qr4" path="res://Scripts/InGameMenu.gd" id="1_cp535"]
|
||||||
[ext_resource type="Theme" uid="uid://dbgs4id7y5d1c" path="res://UI/Themes/Dark.tres" id="1_fxnf3"]
|
[ext_resource type="Theme" uid="uid://dbgs4id7y5d1c" path="res://UI/Themes/Dark.tres" id="1_fxnf3"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cttgtbu1xllwq" path="res://UI/TransportControls/Stop.png" id="3_5t5ap"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bwhgy4u37jmo1" path="res://UI/TransportControls/Pause.png" id="4_j5gkc"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://xllpr3qc064c" path="res://UI/TransportControls/Play.png" id="5_4hvdi"]
|
||||||
|
|
||||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_cp535"]
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_cp535"]
|
||||||
|
|
||||||
|
@ -103,24 +106,68 @@ offset_right = 260.0
|
||||||
offset_bottom = 312.0
|
offset_bottom = 312.0
|
||||||
text = "Exit to Desktop"
|
text = "Exit to Desktop"
|
||||||
|
|
||||||
[node name="ShowLabel" type="Label" parent="."]
|
[node name="TransportControls" type="Panel" parent="."]
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
anchors_preset = -1
|
anchors_preset = 2
|
||||||
anchor_left = 1.0
|
|
||||||
anchor_top = 1.0
|
anchor_top = 1.0
|
||||||
anchor_right = 1.0
|
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
offset_left = -264.0
|
offset_left = 60.0
|
||||||
offset_top = -40.0
|
offset_top = -476.0
|
||||||
offset_right = -8.0
|
offset_right = 324.0
|
||||||
offset_bottom = -8.0
|
offset_bottom = -388.0
|
||||||
grow_horizontal = 0
|
|
||||||
grow_vertical = 0
|
grow_vertical = 0
|
||||||
|
|
||||||
|
[node name="ShowLabel" type="Label" parent="TransportControls"]
|
||||||
|
layout_mode = 1
|
||||||
|
offset_left = 8.0
|
||||||
|
offset_top = 8.0
|
||||||
|
offset_right = 256.0
|
||||||
|
offset_bottom = 40.0
|
||||||
text = "No Show Loaded"
|
text = "No Show Loaded"
|
||||||
horizontal_alignment = 2
|
vertical_alignment = 1
|
||||||
|
text_overrun_behavior = 3
|
||||||
|
|
||||||
|
[node name="TimeLabel" type="Label" parent="TransportControls"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 8.0
|
||||||
|
offset_top = 48.0
|
||||||
|
offset_right = 104.0
|
||||||
|
offset_bottom = 80.0
|
||||||
|
text = "0:00:00:00"
|
||||||
vertical_alignment = 1
|
vertical_alignment = 1
|
||||||
|
|
||||||
|
[node name="StopButton" type="Button" parent="TransportControls"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 132.0
|
||||||
|
offset_top = 44.0
|
||||||
|
offset_right = 172.0
|
||||||
|
offset_bottom = 84.0
|
||||||
|
tooltip_text = "Stop playback and return to frame 0"
|
||||||
|
disabled = true
|
||||||
|
icon = ExtResource("3_5t5ap")
|
||||||
|
|
||||||
|
[node name="PauseButton" type="Button" parent="TransportControls"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 176.0
|
||||||
|
offset_top = 44.0
|
||||||
|
offset_right = 216.0
|
||||||
|
offset_bottom = 84.0
|
||||||
|
tooltip_text = "Pause"
|
||||||
|
disabled = true
|
||||||
|
icon = ExtResource("4_j5gkc")
|
||||||
|
|
||||||
|
[node name="PlayButton" type="Button" parent="TransportControls"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 220.0
|
||||||
|
offset_top = 44.0
|
||||||
|
offset_right = 260.0
|
||||||
|
offset_bottom = 84.0
|
||||||
|
tooltip_text = "Play"
|
||||||
|
disabled = true
|
||||||
|
icon = ExtResource("5_4hvdi")
|
||||||
|
|
||||||
[node name="FlowControlsScreen" type="Control" parent="."]
|
[node name="FlowControlsScreen" type="Control" parent="."]
|
||||||
|
visible = false
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
|
@ -279,13 +326,191 @@ offset_bottom = -4.0
|
||||||
max_value = 0.0
|
max_value = 0.0
|
||||||
step = 1.0
|
step = 1.0
|
||||||
|
|
||||||
|
[node name="LoadShowScreen" type="Control" parent="."]
|
||||||
|
visible = false
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
|
[node name="ColorRect" type="ColorRect" parent="LoadShowScreen"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
color = Color(0.121569, 0.121569, 0.121569, 0.501961)
|
||||||
|
|
||||||
|
[node name="InputEater" type="Button" parent="LoadShowScreen"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
theme_override_styles/focus = SubResource("StyleBoxEmpty_cp535")
|
||||||
|
theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_fxnf3")
|
||||||
|
theme_override_styles/disabled = SubResource("StyleBoxEmpty_esrnp")
|
||||||
|
theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_okjcw")
|
||||||
|
theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_5t5ap")
|
||||||
|
theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_j5gkc")
|
||||||
|
theme_override_styles/hover = SubResource("StyleBoxEmpty_4hvdi")
|
||||||
|
theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_76ga2")
|
||||||
|
theme_override_styles/pressed = SubResource("StyleBoxEmpty_ausu3")
|
||||||
|
theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_b5eqy")
|
||||||
|
theme_override_styles/normal = SubResource("StyleBoxEmpty_x8byx")
|
||||||
|
|
||||||
|
[node name="DialogPanel" type="Panel" parent="LoadShowScreen"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = -1
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
offset_left = -256.0
|
||||||
|
offset_top = -128.0
|
||||||
|
offset_right = 256.0
|
||||||
|
offset_bottom = 128.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
|
[node name="DialogLabel" type="Label" parent="LoadShowScreen/DialogPanel"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = -1
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
offset_left = -96.0
|
||||||
|
offset_top = 4.0
|
||||||
|
offset_right = 96.0
|
||||||
|
offset_bottom = 36.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
text = "Load Showtape"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
vertical_alignment = 1
|
||||||
|
|
||||||
|
[node name="InFileLabel" type="Label" parent="LoadShowScreen/DialogPanel"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 8.0
|
||||||
|
offset_top = 73.0
|
||||||
|
offset_right = 264.0
|
||||||
|
offset_bottom = 105.0
|
||||||
|
text = "File to load"
|
||||||
|
vertical_alignment = 1
|
||||||
|
|
||||||
|
[node name="InFilePath" type="TextEdit" parent="LoadShowScreen/DialogPanel"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = -1
|
||||||
|
anchor_right = 1.0
|
||||||
|
offset_left = 4.0
|
||||||
|
offset_top = 109.0
|
||||||
|
offset_right = -104.0
|
||||||
|
offset_bottom = 145.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
placeholder_text = "File Path"
|
||||||
|
|
||||||
|
[node name="InBrowseButton" type="Button" parent="LoadShowScreen/DialogPanel"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = -1
|
||||||
|
anchor_left = 1.0
|
||||||
|
anchor_right = 1.0
|
||||||
|
offset_left = -100.0
|
||||||
|
offset_top = 109.0
|
||||||
|
offset_right = -4.0
|
||||||
|
offset_bottom = 145.0
|
||||||
|
tooltip_text = "Browse for a file."
|
||||||
|
text = "Browse"
|
||||||
|
|
||||||
|
[node name="CancelButton" type="Button" parent="LoadShowScreen/DialogPanel"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 309.0
|
||||||
|
offset_top = 216.0
|
||||||
|
offset_right = 405.0
|
||||||
|
offset_bottom = 248.0
|
||||||
|
text = "Cancel
|
||||||
|
"
|
||||||
|
|
||||||
|
[node name="OpenButton" type="Button" parent="LoadShowScreen/DialogPanel"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 408.0
|
||||||
|
offset_top = 216.0
|
||||||
|
offset_right = 504.0
|
||||||
|
offset_bottom = 248.0
|
||||||
|
text = "Open"
|
||||||
|
|
||||||
|
[node name="PleaseWaitText" type="Label" parent="LoadShowScreen/DialogPanel"]
|
||||||
|
visible = false
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 4.0
|
||||||
|
offset_top = 156.0
|
||||||
|
offset_right = 430.0
|
||||||
|
offset_bottom = 205.0
|
||||||
|
text = "Please wait! Showtape is loading
|
||||||
|
The program may stop responding, but it is still loading"
|
||||||
|
|
||||||
|
[node name="ExitMenuOverwriteConfirmationDialog" type="ConfirmationDialog" parent="."]
|
||||||
|
auto_translate_mode = 1
|
||||||
|
initial_position = 2
|
||||||
|
size = Vector2i(472, 100)
|
||||||
|
ok_button_text = "Proceed"
|
||||||
|
dialog_text = "Are you sure you want to exit?"
|
||||||
|
cancel_button_text = "Do Not"
|
||||||
|
|
||||||
|
[node name="ExitDesktopOverwriteConfirmationDialog" type="ConfirmationDialog" parent="."]
|
||||||
|
auto_translate_mode = 1
|
||||||
|
initial_position = 2
|
||||||
|
size = Vector2i(472, 100)
|
||||||
|
ok_button_text = "Proceed"
|
||||||
|
dialog_text = "Are you sure you want to exit?"
|
||||||
|
cancel_button_text = "Do Not"
|
||||||
|
|
||||||
|
[node name="FileDoesntExistDialog" type="AcceptDialog" parent="."]
|
||||||
|
auto_translate_mode = 1
|
||||||
|
initial_position = 2
|
||||||
|
dialog_text = "The specified file does not exist."
|
||||||
|
|
||||||
|
[node name="NoFileSpecified" type="AcceptDialog" parent="."]
|
||||||
|
auto_translate_mode = 1
|
||||||
|
initial_position = 2
|
||||||
|
dialog_text = "No File was specified."
|
||||||
|
|
||||||
|
[node name="IncorrectShowtapeDialog" type="AcceptDialog" parent="."]
|
||||||
|
auto_translate_mode = 1
|
||||||
|
initial_position = 2
|
||||||
|
dialog_text = "This showtape is not compatible with the current stage."
|
||||||
|
|
||||||
|
[node name="OpenShowtapeFileDialog" type="FileDialog" parent="."]
|
||||||
|
auto_translate_mode = 1
|
||||||
|
title = "Open a File"
|
||||||
|
initial_position = 2
|
||||||
|
ok_button_text = "Open"
|
||||||
|
dialog_hide_on_ok = true
|
||||||
|
file_mode = 0
|
||||||
|
access = 2
|
||||||
|
filters = PackedStringArray("*.ust")
|
||||||
|
|
||||||
|
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
||||||
|
|
||||||
[connection signal="pressed" from="Buttons/ReturnButton" to="." method="_on_return_button_pressed"]
|
[connection signal="pressed" from="Buttons/ReturnButton" to="." method="_on_return_button_pressed"]
|
||||||
[connection signal="pressed" from="Buttons/LoadShowButton" to="." method="_on_load_show_button_pressed"]
|
[connection signal="pressed" from="Buttons/LoadShowButton" to="." method="_on_load_show_button_pressed"]
|
||||||
[connection signal="pressed" from="Buttons/CosmeticsButton" to="." method="_on_cosmetics_button_pressed"]
|
[connection signal="pressed" from="Buttons/CosmeticsButton" to="." method="_on_cosmetics_button_pressed"]
|
||||||
[connection signal="pressed" from="Buttons/FlowControlsButton" to="." method="_on_flow_controls_button_pressed"]
|
[connection signal="pressed" from="Buttons/FlowControlsButton" to="." method="_on_flow_controls_button_pressed"]
|
||||||
[connection signal="pressed" from="Buttons/ExitMenuButton" to="." method="_on_exit_menu_button_pressed"]
|
[connection signal="pressed" from="Buttons/ExitMenuButton" to="." method="_on_exit_menu_button_pressed"]
|
||||||
[connection signal="pressed" from="Buttons/ExitButton" to="." method="_on_exit_button_pressed"]
|
[connection signal="pressed" from="Buttons/ExitButton" to="." method="_on_exit_button_pressed"]
|
||||||
|
[connection signal="pressed" from="TransportControls/StopButton" to="." method="_on_stop_button_pressed"]
|
||||||
|
[connection signal="pressed" from="TransportControls/PauseButton" to="." method="_on_pause_button_pressed"]
|
||||||
|
[connection signal="pressed" from="TransportControls/PlayButton" to="." method="_on_play_button_pressed"]
|
||||||
[connection signal="pressed" from="FlowControlsScreen/InputEater" to="." method="_on_input_eater_pressed"]
|
[connection signal="pressed" from="FlowControlsScreen/InputEater" to="." method="_on_input_eater_pressed"]
|
||||||
[connection signal="value_changed" from="FlowControlsScreen/DialogPanel/VScrollBar" to="." method="_on_flow_v_scroll_bar_value_changed"]
|
[connection signal="value_changed" from="FlowControlsScreen/DialogPanel/VScrollBar" to="." method="_on_flow_v_scroll_bar_value_changed"]
|
||||||
[connection signal="pressed" from="CosmeticsScreen/InputEater" to="." method="_on_input_eater_pressed"]
|
[connection signal="pressed" from="CosmeticsScreen/InputEater" to="." method="_on_input_eater_pressed"]
|
||||||
[connection signal="value_changed" from="CosmeticsScreen/DialogPanel/VScrollBar" to="." method="_on_cosmetics_v_scroll_bar_value_changed"]
|
[connection signal="value_changed" from="CosmeticsScreen/DialogPanel/VScrollBar" to="." method="_on_cosmetics_v_scroll_bar_value_changed"]
|
||||||
|
[connection signal="pressed" from="LoadShowScreen/InputEater" to="." method="_on_input_eater_pressed"]
|
||||||
|
[connection signal="pressed" from="LoadShowScreen/DialogPanel/InBrowseButton" to="." method="_on_in_browse_button_pressed"]
|
||||||
|
[connection signal="pressed" from="LoadShowScreen/DialogPanel/CancelButton" to="." method="_on_cancel_button_pressed"]
|
||||||
|
[connection signal="pressed" from="LoadShowScreen/DialogPanel/OpenButton" to="." method="_on_open_button_pressed"]
|
||||||
|
[connection signal="confirmed" from="ExitMenuOverwriteConfirmationDialog" to="." method="_on_exit_menu_overwrite_confirmation_dialog_confirmed"]
|
||||||
|
[connection signal="confirmed" from="ExitDesktopOverwriteConfirmationDialog" to="." method="_on_exit_desktop_overwrite_confirmation_dialog_confirmed"]
|
||||||
|
[connection signal="file_selected" from="OpenShowtapeFileDialog" to="." method="_on_open_showtape_file_dialog_file_selected"]
|
||||||
|
|
|
@ -218,16 +218,19 @@ func _on_showtape_load_open_button_pressed() -> void:
|
||||||
if (!FileAccess.file_exists($ShowtapeLoadScreen/DialogPanel/InFilePath.text.strip_edges())):
|
if (!FileAccess.file_exists($ShowtapeLoadScreen/DialogPanel/InFilePath.text.strip_edges())):
|
||||||
$FileDoesntExistDialog.show()
|
$FileDoesntExistDialog.show()
|
||||||
return
|
return
|
||||||
|
$ShowtapeLoadScreen/DialogPanel/PleaseWaitText.visible = true
|
||||||
var file = FileAccess.open($ShowtapeLoadScreen/DialogPanel/InFilePath.text.strip_edges(), FileAccess.READ)
|
var file = FileAccess.open($ShowtapeLoadScreen/DialogPanel/InFilePath.text.strip_edges(), FileAccess.READ)
|
||||||
var content = file.get_as_text()
|
var content = file.get_as_text()
|
||||||
var header = content.split(";")[0].split(",")
|
var header = content.split(";")[0].split(",")
|
||||||
if (header[1] != "2"):
|
if (header[1] != "2"):
|
||||||
$IncorrectShowtapeDialog.dialog_text = "This showtape is not the correct version!"
|
$IncorrectShowtapeDialog.dialog_text = "This showtape is not the correct version!"
|
||||||
$IncorrectShowtapeDialog.show()
|
$IncorrectShowtapeDialog.show()
|
||||||
|
$ShowtapeLoadScreen/DialogPanel/PleaseWaitText.visible = false
|
||||||
return
|
return
|
||||||
if (header[3] != Stages.stages_info[current_stage]["ust_type"]):
|
if (header[3] != Stages.stages_info[current_stage]["ust_type"]):
|
||||||
$IncorrectShowtapeDialog.dialog_text = "This showtape is not compatible with the currently selected stage.\nShowtape stage type: %s\n Current stage type: %s" % [ header[3], Stages.stages_info[current_stage]["ust_type"] ]
|
$IncorrectShowtapeDialog.dialog_text = "This showtape is not compatible with the currently selected stage.\nShowtape stage type: %s\n Current stage type: %s" % [ header[3], Stages.stages_info[current_stage]["ust_type"] ]
|
||||||
$IncorrectShowtapeDialog.show()
|
$IncorrectShowtapeDialog.show()
|
||||||
|
$ShowtapeLoadScreen/DialogPanel/PleaseWaitText.visible = false
|
||||||
return
|
return
|
||||||
show_name = header[2]
|
show_name = header[2]
|
||||||
plot_data(content.split(";")[1])
|
plot_data(content.split(";")[1])
|
||||||
|
@ -237,6 +240,7 @@ func _on_showtape_load_open_button_pressed() -> void:
|
||||||
$MenuBar/EditingLabel.text = "Editing: " + show_name
|
$MenuBar/EditingLabel.text = "Editing: " + show_name
|
||||||
$ShowtapeLoadScreen/DialogPanel/InFilePath.text = ""
|
$ShowtapeLoadScreen/DialogPanel/InFilePath.text = ""
|
||||||
$ShowtapeLoadScreen.visible = false
|
$ShowtapeLoadScreen.visible = false
|
||||||
|
$ShowtapeLoadScreen/DialogPanel/PleaseWaitText.visible = false
|
||||||
|
|
||||||
func _on_load_overwrite_confirmation_dialog_confirmed() -> void:
|
func _on_load_overwrite_confirmation_dialog_confirmed() -> void:
|
||||||
erase_all.emit()
|
erase_all.emit()
|
||||||
|
|
|
@ -3,9 +3,10 @@ extends Control
|
||||||
@export var in_value : float = 1.0
|
@export var in_value : float = 1.0
|
||||||
@export var out_value : float = 1.0
|
@export var out_value : float = 1.0
|
||||||
@export var vis_name : String = ""
|
@export var vis_name : String = ""
|
||||||
|
@export var internal_id: int
|
||||||
|
|
||||||
signal in_value_updated(new_value: float)
|
signal in_value_updated(new_value: float, internalid: int)
|
||||||
signal out_value_updated(new_value: float)
|
signal out_value_updated(new_value: float, internalid: int)
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
$Panel/Label.text = self.vis_name
|
$Panel/Label.text = self.vis_name
|
||||||
|
@ -14,8 +15,8 @@ func _ready() -> void:
|
||||||
|
|
||||||
func _on_in_stepper_value_changed(value: float) -> void:
|
func _on_in_stepper_value_changed(value: float) -> void:
|
||||||
self.in_value = value
|
self.in_value = value
|
||||||
in_value_updated.emit(value)
|
in_value_updated.emit(value, internal_id)
|
||||||
|
|
||||||
func _on_out_stepper_value_changed(value: float) -> void:
|
func _on_out_stepper_value_changed(value: float) -> void:
|
||||||
self.out_value = value
|
self.out_value = value
|
||||||
out_value_updated.emit(value)
|
out_value_updated.emit(value, internal_id)
|
||||||
|
|
|
@ -2,11 +2,21 @@ extends Control
|
||||||
|
|
||||||
var in_flows = []
|
var in_flows = []
|
||||||
var out_flows = []
|
var out_flows = []
|
||||||
|
var prev_frame_held = []
|
||||||
|
var animatables_handles = []
|
||||||
|
|
||||||
var loaded_show = []
|
var transport_enabled = false
|
||||||
|
var playing = false
|
||||||
|
var index = 0
|
||||||
|
|
||||||
|
var loaded_frames = []
|
||||||
|
var show_is_loaded = false
|
||||||
|
var show_name
|
||||||
|
|
||||||
|
var stage
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
var stage = FreeRoamMaps.MapIndex[get_node("../").current_map]["stage"]
|
stage = FreeRoamMaps.MapIndex[get_node("../").current_map]["stage"]
|
||||||
|
|
||||||
var cosmetics_offset = 0
|
var cosmetics_offset = 0
|
||||||
var cosmetics_count = 0
|
var cosmetics_count = 0
|
||||||
|
@ -24,7 +34,7 @@ func _ready() -> void:
|
||||||
$CosmeticsScreen/DialogPanel/InvisibleMask/CosmeticsHandle.add_child(cosmetic_adjustment)
|
$CosmeticsScreen/DialogPanel/InvisibleMask/CosmeticsHandle.add_child(cosmetic_adjustment)
|
||||||
$CosmeticsScreen/DialogPanel/VScrollBar.max_value = cosmetics_count - 1
|
$CosmeticsScreen/DialogPanel/VScrollBar.max_value = cosmetics_count - 1
|
||||||
|
|
||||||
var rows_offset = 0
|
var movement_count = 0
|
||||||
var flows_offset = 0
|
var flows_offset = 0
|
||||||
var flow_count = 0
|
var flow_count = 0
|
||||||
for bit_number in stage["bit_mapping"]:
|
for bit_number in stage["bit_mapping"]:
|
||||||
|
@ -34,8 +44,10 @@ func _ready() -> void:
|
||||||
var in_flow = stage["bit_mapping"][bit_number]["flow_in"]
|
var in_flow = stage["bit_mapping"][bit_number]["flow_in"]
|
||||||
var out_flow = stage["bit_mapping"][bit_number]["flow_out"]
|
var out_flow = stage["bit_mapping"][bit_number]["flow_out"]
|
||||||
|
|
||||||
|
animatables_handles.push_back(get_node("../../" + bot))
|
||||||
in_flows.push_back(in_flow)
|
in_flows.push_back(in_flow)
|
||||||
out_flows.push_back(out_flow)
|
out_flows.push_back(out_flow)
|
||||||
|
prev_frame_held.push_back(false)
|
||||||
|
|
||||||
if (in_flow is not String):
|
if (in_flow is not String):
|
||||||
var flow_control = load("res://Scenes/GUI/Controls/FlowControl.tscn").instantiate()
|
var flow_control = load("res://Scenes/GUI/Controls/FlowControl.tscn").instantiate()
|
||||||
|
@ -45,17 +57,27 @@ func _ready() -> void:
|
||||||
flow_control.in_value = in_flow
|
flow_control.in_value = in_flow
|
||||||
flow_control.out_value = out_flow
|
flow_control.out_value = out_flow
|
||||||
flow_control.anchor_right = 1.0
|
flow_control.anchor_right = 1.0
|
||||||
|
flow_control.internal_id = movement_count
|
||||||
$FlowControlsScreen/DialogPanel/InvisibleMask/FlowHandle.add_child(flow_control)
|
$FlowControlsScreen/DialogPanel/InvisibleMask/FlowHandle.add_child(flow_control)
|
||||||
|
flow_control.in_value_updated.connect(self._update_in_flow)
|
||||||
|
flow_control.out_value_updated.connect(self._update_out_flow)
|
||||||
flows_offset += 44
|
flows_offset += 44
|
||||||
flow_count += 1
|
flow_count += 1
|
||||||
|
movement_count += 1
|
||||||
|
|
||||||
$FlowControlsScreen/DialogPanel/VScrollBar.max_value = flow_count - 1
|
$FlowControlsScreen/DialogPanel/VScrollBar.max_value = flow_count - 1
|
||||||
|
|
||||||
|
func _update_in_flow(new_value: float, internalid: int) -> void:
|
||||||
|
in_flows[internalid] = new_value
|
||||||
|
|
||||||
|
func _update_out_flow(new_value: float, internalid: int) -> void:
|
||||||
|
out_flows[internalid] = new_value
|
||||||
|
|
||||||
func _on_exit_button_pressed() -> void:
|
func _on_exit_button_pressed() -> void:
|
||||||
get_tree().quit()
|
$ExitDesktopOverwriteConfirmationDialog.show()
|
||||||
|
|
||||||
func _on_exit_menu_button_pressed() -> void:
|
func _on_exit_menu_button_pressed() -> void:
|
||||||
get_tree().change_scene_to_file("res://Scenes/GUI/MainMenu.tscn")
|
$ExitMenuOverwriteConfirmationDialog.show()
|
||||||
|
|
||||||
func _on_flow_controls_button_pressed() -> void:
|
func _on_flow_controls_button_pressed() -> void:
|
||||||
$BG.visible = false
|
$BG.visible = false
|
||||||
|
@ -67,6 +89,7 @@ func _on_cosmetics_button_pressed() -> void:
|
||||||
|
|
||||||
func _on_load_show_button_pressed() -> void:
|
func _on_load_show_button_pressed() -> void:
|
||||||
$BG.visible = false
|
$BG.visible = false
|
||||||
|
$LoadShowScreen.visible = true
|
||||||
|
|
||||||
func _on_return_button_pressed() -> void:
|
func _on_return_button_pressed() -> void:
|
||||||
get_node("../").interact = true
|
get_node("../").interact = true
|
||||||
|
@ -77,9 +100,132 @@ func _on_input_eater_pressed() -> void:
|
||||||
$BG.visible = true
|
$BG.visible = true
|
||||||
$CosmeticsScreen.visible = false
|
$CosmeticsScreen.visible = false
|
||||||
$FlowControlsScreen.visible = false
|
$FlowControlsScreen.visible = false
|
||||||
|
$LoadShowScreen.visible = false
|
||||||
|
|
||||||
func _on_cosmetics_v_scroll_bar_value_changed(value: float) -> void:
|
func _on_cosmetics_v_scroll_bar_value_changed(value: float) -> void:
|
||||||
$CosmeticsScreen/DialogPanel/InvisibleMask/CosmeticsHandle.position.y = value * -44
|
$CosmeticsScreen/DialogPanel/InvisibleMask/CosmeticsHandle.position.y = value * -44
|
||||||
|
|
||||||
func _on_flow_v_scroll_bar_value_changed(value: float) -> void:
|
func _on_flow_v_scroll_bar_value_changed(value: float) -> void:
|
||||||
$FlowControlsScreen/DialogPanel/InvisibleMask/FlowHandle.position.y = value * -44
|
$FlowControlsScreen/DialogPanel/InvisibleMask/FlowHandle.position.y = value * -44
|
||||||
|
|
||||||
|
func _on_cancel_button_pressed() -> void:
|
||||||
|
$BG.visible = true
|
||||||
|
$LoadShowScreen.visible = false
|
||||||
|
$LoadShowScreen/DialogPanel/InFilePath.text = ""
|
||||||
|
|
||||||
|
func _on_open_button_pressed() -> void:
|
||||||
|
if (!FileAccess.file_exists($LoadShowScreen/DialogPanel/InFilePath.text.strip_edges())):
|
||||||
|
$FileDoesntExistDialog.show()
|
||||||
|
return
|
||||||
|
$LoadShowScreen/DialogPanel/PleaseWaitText.visible = true
|
||||||
|
var file = FileAccess.open($LoadShowScreen/DialogPanel/InFilePath.text.strip_edges(), FileAccess.READ)
|
||||||
|
var content = file.get_as_text()
|
||||||
|
var header = content.split(";")[0].split(",")
|
||||||
|
if (header[1] != "2"):
|
||||||
|
$IncorrectShowtapeDialog.dialog_text = "This showtape is not the correct version!"
|
||||||
|
$IncorrectShowtapeDialog.show()
|
||||||
|
$LoadShowScreen/DialogPanel/PleaseWaitText.visible = false
|
||||||
|
return
|
||||||
|
if (header[3] != stage["ust_type"]):
|
||||||
|
$IncorrectShowtapeDialog.dialog_text = "This showtape is not compatible with the currently selected stage.\nShowtape stage type: %s\n Current stage type: %s" % [ header[3], stage["ust_type"] ]
|
||||||
|
$IncorrectShowtapeDialog.show()
|
||||||
|
$LoadShowScreen/DialogPanel/PleaseWaitText.visible = false
|
||||||
|
return
|
||||||
|
show_name = header[2]
|
||||||
|
load_data(content.split(";")[1])
|
||||||
|
$AudioStreamPlayer.stream = load_audio_from_buffer(Marshalls.base64_to_raw(content.split(";")[2]))
|
||||||
|
set_transport_enabled(true)
|
||||||
|
show_is_loaded = true
|
||||||
|
$TransportControls/ShowLabel.text = "Editing: " + show_name
|
||||||
|
$LoadShowScreen/DialogPanel/InFilePath.text = ""
|
||||||
|
$LoadShowScreen/DialogPanel/PleaseWaitText.visible = false
|
||||||
|
$LoadShowScreen.visible = false
|
||||||
|
$BG.visible = true
|
||||||
|
|
||||||
|
func _on_in_browse_button_pressed() -> void:
|
||||||
|
$OpenShowtapeFileDialog.show()
|
||||||
|
|
||||||
|
func _on_exit_desktop_overwrite_confirmation_dialog_confirmed() -> void:
|
||||||
|
get_tree().quit()
|
||||||
|
|
||||||
|
func _on_exit_menu_overwrite_confirmation_dialog_confirmed() -> void:
|
||||||
|
get_tree().change_scene_to_file("res://Scenes/GUI/MainMenu.tscn")
|
||||||
|
|
||||||
|
func _on_open_showtape_file_dialog_file_selected(path: String) -> void:
|
||||||
|
$LoadShowScreen/DialogPanel/InFilePath.text = path
|
||||||
|
|
||||||
|
func load_audio_from_buffer(data: PackedByteArray) -> AudioStream:
|
||||||
|
var sound
|
||||||
|
match (data[0]):
|
||||||
|
73:
|
||||||
|
sound = AudioStreamMP3.load_from_buffer(data)
|
||||||
|
82:
|
||||||
|
sound = AudioStreamWAV.load_from_buffer(data)
|
||||||
|
79:
|
||||||
|
sound = AudioStreamOggVorbis.load_from_buffer(data)
|
||||||
|
return sound
|
||||||
|
|
||||||
|
func load_data(data) -> void:
|
||||||
|
for frame_string in data.split(","):
|
||||||
|
if (frame_string == ""): continue
|
||||||
|
var check_frame_split = frame_string.split()
|
||||||
|
check_frame_split.reverse()
|
||||||
|
var unpacked_frame = []
|
||||||
|
for i in stage["bit_mapping"]:
|
||||||
|
if ((check_frame_split[(i - 1) / 4].hex_to_int() & int(pow(2, ((i - 1) % 4)))) == int(pow(2, ((i - 1) % 4)))):
|
||||||
|
unpacked_frame.push_back(true)
|
||||||
|
else: unpacked_frame.push_back(false)
|
||||||
|
loaded_frames.push_back(unpacked_frame)
|
||||||
|
|
||||||
|
func set_transport_enabled(enabled) -> void:
|
||||||
|
$TransportControls/PauseButton.disabled = !enabled
|
||||||
|
$TransportControls/PlayButton.disabled = !enabled
|
||||||
|
$TransportControls/StopButton.disabled = !enabled
|
||||||
|
transport_enabled = true
|
||||||
|
|
||||||
|
func update_time_label() -> void:
|
||||||
|
var frames = index % 60
|
||||||
|
var seconds = floori(index/60.0) % 60
|
||||||
|
var minutes = floori(index/3600.0) % 60
|
||||||
|
var hours = floori(index/216000.0)
|
||||||
|
$TransportControls/TimeLabel.text = "%d:%02d:%02d:%02d" % [hours, minutes, seconds, frames]
|
||||||
|
|
||||||
|
func _on_stop_button_pressed() -> void:
|
||||||
|
playing = false
|
||||||
|
$AudioStreamPlayer.stop()
|
||||||
|
$AudioStreamPlayer.seek(0)
|
||||||
|
index = 0
|
||||||
|
update_time_label()
|
||||||
|
|
||||||
|
func _on_pause_button_pressed() -> void:
|
||||||
|
$AudioStreamPlayer.stop()
|
||||||
|
playing = false
|
||||||
|
|
||||||
|
func _on_play_button_pressed() -> void:
|
||||||
|
$AudioStreamPlayer.play(float(index)/60.0)
|
||||||
|
playing = true
|
||||||
|
|
||||||
|
func _physics_process(_delta: float) -> void:
|
||||||
|
if (playing):
|
||||||
|
var j = 0
|
||||||
|
for i in stage["bit_mapping"]:
|
||||||
|
if (loaded_frames[index][j]):
|
||||||
|
if (!prev_frame_held[j]):
|
||||||
|
animatables_handles[j]._movement_in(stage["bit_mapping"][i]["movement"], in_flows[j])
|
||||||
|
prev_frame_held[j] = true
|
||||||
|
else:
|
||||||
|
if (prev_frame_held[j]):
|
||||||
|
animatables_handles[j]._movement_out(stage["bit_mapping"][i]["movement"], in_flows[j])
|
||||||
|
prev_frame_held[j] = false
|
||||||
|
j+=1
|
||||||
|
index += 1
|
||||||
|
if (index <= 0): _on_stop_button_pressed()
|
||||||
|
update_time_label()
|
||||||
|
|
||||||
|
func _input(event: InputEvent) -> void:
|
||||||
|
if (transport_enabled):
|
||||||
|
if event.is_action_pressed("freeroam_transport_play_pause"):
|
||||||
|
if (playing): _on_pause_button_pressed()
|
||||||
|
else: _on_play_button_pressed()
|
||||||
|
elif event.is_action_pressed("freeroam_transport_stop"):
|
||||||
|
_on_stop_button_pressed()
|
||||||
|
|
|
@ -101,10 +101,10 @@ func update_text() -> void:
|
||||||
if (animatronic == "None"): $Button.text = "%d - Unused (%s)" % [movement_bit, key_binding.as_text() if key_binding.keycode != 0 else "Unbound"]
|
if (animatronic == "None"): $Button.text = "%d - Unused (%s)" % [movement_bit, key_binding.as_text() if key_binding.keycode != 0 else "Unbound"]
|
||||||
else: $Button.text = "%d - %s %s (%s)" % [movement_bit, animatronic, movement_name, key_binding.as_text() if key_binding.keycode != 0 else "Unbound"]
|
else: $Button.text = "%d - %s %s (%s)" % [movement_bit, animatronic, movement_name, key_binding.as_text() if key_binding.keycode != 0 else "Unbound"]
|
||||||
|
|
||||||
func _update_in_flow(new_value: float) -> void:
|
func _update_in_flow(new_value: float, _internalid: int) -> void:
|
||||||
in_flow = new_value
|
in_flow = new_value
|
||||||
|
|
||||||
func _update_out_flow(new_value: float) -> void:
|
func _update_out_flow(new_value: float, _internalid: int) -> void:
|
||||||
out_flow = new_value
|
out_flow = new_value
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
|
|
@ -496,6 +496,18 @@ freeroam_toggle_flashlight={
|
||||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":true,"script":null)
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":true,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
freeroam_transport_play_pause={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":true,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
freeroam_transport_stop={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194317,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":4,"pressure":0.0,"pressed":true,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
[rendering]
|
[rendering]
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue