Compare commits

..

17 commits
V0.2 ... main

Author SHA1 Message Date
d112e0c105 Finished adding Filament inventory and usage during printing 2026-07-01 17:17:19 +03:00
e4cff6f2b9 Added filament management in printer 2026-07-01 11:59:59 +03:00
9fe4485832 Made filament dropdown. Started to work on using filament while printing 2026-06-30 13:49:23 +03:00
55afdc4b33 Reworked failure condition while printin. Added filaments 2026-06-30 13:08:37 +03:00
5562774716 Merge branch 'development' 2026-06-30 11:04:18 +03:00
8d8e108382 Added message system 2026-06-30 11:03:20 +03:00
807c52a9cc Started to add filament shop, changed printer labels to RichTextLabels to add visuals 2026-06-30 10:03:51 +03:00
d6fd60d3e8 Added failure possibility and print quality lowering possibility 2026-06-29 23:51:46 +03:00
8758a3ddfc Started to work on world scene: Added tile generation with button, started to tweak the visuals 2026-06-29 19:59:59 +03:00
ca3f2aba83 Fixed: Jobs were not loading in release. Completely reworked resource management 2026-06-28 22:31:12 +03:00
a540ae1f83 Made tab buttons more dynamic 2026-06-28 22:08:47 +03:00
b918871be2 Added owned printers to playerdata 2026-06-28 21:50:47 +03:00
da014a5341 Added level requirement for printers 2026-06-28 21:27:59 +03:00
8fd7d0131c Changed level up to exponential growth 2026-06-28 21:21:01 +03:00
81610a3cb0 Deleted Releases directory from git that got accidentally added 2026-06-28 20:34:16 +03:00
8d50ac076f Updated .gitignore 2026-06-28 20:32:14 +03:00
f2b5be763d Deleted godot git plugin 2026-06-28 20:31:03 +03:00
55 changed files with 1050 additions and 1527 deletions

View file

@ -0,0 +1,13 @@
[gd_resource type="Resource" script_class="FilamentData" format=3 uid="uid://gmby6rjd07wi"]
[ext_resource type="Script" uid="uid://cim8peoxip2si" path="res://Resources/filament_data.gd" id="1_uvxfr"]
[resource]
script = ExtResource("1_uvxfr")
material = "ABS - Small"
reward_multiplier = 1.0
xp_multiplier = 1.0
amount = 200.0
price = 4.18
description = "ABS filament for industrial applications"
metadata/_custom_type_script = "uid://cim8peoxip2si"

View file

@ -0,0 +1,14 @@
[gd_resource type="Resource" script_class="FilamentData" format=3 uid="uid://gm0cqq0ggri"]
[ext_resource type="Script" uid="uid://cim8peoxip2si" path="res://Resources/filament_data.gd" id="1_ws0fq"]
[resource]
script = ExtResource("1_ws0fq")
material = "ASA-CF - Small"
reward_multiplier = 1.0
xp_multiplier = 1.0
amount = 200.0
price = 7.74
description = "Carbon fibre-reinforced ASA to withstand extreme performance"
level_req = 3
metadata/_custom_type_script = "uid://cim8peoxip2si"

View file

@ -0,0 +1,13 @@
[gd_resource type="Resource" script_class="FilamentData" format=3 uid="uid://cwtaryim1yjnu"]
[ext_resource type="Script" uid="uid://cim8peoxip2si" path="res://Resources/filament_data.gd" id="1_02q3j"]
[resource]
script = ExtResource("1_02q3j")
material = "ASA - Small"
reward_multiplier = 1.0
xp_multiplier = 1.0
amount = 200.0
price = 5.3
description = "Weather and UV resistant ASA filament"
metadata/_custom_type_script = "uid://cim8peoxip2si"

View file

@ -0,0 +1,14 @@
[gd_resource type="Resource" script_class="FilamentData" format=3 uid="uid://vuby4u37cu42"]
[ext_resource type="Script" uid="uid://cim8peoxip2si" path="res://Resources/filament_data.gd" id="1_w3dqi"]
[resource]
script = ExtResource("1_w3dqi")
material = "PETG - Small"
reward_multiplier = 1.0
xp_multiplier = 1.0
amount = 200.0
price = 5.23
description = "PETG filament for robust & precise prints"
level_req = 2
metadata/_custom_type_script = "uid://cim8peoxip2si"

View file

@ -0,0 +1,13 @@
[gd_resource type="Resource" script_class="FilamentData" format=3 uid="uid://dvu3hbx3tn0nx"]
[ext_resource type="Script" uid="uid://cim8peoxip2si" path="res://Resources/filament_data.gd" id="1_7duty"]
[resource]
script = ExtResource("1_7duty")
material = "PLA"
reward_multiplier = 1.0
xp_multiplier = 1.0
amount = 200.0
price = 4.18
description = "Filament with reduced plastic content"
metadata/_custom_type_script = "uid://cim8peoxip2si"

View file

@ -0,0 +1,19 @@
[gd_resource type="Resource" script_class="JobList" format=3 uid="uid://buvi8m3atoavu"]
[ext_resource type="Script" uid="uid://bp1c3unpg2ndn" path="res://Resources/job_data.gd" id="1_nybwa"]
[ext_resource type="Resource" uid="uid://0gyhxwe47tby" path="res://Resources/Jobs/job_action_figure.tres" id="2_7dwwk"]
[ext_resource type="Script" uid="uid://dmfdc1mnd4dy5" path="res://Resources/job_list.gd" id="2_8lx8r"]
[ext_resource type="Resource" uid="uid://cuff7udubpjgk" path="res://Resources/Jobs/job_ad_keychain.tres" id="3_s4yce"]
[ext_resource type="Resource" uid="uid://ceck7mpy7qnae" path="res://Resources/Jobs/job_cafe_cookie_stamp.tres" id="4_eriey"]
[ext_resource type="Resource" uid="uid://5ag48elqtpg7" path="res://Resources/Jobs/job_college_electronic_box.tres" id="5_gkqel"]
[ext_resource type="Resource" uid="uid://dg2ffm3feksrm" path="res://Resources/Jobs/job_cup_holder_seat.tres" id="6_d2ue3"]
[ext_resource type="Resource" uid="uid://c3l3haowyo1yc" path="res://Resources/Jobs/job_drone_chassis.tres" id="7_nayax"]
[ext_resource type="Resource" uid="uid://0wacf77o0vq1" path="res://Resources/Jobs/job_headphone_stand_tableside.tres" id="8_1p1kw"]
[ext_resource type="Resource" uid="uid://dt1hgcy140fpt" path="res://Resources/Jobs/job_modern_cabinet_handle.tres" id="9_cfo7u"]
[ext_resource type="Resource" uid="uid://b0akomrm6gavw" path="res://Resources/Jobs/job_rc_car_control_arm.tres" id="10_awcc0"]
[ext_resource type="Resource" uid="uid://dy48odm1apexk" path="res://Resources/Jobs/job_zipper_pull_tab.tres" id="11_mr4tb"]
[resource]
script = ExtResource("2_8lx8r")
jobs = Array[ExtResource("1_nybwa")]([ExtResource("2_7dwwk"), ExtResource("3_s4yce"), ExtResource("4_eriey"), ExtResource("5_gkqel"), ExtResource("6_d2ue3"), ExtResource("7_nayax"), ExtResource("8_1p1kw"), ExtResource("9_cfo7u"), ExtResource("10_awcc0"), ExtResource("11_mr4tb")])
metadata/_custom_type_script = "uid://dmfdc1mnd4dy5"

View file

@ -8,5 +8,6 @@ printer_manufacturer = "Bambulab"
printer_type = "A1 Mini" printer_type = "A1 Mini"
printer_speed = 4.0 printer_speed = 4.0
printer_quality = 3.5 printer_quality = 3.5
printer_level_req = 5
printer_price = 350.0 printer_price = 350.0
metadata/_custom_type_script = "uid://bed8wdnwod4wu" metadata/_custom_type_script = "uid://bed8wdnwod4wu"

View file

@ -6,7 +6,7 @@
script = ExtResource("1_nuksd") script = ExtResource("1_nuksd")
printer_manufacturer = "Creality" printer_manufacturer = "Creality"
printer_type = "Ender-3 V3 SE" printer_type = "Ender-3 V3 SE"
printer_speed = 2.0 printer_speed = 1.0
printer_quality = 2.0 printer_quality = 1.0
printer_price = 200.0 printer_price = 200.0
metadata/_custom_type_script = "uid://bed8wdnwod4wu" metadata/_custom_type_script = "uid://bed8wdnwod4wu"

View file

@ -8,5 +8,6 @@ printer_manufacturer = "Prusa Research"
printer_type = "MK4S" printer_type = "MK4S"
printer_speed = 4.5 printer_speed = 4.5
printer_quality = 5.0 printer_quality = 5.0
printer_level_req = 10
printer_price = 850.0 printer_price = 850.0
metadata/_custom_type_script = "uid://bed8wdnwod4wu" metadata/_custom_type_script = "uid://bed8wdnwod4wu"

View file

@ -0,0 +1,10 @@
class_name FilamentData
extends Resource
@export var material: String
@export var reward_multiplier: float
@export var xp_multiplier: float
@export var amount: float
@export var price: float
@export var description: String = ""
@export var level_req: int = 1

View file

@ -0,0 +1 @@
uid://cim8peoxip2si

4
Resources/job_list.gd Normal file
View file

@ -0,0 +1,4 @@
class_name JobList
extends Resource
@export var jobs: Array[JobData] = []

View file

@ -0,0 +1 @@
uid://dmfdc1mnd4dy5

View file

@ -5,4 +5,5 @@ extends Resource
@export var printer_type: String @export var printer_type: String
@export_range(1, 5) var printer_speed: float @export_range(1, 5) var printer_speed: float
@export_range(1, 5) var printer_quality: float @export_range(1, 5) var printer_quality: float
@export var printer_level_req: int = 1
@export var printer_price: float @export var printer_price: float

View file

