Added GameData global script and moved job generation to it from UI

This commit is contained in:
jepsu 2026-06-27 00:33:03 +03:00
parent ebc7294339
commit 57aa8c867c
5 changed files with 80 additions and 22 deletions

View file

@ -0,0 +1,57 @@
extends Node
signal job_generated(job: JobData)
var job_spawn_timer: Timer
var jobs_array: Array[JobData]
#Job spawn interval
const JOB_SPAWN_WAIT: float = 2.0
const MAX_JOBS: int = 4
var current_job_count: int = 0
func _ready() -> void:
load_all_jobs("res://Resources/Jobs/")
# Create timer for job spawning
job_spawn_timer = Timer.new()
add_child(job_spawn_timer)
job_spawn_timer.wait_time = JOB_SPAWN_WAIT
job_spawn_timer.one_shot = false
job_spawn_timer.timeout.connect(_on_job_spawn_timer_timeout)
job_spawn_timer.start()
func _on_job_spawn_timer_timeout() -> void:
print("Spawn timer over")
generate_job()
func generate_job():
if not current_job_count >= MAX_JOBS:
var random_job: JobData = jobs_array.pick_random()
current_job_count += 1
print("Generated job: ")
print(random_job)
job_generated.emit(random_job)
# 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")

View file

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

View file

@ -19,6 +19,7 @@ func initialize_printer(data: PrinterData) -> void:
printer_name_label.text = printer_data.printer_manufacturer
printer_model_label.text = printer_data.printer_type
time_left_label.visible = false
time_left = 0
set_status()
progress_bar.visible = false
progress_bar.value = 0
@ -30,7 +31,7 @@ func _process(delta) -> void:
progress_bar.visible = true
time_left_label.visible = true
set_status()
var total_time = selected_job.job_time
var total_time = selected_job.job_time / printer_data.printer_speed
var progress = (total_time - time_left) / total_time
time_left -= delta
progress_bar.value = progress
@ -76,15 +77,17 @@ func _on_sell_button_pressed() -> void:
queue_free()
func _on_select_job_pressed() -> void:
select_job.clear()
#if selected_job != null:
#PlayerData.jobs.append(selected_job)
select_job.clear()
if PlayerData.jobs.is_empty():
select_job.add_item("No jobs accepted")
start_button.disabled = true
else:
start_button.disabled = false
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)]
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)]
select_job.add_item(item_text)
var current_index = select_job.item_count - 1
@ -96,7 +99,8 @@ func _on_start_button_pressed() -> void:
if select_job.get_item_text(0) == "No jobs accepted":
print("No job selected")
else:
time_left = selected_job.job_time
time_left = selected_job.job_time / printer_data.printer_speed
progress_bar.value = 0
is_printing = true
_on_select_job_pressed()
@ -104,3 +108,4 @@ 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
#PlayerData.jobs.remove_at(index)

View file

@ -15,6 +15,8 @@ const PRINTER = preload("uid://33ctlyrpibs3")
func _ready() -> void:
check_debug()
print(jobs_array)
%Money.text = "Money: " + str(PlayerData.money) + ""
%Experience.value = PlayerData.xp
%Level.text = "Level: " + str(PlayerData.level)
@ -23,18 +25,7 @@ func _ready() -> void:
PlayerData.xp_changed.connect(_on_xp_changed)
PlayerData.level_changed.connect(_on_level_changed)
PlayerData.money_changed.connect(_on_money_changed)
func generate_job():
var job_count = %JobContainer.get_children()
if not job_count.size() >= job_limit:
var random_job: JobData = jobs_array.pick_random()
var new_job = JOB_SCENE.instantiate()
%JobContainer.add_child(new_job)
new_job.initialize_job(random_job)
job_count = %JobContainer.get_children()
jobs_tab_button.text = "Jobs (" + str(job_count.size()) + "/" + str(job_limit) + ")"
new_job.job_accepted.connect(_on_job_accepted_pressed)
GameData.job_generated.connect(_on_job_generated)
# --- Experience, Level and Money update ---
func _on_xp_changed(xp):
@ -44,17 +35,20 @@ func _on_level_changed(level):
func _on_money_changed(money):
%Money.text = "Money: " + str(money) + ""
func _on_job_generated(job: JobData):
var new_job = JOB_SCENE.instantiate()
%JobContainer.add_child(new_job)
new_job.initialize_job(job)
jobs_tab_button.text = "Jobs (" + str(GameData.current_job_count) + "/" + str(GameData.MAX_JOBS) + ")"
new_job.job_accepted.connect(_on_job_accepted_pressed)
func _on_job_accepted_pressed(accepted_job):
print("Job accepted")
PlayerData.jobs.append(accepted_job.job_data)
print(PlayerData.jobs[0].job_name)
GameData.current_job_count -= 1
accepted_job.queue_free()
var job_count = %JobContainer.get_child_count() - 1
jobs_tab_button.text = "Jobs (" + str(job_count) + "/" + str(job_limit) + ")"
func _on_job_spawner_timeout() -> void:
generate_job()
jobs_tab_button.text = "Jobs (" + str(GameData.current_job_count) + "/" + str(GameData.MAX_JOBS) + ")"
func _on_printers_printer_purchase_requested(printer_data: PrinterData) -> void:
if PlayerData.try_purchase(printer_data.printer_price):

View file

@ -18,6 +18,7 @@ config/icon="res://icon.svg"
[autoload]
PlayerData="*uid://5g1fp4otancm"
GameData="*uid://d3abg1dpwrkmq"
[editor]