extends Node # - Signals signal job_generated(job: Node) signal job_interact signal printer_bought(printer: Node) signal filament_bought @warning_ignore("unused_signal") signal refresh_printer_dropdown signal notification_requested(message: String, color: String) # - Variables - Code managed var job_spawn_timer: Timer var jobs_array: Array[JobData] var current_job_count: int = 0 var filaments_array: Array[FilamentData] # - Text colors var hex_white: String = '#ffffff' var hex_green: String = '#4ade80' var hex_blue: String = '#60a5fa' var hex_red: String = '#f87171' # - Scenes const JOB_CARD = preload("uid://dvfcie8hqcb0") const PRINTER = preload("uid://33ctlyrpibs3") const ALL_JOBS = preload("uid://buvi8m3atoavu") # - Constants - Settings # Jobs const JOB_SPAWN_WAIT: float = 2.0 var max_jobs: int = PlayerData.max_order_amount func _ready() -> void: jobs_array = ALL_JOBS.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 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: if PlayerData.try_purchase(printer_data.printer_price): var new_printer = PRINTER.instantiate() printer_bought.emit(new_printer) 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): filaments_array.append(filament_data) filament_bought.emit() #endregion #region Job generation func _on_job_spawn_timer_timeout() -> void: #generate_job() draw_job() func generate_job() -> void: if not current_job_count >= max_jobs: var random_job: JobData = jobs_array.pick_random() current_job_count += 1 var new_job = JOB_CARD.instantiate() job_generated.emit(new_job) new_job.initialize_job(random_job) new_job.job_accepted.connect(_on_job_accepted_pressed) job_interact.emit() func draw_job() -> void: if not current_job_count >= max_jobs: var job: JobData = generate_random_job() current_job_count += 1 var new_job = JOB_CARD.instantiate() job_generated.emit(new_job) new_job.initialize_job(job) new_job.job_accepted.connect(_on_job_accepted_pressed) job_interact.emit() func generate_random_job() -> JobData: var new_job = JobData.new() var random_job: JobData = jobs_array.pick_random() var amount = randf_range(1, PlayerData.max_order_amount) new_job.job_name = random_job.job_name new_job.job_reward = random_job.job_reward * amount new_job.job_experience = random_job.job_experience * amount new_job.job_difficulty = random_job.job_difficulty new_job.job_amount = roundf(amount) return new_job func _on_job_accepted_pressed(accepted_job) -> void: PlayerData.jobs.append(accepted_job.job_data) GameData.current_job_count -= 1 accepted_job.queue_free() job_interact.emit() #endregion