Visual tweaks and added printing functionality

This commit is contained in:
jepsu 2026-06-26 20:41:22 +03:00
parent ba657ab23a
commit 05df588aa7
12 changed files with 153 additions and 29 deletions

View file

@ -2,7 +2,27 @@ class_name JobData
extends Resource extends Resource
@export var job_name: String @export var job_name: String
@export var job_reward: float @export var job_reward: float:
@export var job_experience: float set(value):
@export var job_amount: int job_reward = value
_generate_job_time()
@export var job_experience: float:
set(value):
job_experience = value
_generate_job_time()
@export var job_amount: int:
set(value):
job_amount = value
_generate_job_time()
@export var job_description: String @export var job_description: String
var job_time: float
var job_material: String = "PLA"
func _init() -> void:
_generate_job_time()
func _generate_job_time() -> void:
var print_time: float = sqrt(job_experience + job_reward) * job_amount
var round_time: float = round(print_time * 100) / 100
job_time = round_time

View file

@ -0,0 +1,9 @@
[gd_resource type="StyleBoxFlat" format=3 uid="uid://csahw36txnewl"]
[resource]
bg_color = Color(0.38039216, 0.5294118, 0.39215687, 0.39215687)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5

View file

@ -0,0 +1,9 @@
[gd_resource type="StyleBoxFlat" format=3 uid="uid://b0kxbbhtsbhcr"]
[resource]
bg_color = Color(0.67741466, 0.38848603, 0.4169196, 0.39215687)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5

View file

@ -3,7 +3,7 @@ extends PanelContainer
signal job_accepted signal job_accepted
var job_data: JobData var job_data: JobData
var job_time: float var job_time: String
var job_material: String var job_material: String
@onready var job_name: Label = $MarginContainer/VBoxContainer/HBoxContainer2/PartName @onready var job_name: Label = $MarginContainer/VBoxContainer/HBoxContainer2/PartName
@onready var job_amount: Label = $MarginContainer/VBoxContainer/HBoxContainer3/PartAmount @onready var job_amount: Label = $MarginContainer/VBoxContainer/HBoxContainer3/PartAmount
@ -20,14 +20,25 @@ func initialize_job(data: JobData) -> void:
job_name.text = job_data.job_name job_name.text = job_data.job_name
job_amount.text = 'Amount: %d pcs' % job_data.job_amount job_amount.text = 'Amount: %d pcs' % job_data.job_amount
job_reward.text = 'Reward: %.2f' % job_data.job_reward job_reward.text = 'Reward: %.2f' % job_data.job_reward
job_experience.text = 'Experience: %.0f xp | ' % job_data.job_experience job_experience.text = 'Experience: %.0f xp' % job_data.job_experience
job_time_label.text = 'Time: %.2f s' % job_time job_time_label.text = 'Time: %s' % job_time
job_material_label.text = '| %s' % job_material job_material_label.text = '| %s' % job_material
func calculate_time() -> String:
var print_time: float = sqrt(job_data.job_experience + job_data.job_reward) * job_data.job_amount
var round_time: float = round(print_time * 100) / 100
var minutes: int = 0
if round_time >= 60:
while round_time >= 60:
minutes += 1
round_time -= 60
return '%d m %.2f s' % [minutes, round_time]
else:
return '%.2f s' % round_time
func _on_accept_job_pressed() -> void: func _on_accept_job_pressed() -> void:
job_accepted.emit(self) job_accepted.emit(self)
func calculate_time() -> float: func _on_skip_job_pressed() -> void:
var print_time: float = sqrt(job_data.job_experience + job_data.job_reward) * job_data.job_amount queue_free()
var round_time: float = round(print_time * 100) / 100
return round_time

View file

