Added GameData global script and moved job generation to it from UI
This commit is contained in:
parent
ebc7294339
commit
57aa8c867c
5 changed files with 80 additions and 22 deletions
57
Scenes/Global/game_data.gd
Normal file
57
Scenes/Global/game_data.gd
Normal 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")
|
||||
1
Scenes/Global/game_data.gd.uid
Normal file
1
Scenes/Global/game_data.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://d3abg1dpwrkmq
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ config/icon="res://icon.svg"
|
|||
[autoload]
|
||||
|
||||
PlayerData="*uid://5g1fp4otancm"
|
||||
GameData="*uid://d3abg1dpwrkmq"
|
||||
|
||||
[editor]
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue