Finished adding Filament inventory and usage during printing
This commit is contained in:
parent
e4cff6f2b9
commit
d112e0c105
3 changed files with 67 additions and 34 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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"]
|
||||
|
|
|
|||
Loading…
Reference in a new issue