diff --git a/Scenes/Filament/filament.gd b/Scenes/Filament/filament.gd index 9fa9dc6..4f19b4d 100644 --- a/Scenes/Filament/filament.gd +++ b/Scenes/Filament/filament.gd @@ -1,7 +1,12 @@ extends Node +signal amount_changed(new_amount) + var filament_data: FilamentData -var amount: float +var amount: float: + set(value): + amount = value + amount_changed.emit(amount) func initialize_filament(data: FilamentData) -> void: diff --git a/Scenes/Printer/printer.gd b/Scenes/Printer/printer.gd index fe6e122..fa29912 100644 --- a/Scenes/Printer/printer.gd +++ b/Scenes/Printer/printer.gd @@ -1,29 +1,32 @@ extends PanelContainer @onready var printer_name_label: Label = $MarginContainer/MainArea/TopInfo/PrinterLabel -@onready var printer_model_label: Label = $MarginContainer/MainArea/PrinterModelLabel +@onready var printer_model_label: Label = $MarginContainer/MainArea/Model/PrinterModelLabel @onready var progress_bar: ProgressBar = $MarginContainer/MainArea/PrintInfo/ProgressBar @onready var select_job: OptionButton = $MarginContainer/MainArea/SelectJob -@onready var select_filament: OptionButton = $MarginContainer/MainArea/PrintInfo/InfoRow1/SelectFilament +@onready var select_filament: OptionButton = $MarginContainer/MainArea/SelectFilament @onready var status_label: RichTextLabel = $MarginContainer/MainArea/TopInfo/StatusLabel -@onready var time_left_label: Label = $MarginContainer/MainArea/PrintInfo/InfoRow2/TimeLeftLabel +@onready var time_left_label: RichTextLabel = $MarginContainer/MainArea/PrintInfo/InfoRow2/TimeLeftLabel @onready var start_button: Button = $MarginContainer/MainArea/Buttons/StartButton @onready var reward_label: RichTextLabel = $MarginContainer/MainArea/PrintInfo/InfoRow2/RewardLabel @onready var quality_label: RichTextLabel = $MarginContainer/MainArea/PrintInfo/InfoRow1/QualityLabel +@onready var loaded_filament_label: RichTextLabel = $MarginContainer/MainArea/PrintInfo/InfoRow1/LoadedFilament var printer_data: PrinterData +# - Job and Filament selection variables var selected_job: JobData var selected_job_index: int -var selected_filament: Node +var selected_filament: Node = null var selected_filament_index: int +# - Printer states var is_printing: bool = false -var time_left: float +var print_failed: bool = false # Variables - Failure calculations -var print_failed: bool = false +var time_left: float var failure_points: Array var failure_point_amount: float = 5 var print_quality: float = 1.0 @@ -38,6 +41,7 @@ func initialize_printer(data: PrinterData) -> void: quality_label.visible = false reward_label.visible = false time_left_label.visible = false + loaded_filament_label.visible = true time_left = 0 status_label.text = 'Status: [color=%s]%s[/color]' % [GameData.hex_white, "Free"] progress_bar.visible = false @@ -49,11 +53,12 @@ func initialize_printer(data: PrinterData) -> void: func _process(delta) -> void: if is_printing: - select_job.visible = false - progress_bar.visible = true - time_left_label.visible = true - quality_label.visible = true - reward_label.visible = true + select_job.hide() + select_filament.hide() + progress_bar.show() + time_left_label.show() + quality_label.show() + reward_label.show() set_status() var text_color = GameData.hex_green @@ -66,10 +71,10 @@ func _process(delta) -> void: var total_time = selected_job.job_time / printer_data.printer_speed var progress = (total_time - time_left) / total_time - selected_filament.amount -= delta + selected_filament.amount -= 0.5 * delta time_left -= delta progress_bar.value = progress - time_left_label.text = 'Time left: %s' % calculate_time_left(time_left) + time_left_label.text = 'Time left: [color=%s]%s[/color]' % [GameData.hex_blue, calculate_time_left(time_left)] if time_left <= 0: var end_reward = selected_job.job_reward * print_quality @@ -99,14 +104,15 @@ func reset_status() -> void: print_failed = false print_quality = 1.0 failure_points = [] - time_left_label.visible = false - quality_label.visible = false - reward_label.visible = false - progress_bar.visible = false + time_left_label.hide() + quality_label.hide() + reward_label.hide() + progress_bar.hide() progress_bar.value = 0 time_left = 0 + select_filament.show() select_job.disabled = false - select_job.visible = true + select_job.show() start_button.disabled = false _on_select_job_pressed() @@ -173,6 +179,7 @@ func _on_select_filament_pressed() -> void: if current_filaments.is_empty(): select_filament.add_item("Out of filament") + loaded_filament_label.text = 'Loaded filament: None' selected_filament = null else: for filament in current_filaments: @@ -186,14 +193,18 @@ func _on_select_filament_pressed() -> void: select_filament.set_item_metadata(current_index, filament) selected_filament = select_filament.get_item_metadata(0) selected_job_index = 0 + selected_filament.amount_changed.connect(_on_filament_amount_changed) + _on_filament_amount_changed(selected_filament.amount) func _on_select_filament_item_selected(index: int) -> void: selected_filament = select_filament.get_item_metadata(index) selected_filament_index = index + selected_filament.amount_changed.connect(_on_filament_amount_changed) + _on_filament_amount_changed(selected_filament.amount) func _on_select_job_pressed() -> void: select_job.clear() - if PlayerData.jobs.is_empty(): # or GameData.filaments_array.is_empty(): + if PlayerData.jobs.is_empty(): select_job.add_item("No jobs accepted") start_button.disabled = true else: @@ -212,6 +223,9 @@ func _on_select_job_item_selected(index: int) -> void: selected_job = select_job.get_item_metadata(index) selected_job_index = index +func _on_filament_amount_changed(new_amount: float) -> void: + loaded_filament_label.text = 'Loaded filament: [color=%s]%s | %.2f g[/color]' % [GameData.hex_blue, selected_filament.filament_data.material, new_amount] + func _on_start_button_pressed() -> void: if select_job.get_item_text(0) == "No jobs accepted": return @@ -229,11 +243,5 @@ func _on_start_button_pressed() -> void: else: PlayerData.jobs.remove_at(selected_job_index) - # Remove filament from filament selection dropdown - if GameData.filaments_array.size() == 1: - GameData.filaments_array.clear() - else: - GameData.filaments_array.remove_at(selected_filament_index) - failure_points = calculate_fail_thresholds() GameData.refresh_printer_dropdown.emit() diff --git a/Scenes/Printer/printer.tscn b/Scenes/Printer/printer.tscn index 5f7eeae..77875d0 100644 --- a/Scenes/Printer/printer.tscn +++ b/Scenes/Printer/printer.tscn @@ -41,8 +41,12 @@ text = "Status: Free" horizontal_alignment = 2 vertical_alignment = 1 -[node name="PrinterModelLabel" type="Label" parent="MarginContainer/MainArea" unique_id=666140345] +[node name="Model" type="HBoxContainer" parent="MarginContainer/MainArea" unique_id=916690802] layout_mode = 2 + +[node name="PrinterModelLabel" type="Label" parent="MarginContainer/MainArea/Model" unique_id=666140345] +layout_mode = 2 +size_flags_horizontal = 3 text = "Printer model" [node name="PrintInfo" type="VBoxContainer" parent="MarginContainer/MainArea" unique_id=1502076264] @@ -50,11 +54,13 @@ layout_mode = 2 [node name="InfoRow1" type="HBoxContainer" parent="MarginContainer/MainArea/PrintInfo" unique_id=1561257387] layout_mode = 2 +size_flags_vertical = 3 -[node name="SelectFilament" type="OptionButton" parent="MarginContainer/MainArea/PrintInfo/InfoRow1" unique_id=1562930238] +[node name="LoadedFilament" type="RichTextLabel" parent="MarginContainer/MainArea/PrintInfo/InfoRow1" unique_id=532233684] layout_mode = 2 -item_count = 1 -popup/item_0/id = 0 +size_flags_horizontal = 3 +bbcode_enabled = true +text = "Loaded filament: XXX | XXX g" [node name="QualityLabel" type="RichTextLabel" parent="MarginContainer/MainArea/PrintInfo/InfoRow1" unique_id=937206053] layout_mode = 2 @@ -63,11 +69,17 @@ bbcode_enabled = true text = "Print quality: ###%" horizontal_alignment = 2 -[node name="InfoRow2" type="HBoxContainer" parent="MarginContainer/MainArea/PrintInfo" unique_id=719967546] +[node name="Label" type="Label" parent="MarginContainer/MainArea/PrintInfo/InfoRow1" unique_id=1388403149] layout_mode = 2 -[node name="TimeLeftLabel" type="Label" parent="MarginContainer/MainArea/PrintInfo/InfoRow2" unique_id=1516591173] +[node name="InfoRow2" type="HBoxContainer" parent="MarginContainer/MainArea/PrintInfo" unique_id=719967546] layout_mode = 2 +size_flags_vertical = 3 + +[node name="TimeLeftLabel" type="RichTextLabel" parent="MarginContainer/MainArea/PrintInfo/InfoRow2" unique_id=948453921] +layout_mode = 2 +size_flags_horizontal = 3 +bbcode_enabled = true text = "Time left: ###s" [node name="RewardLabel" type="RichTextLabel" parent="MarginContainer/MainArea/PrintInfo/InfoRow2" unique_id=700892606] @@ -77,6 +89,9 @@ bbcode_enabled = true text = "Reward: ###€" horizontal_alignment = 2 +[node name="Label" type="Label" parent="MarginContainer/MainArea/PrintInfo/InfoRow2" unique_id=1668802451] +layout_mode = 2 + [node name="ProgressBar" type="ProgressBar" parent="MarginContainer/MainArea/PrintInfo" unique_id=768246659] layout_mode = 2 theme_override_styles/fill = ExtResource("2_dlbos") @@ -103,14 +118,19 @@ size_flags_horizontal = 3 theme_override_styles/hover = ExtResource("3_mmlst") text = "Sell printer" +[node name="SelectFilament" type="OptionButton" parent="MarginContainer/MainArea" unique_id=1562930238] +layout_mode = 2 +item_count = 1 +popup/item_0/id = 0 + [node name="SelectJob" type="OptionButton" parent="MarginContainer/MainArea" unique_id=1500040832] layout_mode = 2 [node name="Timer" type="Timer" parent="." unique_id=425740035] -[connection signal="item_selected" from="MarginContainer/MainArea/PrintInfo/InfoRow1/SelectFilament" to="." method="_on_select_filament_item_selected"] -[connection signal="pressed" from="MarginContainer/MainArea/PrintInfo/InfoRow1/SelectFilament" to="." method="_on_select_filament_pressed"] [connection signal="pressed" from="MarginContainer/MainArea/Buttons/StartButton" to="." method="_on_start_button_pressed"] [connection signal="pressed" from="MarginContainer/MainArea/Buttons/SellButton" to="." method="_on_sell_button_pressed"] +[connection signal="item_selected" from="MarginContainer/MainArea/SelectFilament" to="." method="_on_select_filament_item_selected"] +[connection signal="pressed" from="MarginContainer/MainArea/SelectFilament" to="." method="_on_select_filament_pressed"] [connection signal="item_selected" from="MarginContainer/MainArea/SelectJob" to="." method="_on_select_job_item_selected"] [connection signal="pressed" from="MarginContainer/MainArea/SelectJob" to="." method="_on_select_job_pressed"]