Made filament dropdown. Started to work on using filament while printing

This commit is contained in:
jepsu 2026-06-30 13:49:23 +03:00
parent 55afdc4b33
commit 9fe4485832
3 changed files with 49 additions and 5 deletions

View file

@ -5,7 +5,7 @@ var xp: float = 0:
xp = value xp = value
xp_changed.emit(xp) xp_changed.emit(xp)
var money: float = 200: var money: float = 9999:
set(value): set(value):
money = value money = value
money_changed.emit(money) money_changed.emit(money)

View file

@ -4,15 +4,22 @@ extends PanelContainer
@onready var printer_model_label: Label = $MarginContainer/MainArea/PrinterModelLabel @onready var printer_model_label: Label = $MarginContainer/MainArea/PrinterModelLabel
@onready var progress_bar: ProgressBar = $MarginContainer/MainArea/PrintInfo/ProgressBar @onready var progress_bar: ProgressBar = $MarginContainer/MainArea/PrintInfo/ProgressBar
@onready var select_job: OptionButton = $MarginContainer/MainArea/SelectJob @onready var select_job: OptionButton = $MarginContainer/MainArea/SelectJob
@onready var select_filament: OptionButton = $MarginContainer/MainArea/PrintInfo/InfoRow1/SelectFilament
@onready var status_label: RichTextLabel = $MarginContainer/MainArea/TopInfo/StatusLabel @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: Label = $MarginContainer/MainArea/PrintInfo/InfoRow2/TimeLeftLabel
@onready var start_button: Button = $MarginContainer/MainArea/Buttons/StartButton @onready var start_button: Button = $MarginContainer/MainArea/Buttons/StartButton
@onready var reward_label: RichTextLabel = $MarginContainer/MainArea/PrintInfo/InfoRow2/RewardLabel @onready var reward_label: RichTextLabel = $MarginContainer/MainArea/PrintInfo/InfoRow2/RewardLabel
@onready var quality_label: RichTextLabel = $MarginContainer/MainArea/PrintInfo/InfoRow1/QualityLabel @onready var quality_label: RichTextLabel = $MarginContainer/MainArea/PrintInfo/InfoRow1/QualityLabel
var printer_data: PrinterData var printer_data: PrinterData
var selected_job: JobData var selected_job: JobData
var selected_job_index: int var selected_job_index: int
var selected_filament: FilamentData
var selected_filament_index: int
var is_printing: bool = false var is_printing: bool = false
var time_left: float var time_left: float
@ -36,8 +43,10 @@ func initialize_printer(data: PrinterData) -> void:
status_label.text = 'Status: [color=%s]%s[/color]' % [GameData.hex_white, "Free"] status_label.text = 'Status: [color=%s]%s[/color]' % [GameData.hex_white, "Free"]
progress_bar.visible = false progress_bar.visible = false
progress_bar.value = 0 progress_bar.value = 0
GameData.display_msg('%s printer bought!' % printer_data.printer_manufacturer, GameData.hex_green) GameData.display_msg('%s printer bought!' % printer_data.printer_manufacturer, GameData.hex_green)
_on_select_job_pressed() _on_select_job_pressed()
_on_select_filament_pressed()
func _process(delta) -> void: func _process(delta) -> void:
if is_printing: if is_printing:
@ -58,6 +67,7 @@ func _process(delta) -> void:
var total_time = selected_job.job_time / printer_data.printer_speed var total_time = selected_job.job_time / printer_data.printer_speed
var progress = (total_time - time_left) / total_time var progress = (total_time - time_left) / total_time
selected_filament.amount -= delta
time_left -= delta time_left -= delta
progress_bar.value = progress progress_bar.value = progress
time_left_label.text = 'Time left: %s' % calculate_time_left(time_left) time_left_label.text = 'Time left: %s' % calculate_time_left(time_left)
@ -158,9 +168,31 @@ func _on_sell_button_pressed() -> void:
PlayerData.owned_printers -= 1 PlayerData.owned_printers -= 1
queue_free() queue_free()
func _on_select_filament_pressed() -> void:
select_filament.clear()
print('Click')
print(GameData.filaments_array.is_empty())
if GameData.filaments_array.is_empty():
select_filament.add_item("Out of filament")
#start_button.disabled = true
else:
#start_button.disabled = false
for filament in GameData.filaments_array:
var item_text = '%s | %.2f g' % [filament.material, filament.amount]
select_filament.add_item(item_text)
var current_index = select_filament.item_count - 1
select_filament.set_item_metadata(current_index, filament)
selected_filament = select_filament.get_item_metadata(0)
selected_job_index = 0
func _on_select_filament_item_selected(index: int) -> void:
selected_filament = select_filament.get_item_metadata(index)
selected_filament_index = index
func _on_select_job_pressed() -> void: func _on_select_job_pressed() -> void:
select_job.clear() select_job.clear()
if PlayerData.jobs.is_empty(): if PlayerData.jobs.is_empty() or GameData.filaments_array.is_empty():
select_job.add_item("No jobs accepted") select_job.add_item("No jobs accepted")
start_button.disabled = true start_button.disabled = true
else: else:
@ -182,16 +214,25 @@ func _on_select_job_item_selected(index: int) -> void:
func _on_start_button_pressed() -> void: func _on_start_button_pressed() -> void:
if select_job.get_item_text(0) == "No jobs accepted": if select_job.get_item_text(0) == "No jobs accepted":
return return
if select_filament.get_item_text(0) == "Out of filament":
return
time_left = selected_job.job_time / printer_data.printer_speed time_left = selected_job.job_time / printer_data.printer_speed
progress_bar.value = 0 progress_bar.value = 0
start_button.disabled = true start_button.disabled = true
is_printing = true is_printing = true
# Remove job from job selection dropdown
if PlayerData.jobs.size() == 1: if PlayerData.jobs.size() == 1:
PlayerData.jobs.clear() PlayerData.jobs.clear()
else: else:
PlayerData.jobs.remove_at(selected_job_index) 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() failure_points = calculate_fail_thresholds()
GameData.refresh_printer_dropdown.emit() GameData.refresh_printer_dropdown.emit()