@ -0,0 +1,15 @@
extends Node
signal amount_changed(new_amount)
var filament_data: FilamentData
var amount: float:
set(value):
amount = value
amount_changed.emit(amount)
func initialize_filament(data: FilamentData) -> void:
filament_data = data
amount = filament_data.amount
print("Filament added: ", filament_data.material)

View file

@ -0,0 +1 @@
uid://saed3mn0c2cw

View file

@ -0,0 +1,6 @@
[gd_scene format=3 uid="uid://ckjg1eynole7p"]
[ext_resource type="Script" uid="uid://saed3mn0c2cw" path="res://Scenes/Filament/filament.gd" id="1_b0mke"]
[node name="Filament" type="Node" unique_id=274664749]
script = ExtResource("1_b0mke")

View file

@ -6,43 +6,67 @@ signal job_interact
signal printer_bought(printer: Node) signal printer_bought(printer: Node)
@warning_ignore("unused_signal") @warning_ignore("unused_signal")
signal refresh_printer_dropdown signal refresh_printer_dropdown
signal notification_requested(message: String, color: String)
# - Variables - Code managed # - Variables - Code managed
var job_spawn_timer: Timer var job_spawn_timer: Timer
var inventory: Node
var jobs_array: Array[JobData] var jobs_array: Array[JobData]
var current_job_count: int = 0 var current_job_count: int = 0
var filaments_array: Array[Node]
# - Text colors
var hex_white: String = '#ffffff'
var hex_green: String = '#4ade80'
var hex_blue: String = '#60a5fa'
var hex_red: String = '#f87171'
# - Scenes # - Scenes
const JOB_CARD = preload("uid://dvfcie8hqcb0") const JOB_CARD = preload("uid://dvfcie8hqcb0")
const PRINTER = preload("uid://33ctlyrpibs3") const PRINTER = preload("uid://33ctlyrpibs3")
const ALL_JOBS = preload("uid://buvi8m3atoavu")
const FILAMENT = preload("uid://ckjg1eynole7p")
# - Constants - Settings # - Constants - Settings
# Jobs # Jobs
const JOB_SPAWN_WAIT: float = 2.0 const JOB_SPAWN_WAIT: float = 2.0
var max_jobs: int = PlayerData.max_order_amount var max_jobs: int = PlayerData.max_order_amount
func _ready() -> void: func _ready() -> void:
load_all_jobs("res://Resources/Jobs/") jobs_array = ALL_JOBS.jobs
# Create timer for job spawning # Create timer for job spawning
job_spawn_timer = Timer.new() job_spawn_timer = Timer.new()
inventory = Node.new()
add_child(job_spawn_timer) add_child(job_spawn_timer)
add_child(inventory)
job_spawn_timer.wait_time = JOB_SPAWN_WAIT job_spawn_timer.wait_time = JOB_SPAWN_WAIT
job_spawn_timer.one_shot = false job_spawn_timer.one_shot = false
job_spawn_timer.timeout.connect(_on_job_spawn_timer_timeout) job_spawn_timer.timeout.connect(_on_job_spawn_timer_timeout)
job_spawn_timer.start() job_spawn_timer.start()
func display_msg(message: String, color: String) -> void:
notification_requested.emit(message,color)
#region Shop buy interactions
func _on_shop_printer_purchase_req(printer_data: PrinterData) -> void: func _on_shop_printer_purchase_req(printer_data: PrinterData) -> void:
if PlayerData.try_purchase(printer_data.printer_price): if PlayerData.try_purchase(printer_data.printer_price):
var new_printer = PRINTER.instantiate() var new_printer = PRINTER.instantiate()
printer_bought.emit(new_printer) printer_bought.emit(new_printer)
new_printer.initialize_printer(printer_data) new_printer.initialize_printer(printer_data)
PlayerData.owned_printers += 1
func _on_shop_filament_purchase_req(filament_data: FilamentData) -> void:
if PlayerData.try_purchase(filament_data.price):
var new_filament = FILAMENT.instantiate()
inventory.add_child(new_filament)
new_filament.initialize_filament(filament_data)
#filaments_array.append(new_filament)
#endregion
#region Job generation #region Job generation
func _on_job_spawn_timer_timeout() -> void: func _on_job_spawn_timer_timeout() -> void:
#print("Spawn timer over")
#generate_job() #generate_job()
draw_job() draw_job()
@ -77,9 +101,6 @@ func generate_random_job() -> JobData:
new_job.job_difficulty = random_job.job_difficulty new_job.job_difficulty = random_job.job_difficulty
new_job.job_amount = roundf(amount) new_job.job_amount = roundf(amount)
#print('Random amount: %.2f' % amount)
#print('Job amount: %.2f' % new_job.job_amount)
print('Generated new job: %s (%d € | %d xp | %d pcs)' % [new_job.job_name, new_job.job_reward, new_job.job_experience, new_job.job_amount])
return new_job return new_job
func _on_job_accepted_pressed(accepted_job) -> void: func _on_job_accepted_pressed(accepted_job) -> void:
@ -88,25 +109,3 @@ func _on_job_accepted_pressed(accepted_job) -> void:
accepted_job.queue_free() accepted_job.queue_free()
job_interact.emit() job_interact.emit()
#endregion #endregion
#region Utility - Load job resources
func load_all_jobs(path: String) -> void:
var dir = DirAccess.open(path)
if dir:
dir.list_dir_begin()
var file_name = dir.get_next()
while file_name != "":
if not dir.current_is_dir() and file_name.get_extension() == "tres":
var full_path = path + file_name
var job_resource = load(full_path) as JobData
if job_resource:
jobs_array.append(job_resource)
#print(job_resource)
file_name = dir.get_next()
dir.list_dir_end()
#print(jobs_array)
else:
print("No files found on path")
#endregion

View file

@ -5,22 +5,33 @@ var xp: float = 0:
xp = value xp = value
xp_changed.emit(xp) xp_changed.emit(xp)
var money: float = 500: var money: float = 9999:
set(value): set(value):
money = value money = value
money_changed.emit(money) money_changed.emit(money)
var level: int = 0: var level: int = 1:
set(value): set(value):
level = value level = value
level_changed.emit(level) level_changed.emit(level)
var max_order_amount: int = 10: var max_order_amount: int = 3:
set(value): set(value):
max_order_amount = value max_order_amount = value
max_order_amount_changed.emit(max_order_amount) max_order_amount_changed.emit(max_order_amount)
var sell_multiplier: float = 0.5 var owned_printers: int = 0:
set(value):
owned_printers = value
owned_printers_changed.emit(value)
var sell_multiplier: float = 0.5:
set(value):
sell_multiplier = value
var failure_chance: float = 0.6:
set(value):
failure_chance = value
var jobs: Array[JobData] var jobs: Array[JobData]
@ -29,6 +40,7 @@ signal xp_changed(new_xp)
signal money_changed(new_money) signal money_changed(new_money)
signal level_changed(new_level) signal level_changed(new_level)
signal max_order_amount_changed(new_max_order_amount) signal max_order_amount_changed(new_max_order_amount)
signal owned_printers_changed(new_amount)
# Signal - functions # Signal - functions
signal give_experience(xp_amount) signal give_experience(xp_amount)
@ -41,14 +53,23 @@ func _ready() -> void:
func _on_give_experience(amount: float) -> void: func _on_give_experience(amount: float) -> void:
print('Gave: %.0f xp' % amount) print('Gave: %.0f xp' % amount)
xp += amount xp += amount
if xp >= 100:
while xp >= 100: while xp >= xp_required_for_level(level):
xp -= xp_required_for_level(level)
level += 1 level += 1
xp -= 100
func _on_give_money(amount: float) -> void: func _on_give_money(amount: float) -> void:
money += amount money += amount
func xp_required_for_level(player_level: int) -> float:
if player_level == 1:
return 100.0
var base_xp = 100 * (player_level - 1)
var exponent_xp = pow(player_level - 1, 1.8) * 25
return float(base_xp + exponent_xp)
func try_purchase(amount) -> bool: func try_purchase(amount) -> bool:
if amount <= money: if amount <= money:
money -= amount money -= amount

View file

@ -11,7 +11,11 @@ var job_material: String
@onready var job_experience: Label = $MarginContainer/VBoxContainer/HBoxContainer3/PartExperience @onready var job_experience: Label = $MarginContainer/VBoxContainer/HBoxContainer3/PartExperience
@onready var job_time_label: Label = $MarginContainer/VBoxContainer/HBoxContainer/TimeLabel @onready var job_time_label: Label = $MarginContainer/VBoxContainer/HBoxContainer/TimeLabel
@onready var job_material_label: Label = $MarginContainer/VBoxContainer/HBoxContainer2/PartMaterial @onready var job_material_label: Label = $MarginContainer/VBoxContainer/HBoxContainer2/PartMaterial
@onready var skip_job_button: Button = $MarginContainer/VBoxContainer/HBoxContainer/SkipJob
func _ready() -> void:
PlayerData.owned_printers_changed.connect(_on_owned_printers_changed)
_on_owned_printers_changed(PlayerData.owned_printers)
func initialize_job(data: JobData) -> void: func initialize_job(data: JobData) -> void:
job_data = data job_data = data
@ -37,6 +41,12 @@ func calculate_time() -> String:
else: else:
return '%.2f s' % round_time return '%.2f s' % round_time
func _on_owned_printers_changed(owned_printers: int) -> void:
if owned_printers == 0:
skip_job_button.disabled = true
return
skip_job_button.disabled = false
func _on_accept_job_pressed() -> void: func _on_accept_job_pressed() -> void:
job_accepted.emit(self) job_accepted.emit(self)
GameData.refresh_printer_dropdown.emit() GameData.refresh_printer_dropdown.emit()

87
Scenes/Map/Map.tscn Normal file
View file