@ -1,6 +1,8 @@
[gd_scene format=3 uid="uid://dvfcie8hqcb0"] [gd_scene format=3 uid="uid://dvfcie8hqcb0"]
[ext_resource type="Script" uid="uid://wjam0w8dmel3" path="res://job_card.gd" id="1_vsles"] [ext_resource type="Script" uid="uid://wjam0w8dmel3" path="res://job_card.gd" id="1_vsles"]
[ext_resource type="StyleBox" uid="uid://csahw36txnewl" path="res://Styles/btn_style_box_green_hover.tres" id="2_4nwb4"]
[ext_resource type="StyleBox" uid="uid://b0kxbbhtsbhcr" path="res://Styles/btn_style_box_red_hover.tres" id="3_h28cc"]
[node name="JobCard" type="PanelContainer" unique_id=1714388686] [node name="JobCard" type="PanelContainer" unique_id=1714388686]
offset_right = 40.0 offset_right = 40.0
@ -34,12 +36,19 @@ layout_mode = 2
[node name="PartExperience" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer3" unique_id=1599086122] [node name="PartExperience" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer3" unique_id=1599086122]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3
text = "Experience: 40" text = "Experience: 40"
[node name="PartAmount" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer3" unique_id=1418182269] [node name="PartAmount" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer3" unique_id=1418182269]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3
text = "Amount: 1" text = "Amount: 1"
horizontal_alignment = 1
[node name="AcceptJob" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer3" unique_id=1475207118]
layout_mode = 2
size_flags_horizontal = 3
theme_override_styles/hover = ExtResource("2_4nwb4")
text = "Accept"
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer" unique_id=1428599849] [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer" unique_id=1428599849]
layout_mode = 2 layout_mode = 2
@ -54,11 +63,12 @@ text = "Reward: 5 €"
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
text = "Time: 3 min" text = "Time: 3 min"
horizontal_alignment = 1
[node name="AcceptJob" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer" unique_id=1475207118] [node name="SkipJob" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer" unique_id=1848796901]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
text = "Accept Job" theme_override_styles/hover = ExtResource("3_h28cc")
text = "Skip"
[connection signal="pressed" from="MarginContainer/VBoxContainer/HBoxContainer/AcceptJob" to="." method="_on_accept_job_pressed"] [connection signal="pressed" from="MarginContainer/VBoxContainer/HBoxContainer3/AcceptJob" to="." method="_on_accept_job_pressed"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/HBoxContainer/SkipJob" to="." method="_on_skip_job_pressed"]

View file

@ -4,21 +4,74 @@ 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 status_label: Label = $MarginContainer/MainArea/TopInfo/StatusLabel
@onready var time_left_label: Label = $MarginContainer/MainArea/PrintInfo/TimeLeftLabel
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 is_printing: bool = false
var time_left: float
func initialize_printer(data: PrinterData) -> void: func initialize_printer(data: PrinterData) -> void:
printer_data = data printer_data = data
#print("Creating bought printer: " + printer_data.printer_manufacturer)
printer_name_label.text = printer_data.printer_manufacturer printer_name_label.text = printer_data.printer_manufacturer
printer_model_label.text = printer_data.printer_type printer_model_label.text = printer_data.printer_type
time_left_label.visible = false
set_status()
progress_bar.visible = false
progress_bar.value = 0 progress_bar.value = 0
_on_select_job_pressed() _on_select_job_pressed()
func start_job() -> void: func _process(delta) -> void:
pass if is_printing:
select_job.disabled = true
progress_bar.visible = true
time_left_label.visible = true
set_status()
var total_time = selected_job.job_time
var progress = (total_time - time_left) / total_time
#print('Job time: %.2f' % total_time)
#print('Time left: %.2f' % time_left)
#print('Progress: %.2f' % progress)
time_left -= delta
progress_bar.value = progress
time_left_label.text = 'Time left: %s' % calculate_time_left(time_left)
if time_left <= 0:
PlayerData.give_money.emit(selected_job.job_reward)
PlayerData.give_experience.emit(selected_job.job_experience)
if PlayerData.jobs.size() == 1:
PlayerData.jobs.clear()
else:
PlayerData.jobs.remove_at(selected_job_index)
reset_status()
func reset_status() -> void:
is_printing = false
_on_select_job_pressed()
set_status()
time_left_label.visible = false
progress_bar.visible = false
progress_bar.value = 0
select_job.disabled = false
func set_status() -> void:
if is_printing:
status_label.text = 'Status: Printing'
else:
status_label.text = 'Status: Free'
func calculate_time_left(time) -> String:
var minutes: int = 0
if time >= 60:
while time >= 60:
minutes += 1
time -= 60
return '%d m %.2f s' % [minutes, time]
else:
return '%.2f s' % time
func _on_sell_button_pressed() -> void: func _on_sell_button_pressed() -> void:
PlayerData.give_money.emit(printer_data.printer_price * PlayerData.sell_multiplier) PlayerData.give_money.emit(printer_data.printer_price * PlayerData.sell_multiplier)
@ -41,7 +94,8 @@ 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":
print("No job selected") print("No job selected")
else: else:
start_job() time_left = selected_job.job_time
is_printing = true
#PlayerData.give_money.emit(selected_job.job_reward) #PlayerData.give_money.emit(selected_job.job_reward)
#if PlayerData.jobs.size() == 1: #if PlayerData.jobs.size() == 1:
@ -53,4 +107,3 @@ func _on_start_button_pressed() -> void:
func _on_select_job_item_selected(index: int) -> void: func _on_select_job_item_selected(index: int) -> void:
selected_job = select_job.get_item_metadata(index) selected_job = select_job.get_item_metadata(index)
selected_job_index = index selected_job_index = index
print(selected_job)

View file

@ -1,6 +1,7 @@
[gd_scene format=3 uid="uid://33ctlyrpibs3"] [gd_scene format=3 uid="uid://33ctlyrpibs3"]
[ext_resource type="Script" uid="uid://dj7pngpg53qdb" path="res://printer.gd" id="1_jhpce"] [ext_resource type="Script" uid="uid://dj7pngpg53qdb" path="res://printer.gd" id="1_jhpce"]
[ext_resource type="StyleBox" uid="uid://csahw36txnewl" path="res://Styles/btn_style_box_green_hover.tres" id="2_tnxmo"]
[node name="Printer" type="PanelContainer" unique_id=1372437203] [node name="Printer" type="PanelContainer" unique_id=1372437203]
custom_minimum_size = Vector2(0, 150) custom_minimum_size = Vector2(0, 150)
@ -45,13 +46,13 @@ layout_mode = 2
layout_mode = 2 layout_mode = 2
text = "Material: PLA" text = "Material: PLA"
[node name="JobLabel" type="Label" parent="MarginContainer/MainArea/PrintInfo" unique_id=1516591173] [node name="TimeLeftLabel" type="Label" parent="MarginContainer/MainArea/PrintInfo" unique_id=1516591173]
layout_mode = 2 layout_mode = 2
text = "Time left: 15.0" text = "Time left: 15.0"
[node name="ProgressBar" type="ProgressBar" parent="MarginContainer/MainArea/PrintInfo" unique_id=768246659] [node name="ProgressBar" type="ProgressBar" parent="MarginContainer/MainArea/PrintInfo" unique_id=768246659]
layout_mode = 2 layout_mode = 2
value = 67.0 max_value = 1.0
[node name="Buttons" type="HBoxContainer" parent="MarginContainer/MainArea" unique_id=248340191] [node name="Buttons" type="HBoxContainer" parent="MarginContainer/MainArea" unique_id=248340191]
layout_mode = 2 layout_mode = 2
@ -59,6 +60,7 @@ layout_mode = 2
[node name="StartButton" type="Button" parent="MarginContainer/MainArea/Buttons" unique_id=1943803675] [node name="StartButton" type="Button" parent="MarginContainer/MainArea/Buttons" unique_id=1943803675]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
theme_override_styles/hover = ExtResource("2_tnxmo")
text = "Start print" text = "Start print"
[node name="UpgradeButton" type="Button" parent="MarginContainer/MainArea/Buttons" unique_id=765929805] [node name="UpgradeButton" type="Button" parent="MarginContainer/MainArea/Buttons" unique_id=765929805]

View file

@ -17,6 +17,11 @@ func initialize_printer(data: PrinterData) -> void:
printer_speed.text = "Speed: " + str(printer_data.printer_speed) + "/5" printer_speed.text = "Speed: " + str(printer_data.printer_speed) + "/5"
printer_quality.text = "Quality: " + str(printer_data.printer_quality) + "/5" printer_quality.text = "Quality: " + str(printer_data.printer_quality) + "/5"
printer_price.text = "Price: " + str(printer_data.printer_price) + "" printer_price.text = "Price: " + str(printer_data.printer_price) + ""
if PlayerData.money > printer_data.printer_price:
buy_button.disabled = false
else:
buy_button.disabled = true
func _on_buy_button_pressed() -> void: func _on_buy_button_pressed() -> void:
buy_printer.emit(self) buy_printer.emit(self)

View file

@ -13,5 +13,4 @@ func _ready() -> void:
new_printer.buy_printer.connect(_buy_printer_pressed) new_printer.buy_printer.connect(_buy_printer_pressed)
func _buy_printer_pressed(bought_printer): func _buy_printer_pressed(bought_printer):
#print("Printer model: " + bought_printer.printer_data.printer_type)
printer_purchase_requested.emit(bought_printer.printer_data) printer_purchase_requested.emit(bought_printer.printer_data)

View file

@ -1,6 +1,7 @@
[gd_scene format=3 uid="uid://bdpqvwvwmaian"] [gd_scene format=3 uid="uid://bdpqvwvwmaian"]
[ext_resource type="Script" uid="uid://ttfk4n2fkifj" path="res://printer_card.gd" id="1_5nuqd"] [ext_resource type="Script" uid="uid://ttfk4n2fkifj" path="res://printer_card.gd" id="1_5nuqd"]
[ext_resource type="StyleBox" uid="uid://csahw36txnewl" path="res://Styles/btn_style_box_green_hover.tres" id="2_22or4"]
[node name="PrinterCard" type="PanelContainer" unique_id=1714388686] [node name="PrinterCard" type="PanelContainer" unique_id=1714388686]
offset_right = 40.0 offset_right = 40.0
@ -54,6 +55,7 @@ text = "Price: 500 €"
[node name="BuyButton" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer" unique_id=1475207118] [node name="BuyButton" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer" unique_id=1475207118]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
theme_override_styles/hover = ExtResource("2_22or4")
text = "Buy" text = "Buy"
[connection signal="pressed" from="MarginContainer/VBoxContainer/HBoxContainer/BuyButton" to="." method="_on_buy_button_pressed"] [connection signal="pressed" from="MarginContainer/VBoxContainer/HBoxContainer/BuyButton" to="." method="_on_buy_button_pressed"]

4
ui.gd
View file

@ -18,7 +18,6 @@ func _ready() -> void:
func generate_job(): func generate_job():
var job_count = %JobContainer.get_children() var job_count = %JobContainer.get_children()
#print("Current jobs: " + str(job_count.size()))
if not job_count.size() >= job_limit: if not job_count.size() >= job_limit:
var random_job: JobData = jobs_array.pick_random() var random_job: JobData = jobs_array.pick_random()
@ -39,8 +38,6 @@ func _on_money_changed(money):
func _on_job_accepted_pressed(accepted_job): func _on_job_accepted_pressed(accepted_job):
print("Job accepted") print("Job accepted")
#PlayerData.give_experience.emit(accepted_job.job_data.job_experience)
#PlayerData.give_money.emit(accepted_job.job_data.job_reward)
PlayerData.jobs.append(accepted_job.job_data) PlayerData.jobs.append(accepted_job.job_data)
print(PlayerData.jobs[0].job_name) print(PlayerData.jobs[0].job_name)
@ -52,7 +49,6 @@ func _on_job_spawner_timeout() -> void:
generate_job() generate_job()
func _on_printers_printer_purchase_requested(printer_data: PrinterData) -> void: func _on_printers_printer_purchase_requested(printer_data: PrinterData) -> void:
#print("Signal reached UI: " + printer_data.printer_manufacturer)
if PlayerData.try_purchase(printer_data.printer_price): if PlayerData.try_purchase(printer_data.printer_price):
%Money.text = "Money: " + str(PlayerData.money) + "" %Money.text = "Money: " + str(PlayerData.money) + ""
var new_printer = PRINTER.instantiate() var new_printer = PRINTER.instantiate()

12
ui.tscn
View file

@ -20,6 +20,14 @@
[ext_resource type="Resource" uid="uid://b6x4k150ugskw" path="res://Resources/Printers/printer_creality_ender_3.tres" id="17_vkygq"] [ext_resource type="Resource" uid="uid://b6x4k150ugskw" path="res://Resources/Printers/printer_creality_ender_3.tres" id="17_vkygq"]
[ext_resource type="Resource" uid="uid://b4v47rpo27kec" path="res://Resources/Printers/printer_prusa_mk4s.tres" id="18_sosvr"] [ext_resource type="Resource" uid="uid://b4v47rpo27kec" path="res://Resources/Printers/printer_prusa_mk4s.tres" id="18_sosvr"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8fchy"]
bg_color = Color(0.3529412, 0.47843137, 0.7372549, 0.47058824)
corner_radius_top_left = 6
corner_radius_top_right = 6
corner_radius_bottom_right = 6
corner_radius_bottom_left = 6
corner_detail = 6
[node name="UI" type="Control" unique_id=256887379] [node name="UI" type="Control" unique_id=256887379]
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
@ -80,7 +88,8 @@ horizontal_alignment = 2
unique_name_in_owner = true unique_name_in_owner = true
custom_minimum_size = Vector2(0, 5) custom_minimum_size = Vector2(0, 5)
layout_mode = 2 layout_mode = 2
value = 67.0 theme_override_styles/fill = SubResource("StyleBoxFlat_8fchy")
value = 65.27
show_percentage = false show_percentage = false
[node name="MainArea" type="HBoxContainer" parent="VBoxContainer" unique_id=352001241] [node name="MainArea" type="HBoxContainer" parent="VBoxContainer" unique_id=352001241]
@ -193,7 +202,6 @@ visible = false
layout_mode = 2 layout_mode = 2
[node name="JobSpawner" type="Timer" parent="." unique_id=1696213535] [node name="JobSpawner" type="Timer" parent="." unique_id=1696213535]
wait_time = 3.0
autostart = true autostart = true
[connection signal="pressed" from="VBoxContainer/MainArea/RightColumn/TabSwitcher/TabButtons/JobsTabButton" to="VBoxContainer/MainArea/RightColumn/TabSwitcher" method="_on_jobs_tab_button_pressed"] [connection signal="pressed" from="VBoxContainer/MainArea/RightColumn/TabSwitcher/TabButtons/JobsTabButton" to="VBoxContainer/MainArea/RightColumn/TabSwitcher" method="_on_jobs_tab_button_pressed"]