Visual tweaks and added printing functionality
This commit is contained in:
parent
ba657ab23a
commit
05df588aa7
12 changed files with 153 additions and 29 deletions
|
|
@ -2,7 +2,27 @@ class_name JobData
|
|||
extends Resource
|
||||
|
||||
@export var job_name: String
|
||||
@export var job_reward: float
|
||||
@export var job_experience: float
|
||||
@export var job_amount: int
|
||||
@export var job_reward: float:
|
||||
set(value):
|
||||
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
|
||||
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
|
||||
|
|
|
|||
9
Styles/btn_style_box_green_hover.tres
Normal file
9
Styles/btn_style_box_green_hover.tres
Normal 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
|
||||
9
Styles/btn_style_box_red_hover.tres
Normal file
9
Styles/btn_style_box_red_hover.tres
Normal 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
|
||||
25
job_card.gd
25
job_card.gd
|
|
@ -3,7 +3,7 @@ extends PanelContainer
|
|||
signal job_accepted
|
||||
|
||||
var job_data: JobData
|
||||
var job_time: float
|
||||
var job_time: String
|
||||
var job_material: String
|
||||
@onready var job_name: Label = $MarginContainer/VBoxContainer/HBoxContainer2/PartName
|
||||
@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_amount.text = 'Amount: %d pcs' % job_data.job_amount
|
||||
job_reward.text = 'Reward: %.2f €' % job_data.job_reward
|
||||
job_experience.text = 'Experience: %.0f xp | ' % job_data.job_experience
|
||||
job_time_label.text = 'Time: %.2f s' % job_time
|
||||
job_experience.text = 'Experience: %.0f xp' % job_data.job_experience
|
||||
job_time_label.text = 'Time: %s' % job_time
|
||||
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:
|
||||
job_accepted.emit(self)
|
||||
|
||||
func calculate_time() -> float:
|
||||
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
|
||||
return round_time
|
||||
func _on_skip_job_pressed() -> void:
|
||||
queue_free()
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
[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="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]
|
||||
offset_right = 40.0
|
||||
|
|
@ -34,12 +36,19 @@ layout_mode = 2
|
|||
|
||||
[node name="PartExperience" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer3" unique_id=1599086122]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "Experience: 40"
|
||||
|
||||
[node name="PartAmount" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer3" unique_id=1418182269]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
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]
|
||||
layout_mode = 2
|
||||
|
|
@ -54,11 +63,12 @@ text = "Reward: 5 €"
|
|||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
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
|
||||
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"]
|
||||
|
|
|
|||
63
printer.gd
63
printer.gd
|
|
@ -4,21 +4,74 @@ extends PanelContainer
|
|||
@onready var printer_model_label: Label = $MarginContainer/MainArea/PrinterModelLabel
|
||||
@onready var progress_bar: ProgressBar = $MarginContainer/MainArea/PrintInfo/ProgressBar
|
||||
@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 selected_job: JobData
|
||||
var selected_job_index: int
|
||||
var is_printing: bool = false
|
||||
var time_left: float
|
||||
|
||||
func initialize_printer(data: PrinterData) -> void:
|
||||
printer_data = data
|
||||
#print("Creating bought printer: " + printer_data.printer_manufacturer)
|
||||
printer_name_label.text = printer_data.printer_manufacturer
|
||||
printer_model_label.text = printer_data.printer_type
|
||||
time_left_label.visible = false
|
||||
set_status()
|
||||
progress_bar.visible = false
|
||||
progress_bar.value = 0
|
||||
_on_select_job_pressed()
|
||||
|
||||
func start_job() -> void:
|
||||
pass
|
||||
func _process(delta) -> void:
|
||||
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:
|
||||
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":
|
||||
print("No job selected")
|
||||
else:
|
||||
start_job()
|
||||
time_left = selected_job.job_time
|
||||
is_printing = true
|
||||
|
||||
#PlayerData.give_money.emit(selected_job.job_reward)
|
||||
#if PlayerData.jobs.size() == 1:
|
||||
|
|
@ -53,4 +107,3 @@ func _on_start_button_pressed() -> void:
|
|||
func _on_select_job_item_selected(index: int) -> void:
|
||||
selected_job = select_job.get_item_metadata(index)
|
||||
selected_job_index = index
|
||||
print(selected_job)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
[gd_scene format=3 uid="uid://33ctlyrpibs3"]
|
||||
|
||||
[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]
|
||||
custom_minimum_size = Vector2(0, 150)
|
||||
|
|
@ -45,13 +46,13 @@ layout_mode = 2
|
|||
layout_mode = 2
|
||||
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
|
||||
text = "Time left: 15.0"
|
||||
|
||||
[node name="ProgressBar" type="ProgressBar" parent="MarginContainer/MainArea/PrintInfo" unique_id=768246659]
|
||||
layout_mode = 2
|
||||
value = 67.0
|
||||
max_value = 1.0
|
||||
|
||||
[node name="Buttons" type="HBoxContainer" parent="MarginContainer/MainArea" unique_id=248340191]
|
||||
layout_mode = 2
|
||||
|
|
@ -59,6 +60,7 @@ layout_mode = 2
|
|||
[node name="StartButton" type="Button" parent="MarginContainer/MainArea/Buttons" unique_id=1943803675]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
theme_override_styles/hover = ExtResource("2_tnxmo")
|
||||
text = "Start print"
|
||||
|
||||
[node name="UpgradeButton" type="Button" parent="MarginContainer/MainArea/Buttons" unique_id=765929805]
|
||||
|
|
|
|||
|
|
@ -18,6 +18,11 @@ func initialize_printer(data: PrinterData) -> void:
|
|||
printer_quality.text = "Quality: " + str(printer_data.printer_quality) + "/5"
|
||||
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:
|
||||
buy_printer.emit(self)
|
||||
print("Shop tab printer clicked: " + self.printer_data.printer_manufacturer)
|
||||
|
|
|
|||
|
|
@ -13,5 +13,4 @@ func _ready() -> void:
|
|||
new_printer.buy_printer.connect(_buy_printer_pressed)
|
||||
|
||||
func _buy_printer_pressed(bought_printer):
|
||||
#print("Printer model: " + bought_printer.printer_data.printer_type)
|
||||
printer_purchase_requested.emit(bought_printer.printer_data)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
[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="StyleBox" uid="uid://csahw36txnewl" path="res://Styles/btn_style_box_green_hover.tres" id="2_22or4"]
|
||||
|
||||
[node name="PrinterCard" type="PanelContainer" unique_id=1714388686]
|
||||
offset_right = 40.0
|
||||
|
|
@ -54,6 +55,7 @@ text = "Price: 500 €"
|
|||
[node name="BuyButton" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer" unique_id=1475207118]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
theme_override_styles/hover = ExtResource("2_22or4")
|
||||
text = "Buy"
|
||||
|
||||
[connection signal="pressed" from="MarginContainer/VBoxContainer/HBoxContainer/BuyButton" to="." method="_on_buy_button_pressed"]
|
||||
|
|
|
|||
4
ui.gd
4
ui.gd
|
|
@ -18,7 +18,6 @@ func _ready() -> void:
|
|||
|
||||
func generate_job():
|
||||
var job_count = %JobContainer.get_children()
|
||||
#print("Current jobs: " + str(job_count.size()))
|
||||
|
||||
if not job_count.size() >= job_limit:
|
||||
var random_job: JobData = jobs_array.pick_random()
|
||||
|
|
@ -39,8 +38,6 @@ func _on_money_changed(money):
|
|||
|
||||
func _on_job_accepted_pressed(accepted_job):
|
||||
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)
|
||||
print(PlayerData.jobs[0].job_name)
|
||||
|
||||
|
|
@ -52,7 +49,6 @@ func _on_job_spawner_timeout() -> void:
|
|||
generate_job()
|
||||
|
||||
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):
|
||||
%Money.text = "Money: " + str(PlayerData.money) + "€"
|
||||
var new_printer = PRINTER.instantiate()
|
||||
|
|
|
|||
12
ui.tscn
12
ui.tscn
|
|
@ -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://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]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
|
|
@ -80,7 +88,8 @@ horizontal_alignment = 2
|
|||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(0, 5)
|
||||
layout_mode = 2
|
||||
value = 67.0
|
||||
theme_override_styles/fill = SubResource("StyleBoxFlat_8fchy")
|
||||
value = 65.27
|
||||
show_percentage = false
|
||||
|
||||
[node name="MainArea" type="HBoxContainer" parent="VBoxContainer" unique_id=352001241]
|
||||
|
|
@ -193,7 +202,6 @@ visible = false
|
|||
layout_mode = 2
|
||||
|
||||
[node name="JobSpawner" type="Timer" parent="." unique_id=1696213535]
|
||||
wait_time = 3.0
|
||||
autostart = true
|
||||
|
||||
[connection signal="pressed" from="VBoxContainer/MainArea/RightColumn/TabSwitcher/TabButtons/JobsTabButton" to="VBoxContainer/MainArea/RightColumn/TabSwitcher" method="_on_jobs_tab_button_pressed"]
|
||||
|
|
|
|||
Loading…
Reference in a new issue