@ -0,0 +1,87 @@
[gd_scene format=3 uid="uid://xpks7daol1db"]
[ext_resource type="Script" uid="uid://cesw3a37hqn08" path="res://Scenes/Map/map.gd" id="1_iio4a"]
[ext_resource type="PackedScene" uid="uid://c6icyfxslhlmc" path="res://Scenes/Map/map_tile.tscn" id="2_lcs11"]
[sub_resource type="Environment" id="Environment_7g6h4"]
ambient_light_source = 2
ambient_light_color = Color(0.057391837, 0.057391845, 0.057391837, 1)
fog_enabled = true
fog_light_color = Color(0.7149284, 0.74206614, 0.7842839, 1)
fog_sky_affect = 0.0
[sub_resource type="Curve" id="Curve_v0tmn"]
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.5, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 3
[sub_resource type="CurveTexture" id="CurveTexture_m2fa0"]
curve = SubResource("Curve_v0tmn")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_6kfdn"]
emission_shape = 3
emission_box_extents = Vector3(10, 0.2, 10)
angle_min = 1.0728835e-05
angle_max = 360.00003
direction = Vector3(1, 0, 1)
initial_velocity_min = 0.049999997
initial_velocity_max = 0.19999999
gravity = Vector3(0, 0, 0)
scale_min = 2.0
scale_max = 4.0
alpha_curve = SubResource("CurveTexture_m2fa0")
[sub_resource type="Gradient" id="Gradient_yju8x"]
offsets = PackedFloat32Array(0.2, 0.8)
metadata/_snap_enabled = true
[sub_resource type="FastNoiseLite" id="FastNoiseLite_11lgl"]
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_lcs11"]
noise = SubResource("FastNoiseLite_11lgl")
color_ramp = SubResource("Gradient_yju8x")
[sub_resource type="ORMMaterial3D" id="ORMMaterial3D_11lgl"]
transparency = 1
vertex_color_use_as_albedo = true
albedo_color = Color(1, 1, 1, 0.11764706)
albedo_texture = SubResource("NoiseTexture2D_lcs11")
proximity_fade_enabled = true
[sub_resource type="SphereMesh" id="SphereMesh_lcs11"]
material = SubResource("ORMMaterial3D_11lgl")
radius = 2.0
height = 4.0
[node name="Map" type="Node3D" unique_id=1765565476]
script = ExtResource("1_iio4a")
tile_scene = ExtResource("2_lcs11")
[node name="Camera3D" type="Camera3D" parent="." unique_id=40432726]
transform = Transform3D(1, 0, 0, 0, 0.7071068, 0.7071068, 0, -0.7071068, 0.7071068, 0, 6, 5)
[node name="MapTile" parent="." unique_id=441860049 instance_placeholder="res://Scenes/Map/map_tile.tscn"]
[node name="Control" type="CanvasLayer" parent="." unique_id=1301244712]
[node name="Button" type="Button" parent="Control" unique_id=1524228928]
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -73.5
offset_top = 46.0
offset_right = 72.5
offset_bottom = 79.0
grow_horizontal = 2
text = "Generate new tile"
[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=1838982295]
environment = SubResource("Environment_7g6h4")
[node name="EnvFog" type="GPUParticles3D" parent="." unique_id=1381169011]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
amount = 50
lifetime = 10.0
process_material = SubResource("ParticleProcessMaterial_6kfdn")
draw_pass_1 = SubResource("SphereMesh_lcs11")
[connection signal="pressed" from="Control/Button" to="." method="_on_button_pressed"]

78
Scenes/Map/map.gd Normal file
View file

@ -0,0 +1,78 @@
extends Node3D
@export var tile_scene: PackedScene
@export var tile_size: float = 2.0
@export var tile_separation: float = 0.2
var generated_tiles: Dictionary = {}
func _ready() -> void:
spawn_tile(Vector2i(0, 0))
func spawn_tile(grid_pos: Vector2i) -> void:
if generated_tiles.has(grid_pos):
return
var tile = tile_scene.instantiate()
add_child(tile)
var x_spacing = tile_size * 0.75 + tile_separation
var z_spacing = tile_size * sqrt(3) / 2 + tile_separation
var pos_x = grid_pos.x * x_spacing
var pos_z = grid_pos.y * z_spacing + (abs(grid_pos.x) % 2) * (z_spacing / 2.0)
var target_position = Vector3(pos_x, 0, pos_z)
tile.transform.origin = Vector3(pos_x, -3.0, pos_z)
generated_tiles[grid_pos] = tile
if tile.has_method("initialize"):
tile.initialize(grid_pos.x, grid_pos.y)
var tween = create_tween()
var tile_light = tile.get_node_or_null("OmniLight3D")
if tile_light:
tile_light.light_energy = 0.0
tween.tween_property(tile, "position", target_position, 0.8)\
.set_trans(Tween.TRANS_CUBIC)\
.set_ease(Tween.EASE_OUT)
if tile_light:
tween.parallel().tween_property(tile_light, "light_energy", 1.5, 0.8)\
.set_trans(Tween.TRANS_CUBIC)\
.set_ease(Tween.EASE_OUT)
func get_hex_neighbors(grid_pos: Vector2i) -> Array[Vector2i]:
var neighbors: Array[Vector2i] = []
neighbors.append(grid_pos + Vector2i(0, -1)) # Neighbor Up
neighbors.append(grid_pos + Vector2i(0, 1)) # Neighbor Down
neighbors.append(grid_pos + Vector2i(-1, 0)) # Neighbor Left
neighbors.append(grid_pos + Vector2i(1, 0)) # Neighbor Right
if abs(grid_pos.x) % 2 == 1:
neighbors.append(grid_pos + Vector2i(-1, 1)) # Neighbor Left-Down
neighbors.append(grid_pos + Vector2i(1, 1)) # Neighbor Right-Down
else:
neighbors.append(grid_pos + Vector2i(-1, -1)) # Neighbor Left-Up
neighbors.append(grid_pos + Vector2i(1, -1)) # Neighbor Right-Up
return neighbors
func _on_button_pressed() -> void:
var open_neighbors = []
for current_pos in generated_tiles.keys():
var neighbors = get_hex_neighbors(current_pos)
for n_pos in neighbors:
if not generated_tiles.has(n_pos) and not open_neighbors.has(n_pos):
open_neighbors.append(n_pos)
if open_neighbors.size() > 0:
var random_target_pos = open_neighbors[randi() % open_neighbors.size()]
spawn_tile(random_target_pos)
print("Generated new tile at: ", random_target_pos)
else:
print("World is full")

1
Scenes/Map/map.gd.uid Normal file
View file

@ -0,0 +1 @@
uid://cesw3a37hqn08

1
Scenes/Map/map_tile.gd Normal file
View file

@ -0,0 +1 @@
extends Node3D

View file

@ -0,0 +1 @@
uid://db7luam5x7vhs

32
Scenes/Map/map_tile.tscn Normal file
View file

@ -0,0 +1,32 @@
[gd_scene format=3 uid="uid://c6icyfxslhlmc"]
[ext_resource type="Script" uid="uid://db7luam5x7vhs" path="res://Scenes/Map/map_tile.gd" id="1_0t1dj"]
[sub_resource type="CylinderMesh" id="CylinderMesh_7g6h4"]
top_radius = 1.0
bottom_radius = 1.0
height = 0.2
radial_segments = 6
[sub_resource type="CylinderShape3D" id="CylinderShape3D_7g6h4"]
height = 0.22
radius = 0.859375
[node name="MapTile" type="Node3D" unique_id=441860049]
transform = Transform3D(-4.3711385e-08, 0, -0.99999994, 0, 1, 0, 0.99999994, 0, -4.3711385e-08, 0, 0, 0)
script = ExtResource("1_0t1dj")
[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=786384927]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0)
mesh = SubResource("CylinderMesh_7g6h4")
[node name="Area3D" type="Area3D" parent="MeshInstance3D" unique_id=519127025]
[node name="CollisionShape3D" type="CollisionShape3D" parent="MeshInstance3D/Area3D" unique_id=318914845]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0057469606, 0)
shape = SubResource("CylinderShape3D_7g6h4")
debug_color = Color(0, 0.6509804, 0.08627451, 0.52156866)
[node name="OmniLight3D" type="OmniLight3D" parent="." unique_id=1228933535]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2232149, 0)
light_energy = 1.5

View file

