using UnityEngine; using System.Collections.Generic; public class JobManager : MonoBehaviour { public static JobManager Instance; private Building targetBuilding; private Resource targetResource; private NPC targetNPC; void Awake() { Instance = this; } public Building RequestJob(NPC.Job jobType) { switch (jobType) { case NPC.Job.Builder: targetBuilding = GetUnfinishedBuildings(); if(targetBuilding != null) { return targetBuilding; } break; } return null; } private Building GetUnfinishedBuildings() { Building[] buildings = GameManager.Instance.CountBuildings(); List candidates = new List(); foreach (Building building in buildings) { var state = building.GetBuildingState(); if (state == Building.BuildingState.Unbuilt) { if (CanBuildBuilding(building)) { candidates.Add(building); } } else if (state == Building.BuildingState.Constructing) { // Allow additional builders to join already-constructing buildings candidates.Add(building); } } if (candidates.Count == 0) return null; int idx = Random.Range(0, candidates.Count); return candidates[idx]; } private bool CanBuildBuilding(Building building) { Resource.ResourceType[] requiredResources = building.GetResourceRequirement(); int[] requiredCosts = building.GetConstructionCost(); if (requiredResources == null || requiredCosts == null) { Debug.LogWarning("Building missing resource or cost arrays"); return false; } if (requiredResources.Length != requiredCosts.Length) { Debug.LogWarning("Building resource and cost arrays don't match in length"); return false; } for (int i = 0; i < requiredResources.Length; i++) { if (GameManager.Instance.GetResource(requiredResources[i]) < requiredCosts[i]) { return false; } } return true; } }