View file

@ -51,9 +51,10 @@ layout_mode = 2
[node name="InfoRow1" type="HBoxContainer" parent="MarginContainer/MainArea/PrintInfo" unique_id=1561257387] [node name="InfoRow1" type="HBoxContainer" parent="MarginContainer/MainArea/PrintInfo" unique_id=1561257387]
layout_mode = 2 layout_mode = 2
[node name="FilamentLabel" type="Label" parent="MarginContainer/MainArea/PrintInfo/InfoRow1" unique_id=181392172] [node name="SelectFilament" type="OptionButton" parent="MarginContainer/MainArea/PrintInfo/InfoRow1" unique_id=1562930238]
layout_mode = 2 layout_mode = 2
text = "Material: ###" item_count = 1
popup/item_0/id = 0
[node name="QualityLabel" type="RichTextLabel" parent="MarginContainer/MainArea/PrintInfo/InfoRow1" unique_id=937206053] [node name="QualityLabel" type="RichTextLabel" parent="MarginContainer/MainArea/PrintInfo/InfoRow1" unique_id=937206053]
layout_mode = 2 layout_mode = 2
@ -107,6 +108,8 @@ layout_mode = 2
[node name="Timer" type="Timer" parent="." unique_id=425740035] [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/StartButton" to="." method="_on_start_button_pressed"]
[connection signal="pressed" from="MarginContainer/MainArea/Buttons/SellButton" to="." method="_on_sell_button_pressed"] [connection signal="pressed" from="MarginContainer/MainArea/Buttons/SellButton" to="." method="_on_sell_button_pressed"]
[connection signal="item_selected" from="MarginContainer/MainArea/SelectJob" to="." method="_on_select_job_item_selected"] [connection signal="item_selected" from="MarginContainer/MainArea/SelectJob" to="." method="_on_select_job_item_selected"]