@ -1,18 +1,35 @@
extends PanelContainer extends PanelContainer
@onready var printer_name_label: Label = $MarginContainer/MainArea/TopInfo/PrinterLabel @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 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 select_filament: OptionButton = $MarginContainer/MainArea/SelectFilament
@onready var time_left_label: Label = $MarginContainer/MainArea/PrintInfo/TimeLeftLabel @onready var status_label: RichTextLabel = $MarginContainer/MainArea/TopInfo/StatusLabel
@onready var time_left_label: RichTextLabel = $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 quality_label: RichTextLabel = $MarginContainer/MainArea/PrintInfo/InfoRow1/QualityLabel
@onready var loaded_filament_label: RichTextLabel = $MarginContainer/MainArea/PrintInfo/InfoRow1/LoadedFilament
var printer_data: PrinterData var printer_data: PrinterData
# - Job and Filament selection variables
var selected_job: JobData var selected_job: JobData
var selected_job_index: int var selected_job_index: int
var selected_filament: Node = null
var selected_filament_index: int
# - Printer states
var is_printing: bool = false var is_printing: bool = false
var print_failed: bool = false
# Variables - Failure calculations
var time_left: float var time_left: float
var failure_points: Array
var failure_point_amount: float = 5
var print_quality: float = 1.0
func _ready() -> void: func _ready() -> void:
GameData.refresh_printer_dropdown.connect(_on_refresh_printer_dropdown) GameData.refresh_printer_dropdown.connect(_on_refresh_printer_dropdown)
@ -21,53 +38,123 @@ func initialize_printer(data: PrinterData) -> void:
printer_data = data printer_data = data
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
quality_label.visible = false
reward_label.visible = false
time_left_label.visible = false time_left_label.visible = false
loaded_filament_label.visible = true
time_left = 0 time_left = 0
set_status() 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)
_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:
select_job.visible = false select_job.hide()
progress_bar.visible = true select_filament.hide()
time_left_label.visible = true progress_bar.show()
time_left_label.show()
quality_label.show()
reward_label.show()
set_status() set_status()
var text_color = GameData.hex_green
if print_quality < 1.0:
text_color = GameData.hex_red
quality_label.text = 'Quality: [color=%s]%.0f%%[/color]' % [text_color, (print_quality * 100)]
reward_label.text = 'Reward: [color=%s]%.2f €[/color]' % [text_color, (selected_job.job_reward * print_quality)]
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 -= 0.5 * 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: [color=%s]%s[/color]' % [GameData.hex_blue, calculate_time_left(time_left)]
if time_left <= 0: if time_left <= 0:
PlayerData.give_money.emit(selected_job.job_reward) var end_reward = selected_job.job_reward * print_quality
PlayerData.give_experience.emit(selected_job.job_experience) var end_xp = selected_job.job_experience * print_quality
select_job.visible = true PlayerData.give_money.emit(end_reward)
PlayerData.give_experience.emit(end_xp)
GameData.display_msg('Print completed! Got %.2f' % end_reward, GameData.hex_green)
reset_status() reset_status()
# Old print failure condition - 1st Fail, 2nd + 3rd Quality decrease
#if failure_points.has(roundf(progress_bar.value * 100)):
#if failure_points[0] == roundf(progress_bar.value * 100):
#if check_failure(roundf(progress_bar.value * 100)):
#print_failed = true
#reset_status()
#elif check_failure(roundf(progress_bar.value * 100)):
#print_quality -= 0.1
# New print failure condition - Only quality decrease
if failure_points.has(roundf(progress_bar.value * 100)):
if check_failure(roundf(progress_bar.value * 100)):
print_quality -= 0.1
func reset_status() -> void: func reset_status() -> void:
is_printing = false is_printing = false
_on_select_job_pressed()
set_status() set_status()
time_left_label.visible = false print_failed = false
progress_bar.visible = false print_quality = 1.0
failure_points = []
time_left_label.hide()
quality_label.hide()
reward_label.hide()
progress_bar.hide()
progress_bar.value = 0 progress_bar.value = 0
time_left = 0 time_left = 0
select_filament.show()
select_job.disabled = false select_job.disabled = false
select_job.show()
start_button.disabled = false start_button.disabled = false
_on_select_job_pressed()
func set_status() -> void: func set_status() -> void:
if is_printing: var color_hex: String = GameData.hex_white
status_label.text = 'Status: Printing' var status: String
if print_failed:
status = 'Failed'
color_hex = GameData.hex_red
GameData.display_msg('Print failed!',color_hex)
elif is_printing:
status = 'Printing'
color_hex = GameData.hex_blue
else: else:
status_label.text = 'Status: Free' status = 'Free'
color_hex = GameData.hex_green
status_label.text = 'Status: [color=%s]%s[/color]' % [color_hex, status]
func calculate_fail_thresholds() -> Array:
var failure_checkpoints: Array = []
var failure_range = roundf(100.0 / failure_point_amount)
for point in failure_point_amount:
var range_min = failure_checkpoints.size() * (failure_range + 1)
var range_max = failure_checkpoints.size() * (failure_range + 1) + failure_range
failure_checkpoints.append(roundf(randf_range(\
range_min, range_max)))
print('Failure points: ', failure_checkpoints)
return failure_checkpoints
func check_failure(value: float) -> bool:
if randf() >= PlayerData.failure_chance:
failure_points[failure_points.bsearch(value, true)] = 0
return false
else:
failure_points[failure_points.bsearch(value, true)] = 0
return true
func calculate_time_left(time) -> String: func calculate_time_left(time) -> String:
var minutes: int = 0 var minutes: int = 0
if time >= 60: if time >= 60:
while time >= 60: while time >= 60:
minutes += 1 minutes += 1
@ -79,13 +166,42 @@ func calculate_time_left(time) -> String:
func _on_refresh_printer_dropdown() -> void: func _on_refresh_printer_dropdown() -> void:
if is_printing: if is_printing:
return return
_on_select_job_pressed() _on_select_job_pressed()
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)
PlayerData.owned_printers -= 1
queue_free() queue_free()
func _on_select_filament_pressed() -> void:
select_filament.clear()
var current_filaments = GameData.inventory.get_children()
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:
var data = filament.filament_data
var amount = filament.amount
var item_text = '%s | %.2f g' % [data.material, 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
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: func _on_select_job_pressed() -> void:
select_job.clear() select_job.clear()
if PlayerData.jobs.is_empty(): if PlayerData.jobs.is_empty():
@ -94,7 +210,8 @@ func _on_select_job_pressed() -> void:
else: else:
start_button.disabled = false start_button.disabled = false
for job in PlayerData.jobs: for job in PlayerData.jobs:
var item_text = '%s (XP: %d | %d € | %s)' % [job.job_name, job.job_experience, job.job_reward, calculate_time_left(job.job_time / printer_data.printer_speed)] var item_text = '%s (XP: %.2f | %.2f € | %s)' %\
[job.job_name, job.job_experience, job.job_reward, calculate_time_left(job.job_time / printer_data.printer_speed)]
select_job.add_item(item_text) select_job.add_item(item_text)
var current_index = select_job.item_count - 1 var current_index = select_job.item_count - 1
@ -106,18 +223,25 @@ 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
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: 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)
failure_points = calculate_fail_thresholds()
GameData.refresh_printer_dropdown.emit() GameData.refresh_printer_dropdown.emit()

View file

@ -6,8 +6,11 @@
[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)
offset_right = 271.0 anchors_preset = 15
offset_bottom = 182.0 anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
script = ExtResource("1_dlbos") script = ExtResource("1_dlbos")
@ -30,29 +33,68 @@ size_flags_horizontal = 3
theme_override_font_sizes/font_size = 30 theme_override_font_sizes/font_size = 30
text = "Printer #1" text = "Printer #1"
[node name="StatusLabel" type="Label" parent="MarginContainer/MainArea/TopInfo" unique_id=2117616913] [node name="StatusLabel" type="RichTextLabel" parent="MarginContainer/MainArea/TopInfo" unique_id=157586427]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
bbcode_enabled = true
text = "Status: Free" text = "Status: Free"
horizontal_alignment = 2 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 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" text = "Printer model"
[node name="PrintInfo" type="VBoxContainer" parent="MarginContainer/MainArea" unique_id=1502076264] [node name="PrintInfo" type="VBoxContainer" parent="MarginContainer/MainArea" unique_id=1502076264]
layout_mode = 2 layout_mode = 2
[node name="FilamentLabel" type="Label" parent="MarginContainer/MainArea/PrintInfo" unique_id=181392172] [node name="InfoRow1" type="HBoxContainer" parent="MarginContainer/MainArea/PrintInfo" unique_id=1561257387]
layout_mode = 2 layout_mode = 2
text = "Material: PLA" size_flags_vertical = 3
[node name="TimeLeftLabel" type="Label" parent="MarginContainer/MainArea/PrintInfo" unique_id=1516591173] [node name="LoadedFilament" type="RichTextLabel" parent="MarginContainer/MainArea/PrintInfo/InfoRow1" unique_id=532233684]
layout_mode = 2
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
size_flags_horizontal = 3
bbcode_enabled = true
text = "Print quality: ###%"
horizontal_alignment = 2
[node name="Label" type="Label" parent="MarginContainer/MainArea/PrintInfo/InfoRow1" unique_id=1388403149]
layout_mode = 2
[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]
layout_mode = 2
size_flags_horizontal = 3
bbcode_enabled = true
text = "Reward: ###€"
horizontal_alignment = 2
[node name="Label" type="Label" parent="MarginContainer/MainArea/PrintInfo/InfoRow2" unique_id=1668802451]
layout_mode = 2 layout_mode = 2
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
theme_override_styles/fill = ExtResource("2_dlbos")
max_value = 1.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]
@ -76,6 +118,11 @@ size_flags_horizontal = 3
theme_override_styles/hover = ExtResource("3_mmlst") theme_override_styles/hover = ExtResource("3_mmlst")
text = "Sell printer" 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] [node name="SelectJob" type="OptionButton" parent="MarginContainer/MainArea" unique_id=1500040832]
layout_mode = 2 layout_mode = 2
@ -83,5 +130,7 @@ layout_mode = 2
[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/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="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"] [connection signal="pressed" from="MarginContainer/MainArea/SelectJob" to="." method="_on_select_job_pressed"]

View file

@ -0,0 +1,34 @@
extends PanelContainer
signal buy_filament
var filament_data: FilamentData
@onready var filament_material: Label = %Material
@onready var description: Label = %Description
@onready var reward_multiplier: Label = %RewardMultiplier
@onready var xp_multiplier: Label = %ExperienceMultiplier
@onready var amount: Label = %Amount
@onready var price_tag: Label = %PriceTag
@onready var buy_button: Button = $Margin/Info/Price/BuyButton
func _ready() -> void:
PlayerData.money_changed.connect(_on_toggle_button)
func initialize_filament(data: FilamentData) -> void:
filament_data = data
filament_material.text = filament_data.material
description.text = filament_data.description
reward_multiplier.text = 'Reward multiplier: x%.1f' % filament_data.reward_multiplier
xp_multiplier.text = 'Experience multiplier: x%.1f' % filament_data.xp_multiplier
amount.text = 'Amount: %.0f g' % filament_data.amount
price_tag.text = 'Price: %.2f' % filament_data.price
func _on_buy_button_pressed() -> void:
buy_filament.emit(self)
func _on_toggle_button(money) -> void:
if PlayerData.money >= filament_data.price:
buy_button.disabled = false
else:
buy_button.disabled = true

View file

@ -0,0 +1 @@
uid://o733qdkp8lxl

View file

@ -0,0 +1,76 @@
[gd_scene format=3 uid="uid://csq76iufxrb4y"]
[ext_resource type="Script" uid="uid://o733qdkp8lxl" path="res://Scenes/Shop/Filaments/shop_filament_card.gd" id="1_gtjvs"]
[node name="FilamentsCard" type="PanelContainer" unique_id=368185874]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_gtjvs")
[node name="Margin" type="MarginContainer" parent="." unique_id=1163688479]
layout_mode = 2
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="Info" type="VBoxContainer" parent="Margin" unique_id=1453497579]
layout_mode = 2
[node name="Title" type="VBoxContainer" parent="Margin/Info" unique_id=1904589169]
layout_mode = 2
[node name="Material" type="Label" parent="Margin/Info/Title" unique_id=24143253]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "LOL-CF"
[node name="Description" type="Label" parent="Margin/Info/Title" unique_id=870869096]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "Filament description goes here"
[node name="Multipliers" type="HBoxContainer" parent="Margin/Info" unique_id=2026319482]
layout_mode = 2
[node name="RewardMultiplier" type="Label" parent="Margin/Info/Multipliers" unique_id=867010603]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "Reward multiplier: x1.0"
[node name="ExperienceMultiplier" type="Label" parent="Margin/Info/Multipliers" unique_id=1033367043]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "Experience multiplier: x1.0"
[node name="ProductInfo" type="HBoxContainer" parent="Margin/Info" unique_id=1243250288]
layout_mode = 2
[node name="Amount" type="Label" parent="Margin/Info/ProductInfo" unique_id=1356405418]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "Amount: 123 g"
[node name="Price" type="HBoxContainer" parent="Margin/Info" unique_id=926000726]
layout_mode = 2
[node name="PriceTag" type="Label" parent="Margin/Info/Price" unique_id=881459224]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "Price: 1.23 €"
[node name="BuyButton" type="Button" parent="Margin/Info/Price" unique_id=780730344]
layout_mode = 2
size_flags_horizontal = 3
text = "Buy"
[connection signal="pressed" from="Margin/Info/Price/BuyButton" to="." method="_on_buy_button_pressed"]

View file

@ -0,0 +1,28 @@
extends PanelContainer
signal filament_purchase_requested(filament_data: FilamentData)
@export var filaments_array: Array[FilamentData]
const SHOP_FILAMENTS_CARD = preload("uid://csq76iufxrb4y")
func _ready() -> void:
generate_filaments()
filament_purchase_requested.connect(GameData._on_shop_filament_purchase_req)
PlayerData.level_changed.connect(_on_level_changed)
func generate_filaments() -> void:
for child in %FilamentList.get_children():
child.queue_free()
for filament in filaments_array:
if PlayerData.level >= filament.level_req:
var new_filament = SHOP_FILAMENTS_CARD.instantiate()
%FilamentList.add_child(new_filament)
new_filament.initialize_filament(filament)
new_filament.buy_filament.connect(_on_buy_filament_pressed)
func _on_buy_filament_pressed(bought_filament) -> void:
filament_purchase_requested.emit(bought_filament.filament_data)
func _on_level_changed(_level) -> void:
generate_filaments()

View file

@ -0,0 +1 @@
uid://bcowlm04qsgqc

View file

@ -17,8 +17,8 @@ func initialize_printer(data: PrinterData) -> void:
printer_data = data printer_data = data
printer_name.text = printer_data.printer_manufacturer printer_name.text = printer_data.printer_manufacturer
printer_model.text = printer_data.printer_type printer_model.text = printer_data.printer_type
printer_speed.text = 'Speed: %d/5' % printer_data.printer_speed printer_speed.text = 'Speed: %d/5' % roundf(printer_data.printer_speed)
printer_quality.text = 'Quality: %d/5' % printer_data.printer_quality printer_quality.text = 'Quality: %d/5' % roundf(printer_data.printer_quality)
printer_price.text = 'Price: %d' % printer_data.printer_price printer_price.text = 'Price: %d' % printer_data.printer_price
if PlayerData.money >= printer_data.printer_price: if PlayerData.money >= printer_data.printer_price:

View file

@ -5,14 +5,17 @@ signal printer_purchase_requested(printer_data: PrinterData)
@export var printers_array: Array[PrinterData] @export var printers_array: Array[PrinterData]
const PRINTER_SCENE = preload("uid://bdpqvwvwmaian") const PRINTER_SCENE = preload("uid://bdpqvwvwmaian")
func _ready() -> void: func _ready() -> void:
generate_printers() generate_printers()
generate_printers()
printer_purchase_requested.connect(GameData._on_shop_printer_purchase_req) printer_purchase_requested.connect(GameData._on_shop_printer_purchase_req)
PlayerData.level_changed.connect(_on_level_changed)
func generate_printers() -> void: func generate_printers() -> void:
for child in %PrinterList.get_children():
child.queue_free()
for printer in printers_array: for printer in printers_array:
if PlayerData.level >= printer.printer_level_req:
var new_printer = PRINTER_SCENE.instantiate() var new_printer = PRINTER_SCENE.instantiate()
%PrinterList.add_child(new_printer) %PrinterList.add_child(new_printer)
new_printer.initialize_printer(printer) new_printer.initialize_printer(printer)
@ -20,3 +23,6 @@ func generate_printers() -> void:
func _buy_printer_pressed(bought_printer) -> void: func _buy_printer_pressed(bought_printer) -> void:
printer_purchase_requested.emit(bought_printer.printer_data) printer_purchase_requested.emit(bought_printer.printer_data)
func _on_level_changed(_level) -> void:
generate_printers()

View file

@ -1,11 +1,14 @@
[gd_scene format=3 uid="uid://bdpqvwvwmaian"] [gd_scene format=3 uid="uid://bdpqvwvwmaian"]
[ext_resource type="Script" uid="uid://ttfk4n2fkifj" path="res://Scenes/Shop/Printers/printer_card.gd" id="1_tl8ce"] [ext_resource type="Script" uid="uid://ttfk4n2fkifj" path="res://Scenes/Shop/Printers/shop_printer_card.gd" id="1_tl8ce"]
[ext_resource type="StyleBox" uid="uid://csahw36txnewl" path="res://Styles/btn_style_box_green_hover.tres" id="2_tl8ce"] [ext_resource type="StyleBox" uid="uid://csahw36txnewl" path="res://Styles/btn_style_box_green_hover.tres" id="2_tl8ce"]
[node name="PrinterCard" type="PanelContainer" unique_id=1714388686] [node name="PrinterCard" type="PanelContainer" unique_id=1714388686]
offset_right = 40.0 anchors_preset = 15
offset_bottom = 40.0 anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
script = ExtResource("1_tl8ce") script = ExtResource("1_tl8ce")

View file

@ -1,13 +1,29 @@
extends MarginContainer extends MarginContainer
@onready var printers_button: Button = $HBoxContainer/PrintersButton
@onready var filaments_button: Button = $HBoxContainer/FilamentsButton
func _ready() -> void: func _ready() -> void:
%Printers.visible = true %Printers.visible = true
%Filaments.visible = false %Filaments.visible = false
disable_buttons("printers")
func _on_printers_button_pressed() -> void: func _on_printers_button_pressed() -> void:
%Printers.visible = true %Printers.visible = true
%Filaments.visible = false %Filaments.visible = false
disable_buttons("printers")
func _on_filaments_button_pressed() -> void: func _on_filaments_button_pressed() -> void:
%Printers.visible = false %Printers.visible = false
%Filaments.visible = true %Filaments.visible = true
disable_buttons("filaments")
func disable_buttons(tab: String) -> void:
printers_button.disabled = true
filaments_button.disabled = true
match tab:
"printers":
filaments_button.disabled = false
"filaments":
printers_button.disabled = false

View file

@ -2,10 +2,10 @@ extends Control
@export var debug: bool = false @export var debug: bool = false
@onready var debug_xp: Button = $VBoxContainer/TopBar/VBoxContainer/MarginContainer/HBoxContainer/DebugXP @onready var debug_xp: Button = $GameArea/TopBar/VBoxContainer/MarginContainer/HBoxContainer/DebugXP
@onready var debug_money: Button = $VBoxContainer/TopBar/VBoxContainer/MarginContainer/HBoxContainer/DebugMoney @onready var debug_money: Button = $GameArea/TopBar/VBoxContainer/MarginContainer/HBoxContainer/DebugMoney
@onready var debug_button: Button = $VBoxContainer/TopBar/VBoxContainer/MarginContainer/HBoxContainer/DebugButton @onready var debug_button: Button = $GameArea/TopBar/VBoxContainer/MarginContainer/HBoxContainer/DebugButton
@onready var jobs_tab_button: Button = $VBoxContainer/MainAreaMargin/MainArea/RightColumn/TabSwitcher/TabButtons/JobsTabButton @onready var jobs_tab_button: Button = $GameArea/MainAreaMargin/MainArea/RightColumn/TabSwitcher/TabButtons/JobsTabButton
const PRINTER = preload("uid://33ctlyrpibs3") const PRINTER = preload("uid://33ctlyrpibs3")
@ -25,9 +25,13 @@ func _ready() -> void:
# --- Experience, Level and Money update --- # --- Experience, Level and Money update ---
func _on_xp_changed(xp) -> void: func _on_xp_changed(xp) -> void:
%Experience.value = xp var target_xp = PlayerData.xp_required_for_level(PlayerData.level)
var required_xp_to_value = (float(PlayerData.xp) / target_xp) * 100
%Experience.value = required_xp_to_value
func _on_level_changed(level) -> void: func _on_level_changed(level) -> void:
%Level.text = 'Level: %d' % level %Level.text = 'Level: %d' % level
func _on_money_changed(money) -> void: func _on_money_changed(money) -> void:
%Money.text = 'Money: %.2f' % money %Money.text = 'Money: %.2f' % money

View file

