From 57aa8c867ce03c725c1b5ad02a61ee22b0cb3f2d Mon Sep 17 00:00:00 2001 From: jepsu Date: Sat, 27 Jun 2026 00:33:03 +0300 Subject: [PATCH] Added GameData global script and moved job generation to it from UI --- Scenes/Global/game_data.gd | 57 ++++++++++++++++++++++++++++++++++ Scenes/Global/game_data.gd.uid | 1 + Scenes/Printer/printer.gd | 13 +++++--- Scenes/UI/ui.gd | 30 +++++++----------- project.godot | 1 + 5 files changed, 80 insertions(+), 22 deletions(-) create mode 100644 Scenes/Global/game_data.gd create mode 100644 Scenes/Global/game_data.gd.uid diff --git a/Scenes/Global/game_data.gd b/Scenes/Global/game_data.gd new file mode 100644 index 0000000..a22743a --- /dev/null +++ b/Scenes/Global/game_data.gd @@ -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") diff --git a/Scenes/Global/game_data.gd.uid b/Scenes/Global/game_data.gd.uid new file mode 100644 index 0000000..cbd0a7e --- /dev/null +++ b/Scenes/Global/game_data.gd.uid @@ -0,0 +1 @@ +uid://d3abg1dpwrkmq diff --git a/Scenes/Printer/printer.gd b/Scenes/Printer/printer.gd index be0e74c..356e5a3 100644 --- a/Scenes/Printer/printer.gd +++ b/Scenes/Printer/printer.gd @@ -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) diff --git a/Scenes/UI/ui.gd b/Scenes/UI/ui.gd index bb01fd1..86256d9 100644 --- a/Scenes/UI/ui.gd +++ b/Scenes/UI/ui.gd @@ -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): diff --git a/project.godot b/project.godot index 8570af0..d332d24 100644 --- a/project.godot +++ b/project.godot @@ -18,6 +18,7 @@ config/icon="res://icon.svg" [autoload] PlayerData="*uid://5g1fp4otancm" +GameData="*uid://d3abg1dpwrkmq" [editor]