@ -1,14 +1,21 @@
[gd_scene format=3 uid="uid://d24rvu5c0gd1w"] [gd_scene format=3 uid="uid://d24rvu5c0gd1w"]
[ext_resource type="Script" uid="uid://d0sgvbphgssmi" path="res://Scenes/UI/ui.gd" id="1_vqjbf"] [ext_resource type="Script" uid="uid://d0sgvbphgssmi" path="res://Scenes/UI/ui.gd" id="1_vqjbf"]
[ext_resource type="PackedScene" uid="uid://c4tdg221rvm53" path="res://Scenes/UI/ui_notification.tscn" id="2_s3gqk"]
[ext_resource type="Script" uid="uid://bcowlm04qsgqc" path="res://Scenes/Shop/Printers/shop_filaments.gd" id="9_mbl0m"]
[ext_resource type="Script" uid="uid://cim8peoxip2si" path="res://Resources/filament_data.gd" id="10_vy225"]
[ext_resource type="Resource" uid="uid://dvu3hbx3tn0nx" path="res://Resources/Filaments/filament_pla.tres" id="11_fy0us"]
[ext_resource type="Resource" uid="uid://vuby4u37cu42" path="res://Resources/Filaments/filament_petg.tres" id="12_fy0us"]
[ext_resource type="Script" uid="uid://q8cf21vq4ka6" path="res://Scenes/tab_switcher.gd" id="13_vqjbf"] [ext_resource type="Script" uid="uid://q8cf21vq4ka6" path="res://Scenes/tab_switcher.gd" id="13_vqjbf"]
[ext_resource type="Script" uid="uid://cg2kskiky8iur" path="res://Scenes/Shop/shop_tab_switcher.gd" id="14_vqjbf"] [ext_resource type="Script" uid="uid://cg2kskiky8iur" path="res://Scenes/Shop/shop_tab_switcher.gd" id="14_vqjbf"]
[ext_resource type="Script" uid="uid://d3g5e8wjfqy5i" path="res://Scenes/Shop/Printers/printers.gd" id="15_vqjbf"] [ext_resource type="Script" uid="uid://d3g5e8wjfqy5i" path="res://Scenes/Shop/Printers/shop_printers.gd" id="15_vqjbf"]
[ext_resource type="Script" uid="uid://bed8wdnwod4wu" path="res://Resources/printer_data.gd" id="16_rdojl"] [ext_resource type="Script" uid="uid://bed8wdnwod4wu" path="res://Resources/printer_data.gd" id="16_rdojl"]
[ext_resource type="Resource" uid="uid://bdis2u0tfvlch" path="res://Resources/Printers/printer_bambulab_A1_mini.tres" id="17_llrls"] [ext_resource type="Resource" uid="uid://bdis2u0tfvlch" path="res://Resources/Printers/printer_bambulab_A1_mini.tres" id="17_llrls"]
[ext_resource type="Resource" uid="uid://b6x4k150ugskw" path="res://Resources/Printers/printer_creality_ender_3.tres" id="18_8rt22"] [ext_resource type="Resource" uid="uid://b6x4k150ugskw" path="res://Resources/Printers/printer_creality_ender_3.tres" id="18_8rt22"]
[ext_resource type="Resource" uid="uid://b4v47rpo27kec" path="res://Resources/Printers/printer_prusa_mk4s.tres" id="19_1ohgd"] [ext_resource type="Resource" uid="uid://b4v47rpo27kec" path="res://Resources/Printers/printer_prusa_mk4s.tres" id="19_1ohgd"]
[sub_resource type="Gradient" id="Gradient_7g6h4"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8fchy"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8fchy"]
bg_color = Color(0.3529412, 0.47843137, 0.7372549, 0.47058824) bg_color = Color(0.3529412, 0.47843137, 0.7372549, 0.47058824)
corner_radius_top_left = 6 corner_radius_top_left = 6
@ -26,6 +33,9 @@ bg_color = Color(0.6, 0.6, 0.6, 0)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qru7b"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qru7b"]
bg_color = Color(0.6, 0.6, 0.6, 0) bg_color = Color(0.6, 0.6, 0.6, 0)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mmlst"]
bg_color = Color(0.6, 0.6, 0.6, 0)
[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
@ -35,7 +45,24 @@ grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
script = ExtResource("1_vqjbf") script = ExtResource("1_vqjbf")
[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=1634044894] [node name="CPUParticles2D" type="CPUParticles2D" parent="." unique_id=61421642]
position = Vector2(568, 312)
amount = 60
lifetime = 8.0
preprocess = 8.0
speed_scale = 0.3
emission_shape = 3
emission_rect_extents = Vector2(1000, 600)
direction = Vector2(0, -1)
gravity = Vector2(0, 0)
initial_velocity_min = 20.0
initial_velocity_max = 50.0
scale_amount_min = 2.0
scale_amount_max = 5.0
color = Color(0.45585775, 0.45585775, 0.4558577, 1)
color_ramp = SubResource("Gradient_7g6h4")
[node name="GameArea" type="VBoxContainer" parent="." unique_id=1634044894]
layout_mode = 1 layout_mode = 1
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
@ -43,56 +70,56 @@ anchor_bottom = 1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
[node name="TopBar" type="PanelContainer" parent="VBoxContainer" unique_id=96075233] [node name="TopBar" type="PanelContainer" parent="GameArea" unique_id=96075233]
layout_mode = 2 layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/TopBar" unique_id=1068942919] [node name="VBoxContainer" type="VBoxContainer" parent="GameArea/TopBar" unique_id=1068942919]
layout_mode = 2 layout_mode = 2
[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/TopBar/VBoxContainer" unique_id=1261087154] [node name="MarginContainer" type="MarginContainer" parent="GameArea/TopBar/VBoxContainer" unique_id=1261087154]
layout_mode = 2 layout_mode = 2
theme_override_constants/margin_left = 10 theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10 theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10 theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10 theme_override_constants/margin_bottom = 10
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/TopBar/VBoxContainer/MarginContainer" unique_id=487881719] [node name="HBoxContainer" type="HBoxContainer" parent="GameArea/TopBar/VBoxContainer/MarginContainer" unique_id=487881719]
layout_mode = 2 layout_mode = 2
alignment = 1 alignment = 1
[node name="Money" type="Label" parent="VBoxContainer/TopBar/VBoxContainer/MarginContainer/HBoxContainer" unique_id=2146628247] [node name="Money" type="Label" parent="GameArea/TopBar/VBoxContainer/MarginContainer/HBoxContainer" unique_id=2146628247]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
text = "Money: 0 €" text = "Money: 0 €"
[node name="DebugMoney" type="Button" parent="VBoxContainer/TopBar/VBoxContainer/MarginContainer/HBoxContainer" unique_id=601739475] [node name="DebugMoney" type="Button" parent="GameArea/TopBar/VBoxContainer/MarginContainer/HBoxContainer" unique_id=601739475]
layout_mode = 2 layout_mode = 2
text = "Give 100€" text = "Give 100€"
[node name="DebugXP" type="Button" parent="VBoxContainer/TopBar/VBoxContainer/MarginContainer/HBoxContainer" unique_id=535993224] [node name="DebugXP" type="Button" parent="GameArea/TopBar/VBoxContainer/MarginContainer/HBoxContainer" unique_id=535993224]
layout_mode = 2 layout_mode = 2
text = "Give xp" text = "Give xp"
[node name="Time" type="Label" parent="VBoxContainer/TopBar/VBoxContainer/MarginContainer/HBoxContainer" unique_id=1503956629] [node name="Time" type="Label" parent="GameArea/TopBar/VBoxContainer/MarginContainer/HBoxContainer" unique_id=1503956629]
visible = false visible = false
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
text = "Time: 12:00" text = "Time: 12:00"
horizontal_alignment = 1 horizontal_alignment = 1
[node name="Level" type="Label" parent="VBoxContainer/TopBar/VBoxContainer/MarginContainer/HBoxContainer" unique_id=1016279160] [node name="Level" type="Label" parent="GameArea/TopBar/VBoxContainer/MarginContainer/HBoxContainer" unique_id=1016279160]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
text = "Level: 1" text = "Level: 1"
horizontal_alignment = 2 horizontal_alignment = 2
[node name="DebugButton" type="Button" parent="VBoxContainer/TopBar/VBoxContainer/MarginContainer/HBoxContainer" unique_id=255003152] [node name="DebugButton" type="Button" parent="GameArea/TopBar/VBoxContainer/MarginContainer/HBoxContainer" unique_id=255003152]
layout_mode = 2 layout_mode = 2
text = "Debug" text = "Debug"
[node name="Experience" type="ProgressBar" parent="VBoxContainer/TopBar/VBoxContainer" unique_id=38033766] [node name="Experience" type="ProgressBar" parent="GameArea/TopBar/VBoxContainer" unique_id=38033766]
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
@ -100,24 +127,24 @@ theme_override_styles/fill = SubResource("StyleBoxFlat_8fchy")
value = 65.27 value = 65.27
show_percentage = false show_percentage = false
[node name="MainAreaMargin" type="MarginContainer" parent="VBoxContainer" unique_id=1858818142] [node name="MainAreaMargin" type="MarginContainer" parent="GameArea" unique_id=1858818142]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3 size_flags_vertical = 3
theme_override_constants/margin_top = 5 theme_override_constants/margin_top = 5
[node name="MainArea" type="HBoxContainer" parent="VBoxContainer/MainAreaMargin" unique_id=352001241] [node name="MainArea" type="HBoxContainer" parent="GameArea/MainAreaMargin" unique_id=352001241]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3 size_flags_vertical = 3
[node name="LeftColumn" type="VBoxContainer" parent="VBoxContainer/MainAreaMargin/MainArea" unique_id=497978034] [node name="LeftColumn" type="VBoxContainer" parent="GameArea/MainAreaMargin/MainArea" unique_id=497978034]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
[node name="MainMargin" type="MarginContainer" parent="VBoxContainer/MainAreaMargin/MainArea/LeftColumn" unique_id=1390444828] [node name="MainMargin" type="MarginContainer" parent="GameArea/MainAreaMargin/MainArea/LeftColumn" unique_id=1390444828]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3 size_flags_vertical = 3
[node name="Header" type="MarginContainer" parent="VBoxContainer/MainAreaMargin/MainArea/LeftColumn/MainMargin" unique_id=674103883] [node name="Header" type="MarginContainer" parent="GameArea/MainAreaMargin/MainArea/LeftColumn/MainMargin" unique_id=674103883]
visible = false visible = false
layout_mode = 2 layout_mode = 2
theme_override_constants/margin_left = 10 theme_override_constants/margin_left = 10
@ -125,15 +152,15 @@ theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10 theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10 theme_override_constants/margin_bottom = 10
[node name="Label" type="Label" parent="VBoxContainer/MainAreaMargin/MainArea/LeftColumn/MainMargin/Header" unique_id=1155403735] [node name="Label" type="Label" parent="GameArea/MainAreaMargin/MainArea/LeftColumn/MainMargin/Header" unique_id=1155403735]
layout_mode = 2 layout_mode = 2
text = "Printers" text = "Printers"
[node name="PrinterScroll" type="ScrollContainer" parent="VBoxContainer/MainAreaMargin/MainArea/LeftColumn/MainMargin" unique_id=1351903470] [node name="PrinterScroll" type="ScrollContainer" parent="GameArea/MainAreaMargin/MainArea/LeftColumn/MainMargin" unique_id=1351903470]
layout_mode = 2 layout_mode = 2
horizontal_scroll_mode = 0 horizontal_scroll_mode = 0
[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/MainAreaMargin/MainArea/LeftColumn/MainMargin/PrinterScroll" unique_id=134445001] [node name="MarginContainer" type="MarginContainer" parent="GameArea/MainAreaMargin/MainArea/LeftColumn/MainMargin/PrinterScroll" unique_id=134445001]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
@ -142,18 +169,21 @@ theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10 theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10 theme_override_constants/margin_bottom = 10
[node name="PrinterContainer" type="VBoxContainer" parent="VBoxContainer/MainAreaMargin/MainArea/LeftColumn/MainMargin/PrinterScroll/MarginContainer" unique_id=374703275] [node name="PrinterContainer" type="VBoxContainer" parent="GameArea/MainAreaMargin/MainArea/LeftColumn/MainMargin/PrinterScroll/MarginContainer" unique_id=374703275]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
theme_override_constants/separation = 8 theme_override_constants/separation = 8
[node name="RightColumn" type="VBoxContainer" parent="VBoxContainer/MainAreaMargin/MainArea" unique_id=653054059] [node name="Printer" parent="GameArea/MainAreaMargin/MainArea/LeftColumn/MainMargin/PrinterScroll/MarginContainer/PrinterContainer" unique_id=1372437203 instance_placeholder="res://Scenes/Printer/printer.tscn"]
layout_mode = 2
[node name="RightColumn" type="VBoxContainer" parent="GameArea/MainAreaMargin/MainArea" unique_id=653054059]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
[node name="TabSwitcher" type="MarginContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn" unique_id=1366955734] [node name="TabSwitcher" type="MarginContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn" unique_id=1366955734]
layout_mode = 2 layout_mode = 2
theme_override_constants/margin_left = 10 theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10 theme_override_constants/margin_top = 10
@ -161,41 +191,42 @@ theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10 theme_override_constants/margin_bottom = 10
script = ExtResource("13_vqjbf") script = ExtResource("13_vqjbf")
[node name="TabButtons" type="HBoxContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/TabSwitcher" unique_id=454550378] [node name="TabButtons" type="HBoxContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/TabSwitcher" unique_id=454550378]
layout_mode = 2 layout_mode = 2
[node name="JobsTabButton" type="Button" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/TabSwitcher/TabButtons" unique_id=332022453] [node name="JobsTabButton" type="Button" parent="GameArea/MainAreaMargin/MainArea/RightColumn/TabSwitcher/TabButtons" unique_id=332022453]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
text = "Jobs" text = "Jobs"
[node name="ShopTabButton" type="Button" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/TabSwitcher/TabButtons" unique_id=748682284] [node name="ShopTabButton" type="Button" parent="GameArea/MainAreaMargin/MainArea/RightColumn/TabSwitcher/TabButtons" unique_id=748682284]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
text = "Shop" text = "Shop"
[node name="MenuTabButton" type="Button" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/TabSwitcher/TabButtons" unique_id=1414728414] [node name="MenuTabButton" type="Button" parent="GameArea/MainAreaMargin/MainArea/RightColumn/TabSwitcher/TabButtons" unique_id=1414728414]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
text = "Menu" text = "Menu"
[node name="MainMargin" type="MarginContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn" unique_id=562508461] [node name="MainMargin" type="MarginContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn" unique_id=562508461]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3 size_flags_vertical = 3
theme_override_constants/margin_left = 10 theme_override_constants/margin_left = 10
theme_override_constants/margin_right = 10 theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10 theme_override_constants/margin_bottom = 10
[node name="JobsTab" type="PanelContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin" unique_id=859027615] [node name="JobsTab" type="PanelContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin" unique_id=859027615]
unique_name_in_owner = true unique_name_in_owner = true
visible = false
layout_mode = 2 layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_cqvjp") theme_override_styles/panel = SubResource("StyleBoxFlat_cqvjp")
[node name="JobScroll" type="ScrollContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/JobsTab" unique_id=1046443254] [node name="JobScroll" type="ScrollContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/JobsTab" unique_id=1046443254]
layout_mode = 2 layout_mode = 2
horizontal_scroll_mode = 0 horizontal_scroll_mode = 0
[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/JobsTab/JobScroll" unique_id=708828708] [node name="MarginContainer" type="MarginContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/JobsTab/JobScroll" unique_id=708828708]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
@ -204,23 +235,25 @@ theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10 theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10 theme_override_constants/margin_bottom = 10
[node name="JobContainer" type="VBoxContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/JobsTab/JobScroll/MarginContainer" unique_id=1821891785] [node name="JobContainer" type="VBoxContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/JobsTab/JobScroll/MarginContainer" unique_id=1821891785]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
theme_override_constants/separation = 8 theme_override_constants/separation = 8
[node name="ShopTab" type="PanelContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin" unique_id=23859514] [node name="JobCard" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/JobsTab/JobScroll/MarginContainer/JobContainer" unique_id=1714388686 instance_placeholder="res://Scenes/Job/job_card.tscn"]
layout_mode = 2
[node name="ShopTab" type="PanelContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin" unique_id=23859514]
unique_name_in_owner = true unique_name_in_owner = true
visible = false
layout_mode = 2 layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_vqjbf") theme_override_styles/panel = SubResource("StyleBoxFlat_vqjbf")
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab" unique_id=1098619767] [node name="VBoxContainer" type="VBoxContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab" unique_id=1098619767]
layout_mode = 2 layout_mode = 2
[node name="ShopTabSwitcher" type="MarginContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer" unique_id=40136169] [node name="ShopTabSwitcher" type="MarginContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer" unique_id=40136169]
layout_mode = 2 layout_mode = 2
theme_override_constants/margin_left = 10 theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10 theme_override_constants/margin_top = 10
@ -228,32 +261,33 @@ theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10 theme_override_constants/margin_bottom = 10
script = ExtResource("14_vqjbf") script = ExtResource("14_vqjbf")
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/ShopTabSwitcher" unique_id=1669205646] [node name="HBoxContainer" type="HBoxContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/ShopTabSwitcher" unique_id=1669205646]
layout_mode = 2 layout_mode = 2
[node name="PrintersButton" type="Button" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/ShopTabSwitcher/HBoxContainer" unique_id=96323903] [node name="PrintersButton" type="Button" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/ShopTabSwitcher/HBoxContainer" unique_id=96323903]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
text = "Printers" text = "Printers"
[node name="FilamentsButton" type="Button" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/ShopTabSwitcher/HBoxContainer" unique_id=659653173] [node name="FilamentsButton" type="Button" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/ShopTabSwitcher/HBoxContainer" unique_id=659653173]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
text = "Filaments" text = "Filaments"
[node name="Printers" type="PanelContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer" unique_id=1896524960] [node name="Printers" type="PanelContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer" unique_id=1896524960]
unique_name_in_owner = true unique_name_in_owner = true
visible = false
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3 size_flags_vertical = 3
theme_override_styles/panel = SubResource("StyleBoxFlat_qru7b") theme_override_styles/panel = SubResource("StyleBoxFlat_qru7b")
script = ExtResource("15_vqjbf") script = ExtResource("15_vqjbf")
printers_array = Array[ExtResource("16_rdojl")]([ExtResource("17_llrls"), ExtResource("18_8rt22"), ExtResource("19_1ohgd")]) printers_array = Array[ExtResource("16_rdojl")]([ExtResource("17_llrls"), ExtResource("18_8rt22"), ExtResource("19_1ohgd")])
[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/Printers" unique_id=1757920718] [node name="ScrollContainer" type="ScrollContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/Printers" unique_id=1757920718]
layout_mode = 2 layout_mode = 2
horizontal_scroll_mode = 0 horizontal_scroll_mode = 0
[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/Printers/ScrollContainer" unique_id=64943590] [node name="MarginContainer" type="MarginContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/Printers/ScrollContainer" unique_id=64943590]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
@ -262,31 +296,64 @@ theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10 theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10 theme_override_constants/margin_bottom = 10
[node name="PrinterList" type="VBoxContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/Printers/ScrollContainer/MarginContainer" unique_id=474412195] [node name="PrinterList" type="VBoxContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/Printers/ScrollContainer/MarginContainer" unique_id=474412195]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
theme_override_constants/separation = 8 theme_override_constants/separation = 8
[node name="Filaments" type="PanelContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer" unique_id=1891341317] [node name="Filaments" type="PanelContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer" unique_id=1891341317]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3
theme_override_styles/panel = SubResource("StyleBoxFlat_mmlst")
script = ExtResource("9_mbl0m")
filaments_array = Array[ExtResource("10_vy225")]([ExtResource("11_fy0us"), ExtResource("12_fy0us")])
[node name="MenuTab" type="PanelContainer" parent="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin" unique_id=526907583] [node name="ScrollContainer" type="ScrollContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/Filaments" unique_id=1087434821]
layout_mode = 2
horizontal_scroll_mode = 0
[node name="MarginContainer" type="MarginContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/Filaments/ScrollContainer" unique_id=1350479691]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="FilamentList" type="VBoxContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/Filaments/ScrollContainer/MarginContainer" unique_id=1017092781]
unique_name_in_owner = true
layout_mode = 2
theme_override_constants/separation = 8
[node name="MenuTab" type="PanelContainer" parent="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin" unique_id=526907583]
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false
layout_mode = 2 layout_mode = 2
[node name="UiNotification" parent="." unique_id=1468421214 instance=ExtResource("2_s3gqk")]
layout_mode = 0
anchors_preset = 0
anchor_right = 0.0
anchor_bottom = 0.0
offset_right = 1152.0
offset_bottom = 649.0
grow_horizontal = 1
grow_vertical = 1
[node name="JobSpawner" type="Timer" parent="." unique_id=1696213535] [node name="JobSpawner" type="Timer" parent="." unique_id=1696213535]
autostart = true autostart = true
[connection signal="pressed" from="VBoxContainer/TopBar/VBoxContainer/MarginContainer/HBoxContainer/DebugMoney" to="." method="_on_debug_money_pressed"] [node name="Inventory" type="Node" parent="." unique_id=459920508]
[connection signal="pressed" from="VBoxContainer/TopBar/VBoxContainer/MarginContainer/HBoxContainer/DebugXP" to="." method="_on_debug_xp_pressed"] unique_name_in_owner = true
[connection signal="pressed" from="VBoxContainer/TopBar/VBoxContainer/MarginContainer/HBoxContainer/DebugButton" to="." method="_on_debug_button_pressed"]
[connection signal="pressed" from="VBoxContainer/MainAreaMargin/MainArea/RightColumn/TabSwitcher/TabButtons/JobsTabButton" to="VBoxContainer/MainAreaMargin/MainArea/RightColumn/TabSwitcher" method="_on_jobs_tab_button_pressed"] [connection signal="pressed" from="GameArea/TopBar/VBoxContainer/MarginContainer/HBoxContainer/DebugMoney" to="." method="_on_debug_money_pressed"]
[connection signal="pressed" from="VBoxContainer/MainAreaMargin/MainArea/RightColumn/TabSwitcher/TabButtons/ShopTabButton" to="VBoxContainer/MainAreaMargin/MainArea/RightColumn/TabSwitcher" method="_on_shop_tab_button_pressed"] [connection signal="pressed" from="GameArea/TopBar/VBoxContainer/MarginContainer/HBoxContainer/DebugXP" to="." method="_on_debug_xp_pressed"]
[connection signal="pressed" from="VBoxContainer/MainAreaMargin/MainArea/RightColumn/TabSwitcher/TabButtons/MenuTabButton" to="VBoxContainer/MainAreaMargin/MainArea/RightColumn/TabSwitcher" method="_on_menu_tab_button_pressed"] [connection signal="pressed" from="GameArea/TopBar/VBoxContainer/MarginContainer/HBoxContainer/DebugButton" to="." method="_on_debug_button_pressed"]
[connection signal="pressed" from="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/ShopTabSwitcher/HBoxContainer/PrintersButton" to="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/ShopTabSwitcher" method="_on_printers_button_pressed"] [connection signal="pressed" from="GameArea/MainAreaMargin/MainArea/RightColumn/TabSwitcher/TabButtons/JobsTabButton" to="GameArea/MainAreaMargin/MainArea/RightColumn/TabSwitcher" method="_on_jobs_tab_button_pressed"]
[connection signal="pressed" from="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/ShopTabSwitcher/HBoxContainer/FilamentsButton" to="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/ShopTabSwitcher" method="_on_filaments_button_pressed"] [connection signal="pressed" from="GameArea/MainAreaMargin/MainArea/RightColumn/TabSwitcher/TabButtons/ShopTabButton" to="GameArea/MainAreaMargin/MainArea/RightColumn/TabSwitcher" method="_on_shop_tab_button_pressed"]
[connection signal="printer_purchase_requested" from="VBoxContainer/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/Printers" to="." method="_on_printers_printer_purchase_requested"] [connection signal="pressed" from="GameArea/MainAreaMargin/MainArea/RightColumn/TabSwitcher/TabButtons/MenuTabButton" to="GameArea/MainAreaMargin/MainArea/RightColumn/TabSwitcher" method="_on_menu_tab_button_pressed"]
[connection signal="timeout" from="JobSpawner" to="." method="_on_job_spawner_timeout"] [connection signal="pressed" from="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/ShopTabSwitcher/HBoxContainer/PrintersButton" to="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/ShopTabSwitcher" method="_on_printers_button_pressed"]
[connection signal="pressed" from="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/ShopTabSwitcher/HBoxContainer/FilamentsButton" to="GameArea/MainAreaMargin/MainArea/RightColumn/MainMargin/ShopTab/VBoxContainer/ShopTabSwitcher" method="_on_filaments_button_pressed"]

View file

@ -0,0 +1,11 @@
extends Control
@onready var message_label: RichTextLabel = $Base/Margin/Message
@onready var animation_player: AnimationPlayer = $AnimationPlayer
func _ready() -> void:
GameData.notification_requested.connect(_on_notification_requested)
func _on_notification_requested(message: String, color: String) -> void:
message_label.text = '[color=%s]%s[/color]' % [color, message]
animation_player.play("show_notification")

View file

@ -0,0 +1 @@
uid://y3jtgv0vknvk

View file

@ -0,0 +1,104 @@
[gd_scene format=3 uid="uid://c4tdg221rvm53"]
[ext_resource type="Script" uid="uid://y3jtgv0vknvk" path="res://Scenes/UI/ui_notification.gd" id="1_7y7gh"]
[sub_resource type="Animation" id="Animation_8qs5e"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Base:position:y")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [-50.0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Base:modulate:a")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [1.0]
}
[sub_resource type="Animation" id="Animation_np30a"]
resource_name = "show_notification"
length = 3.0000000000000004
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Base:position:y")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.29999995),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [-50.0, 10.0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Base:modulate:a")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.5, 3),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [1.0, 1.0, 0.0]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_7ag70"]
_data = {
&"RESET": SubResource("Animation_8qs5e"),
&"show_notification": SubResource("Animation_np30a")
}
[node name="UiNotification" type="Control" unique_id=1468421214]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
script = ExtResource("1_7y7gh")
[node name="Base" type="PanelContainer" parent="." unique_id=870318481]
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -79.0
offset_top = -50.0
offset_right = 79.0
offset_bottom = -7.0
grow_horizontal = 2
[node name="Margin" type="MarginContainer" parent="Base" unique_id=716680500]
layout_mode = 2
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="Message" type="RichTextLabel" parent="Base/Margin" unique_id=438265807]
layout_mode = 2
bbcode_enabled = true
text = "Example message"
fit_content = true
autowrap_mode = 0
horizontal_alignment = 1
vertical_alignment = 1
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=152270752]
libraries/ = SubResource("AnimationLibrary_7ag70")

View file

@ -1,21 +1,45 @@
extends MarginContainer extends MarginContainer
@onready var jobs_tab_button: Button = $TabButtons/JobsTabButton
@onready var shop_tab_button: Button = $TabButtons/ShopTabButton
@onready var menu_tab_button: Button = $TabButtons/MenuTabButton
func _ready() -> void: func _ready() -> void:
%JobsTab.visible = true %JobsTab.visible = true
%ShopTab.visible = false %ShopTab.visible = false
%MenuTab.visible = false %MenuTab.visible = false
disable_buttons("jobs")
func _on_jobs_tab_button_pressed() -> void: func _on_jobs_tab_button_pressed() -> void:
%JobsTab.visible = true %JobsTab.visible = true
%ShopTab.visible = false %ShopTab.visible = false
%MenuTab.visible = false %MenuTab.visible = false
disable_buttons("jobs")
func _on_shop_tab_button_pressed() -> void: func _on_shop_tab_button_pressed() -> void:
%JobsTab.visible = false %JobsTab.visible = false
%ShopTab.visible = true %ShopTab.visible = true
%MenuTab.visible = false %MenuTab.visible = false
disable_buttons("shop")
func _on_menu_tab_button_pressed() -> void: func _on_menu_tab_button_pressed() -> void:
%JobsTab.visible = false %JobsTab.visible = false
%ShopTab.visible = false %ShopTab.visible = false
%MenuTab.visible = true %MenuTab.visible = true
disable_buttons("menu")
func disable_buttons(tab: String) -> void:
jobs_tab_button.disabled = true
shop_tab_button.disabled = true
menu_tab_button.disabled = true
match tab:
"jobs":
shop_tab_button.disabled = false
menu_tab_button.disabled = false
"shop":
jobs_tab_button.disabled = false
menu_tab_button.disabled = false
"menu":
jobs_tab_button.disabled = false
shop_tab_button.disabled = false

View file

@ -8,10 +8,11 @@ name="Linux"
platform="Linux" platform="Linux"
dedicated_server=false dedicated_server=false
custom_features="" custom_features=""
export_filter="all_resources" export_filter="scenes"
export_files=PackedStringArray("res://Scenes/Map/Map.tscn", "res://Scenes/Map/map_tile.tscn")
include_filter="" include_filter=""
exclude_filter="" exclude_filter=""
export_path="Releases/PrintingSim-v0.1" export_path="Releases/PrintingSim-stable"
patches=PackedStringArray() patches=PackedStringArray()
patch_delta_encoding=false patch_delta_encoding=false
patch_delta_compression_level_zstd=19 patch_delta_compression_level_zstd=19

View file

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2016-2023 The Godot Engine community
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

File diff suppressed because it is too large Load diff

View file

@ -1,10 +0,0 @@
[configuration]
entry_symbol = "git_plugin_init"
compatibility_minimum = "4.2.0"
[libraries]
linux.editor.x86_64 = "linux/libgit_plugin.linux.editor.x86_64.so"
macos.editor = "macos/libgit_plugin.macos.editor.universal.dylib"
windows.editor.x86_64 = "windows/libgit_plugin.windows.editor.x86_64.dll"

View file

@ -1,2 +0,0 @@
godot-mainpc: b7bb31ea02eee907534e614b3e9e34af74ce5bed
test

View file

@ -20,11 +20,6 @@ config/icon="res://icon.svg"
PlayerData="*uid://5g1fp4otancm" PlayerData="*uid://5g1fp4otancm"
GameData="*uid://d3abg1dpwrkmq" GameData="*uid://d3abg1dpwrkmq"
[editor]
version_control/plugin_name="GitPlugin"
version_control/autoload_on_startup=true
[physics] [physics]
3d/physics_engine="Jolt Physics" 3d/physics_engine="Jolt Physics"
@ -33,3 +28,4 @@ version_control/autoload_on_startup=true
rendering_device/driver.windows="d3d12" rendering_device/driver.windows="d3d12"
renderer/rendering_method="mobile" renderer/rendering_method="mobile"
environment/defaults/default_clear_color=Color(0, 0, 0, 1)