private IEnumerator ProcessJobs() { while (true) { yield return(new WaitForSeconds(jobUpdateCooldown)); if (_availableJobs.Count == 0 || _availableWorkers.Count == 0) { continue; } for (int j = _availableWorkers.Count - 1; j >= 0; j--) { JobHandlerComponent worker = _availableWorkers[j]; for (int i = _availableJobs.Count - 1; i >= 0; i--) { if (_availableJobs[i].CanDoJob(worker)) { worker.AssignJob(_availableJobs[i]); _availableJobs.RemoveAt(i); break; } } } } }
public override bool CanDoJob(JobHandlerComponent worker) { if (_wasJobCanceled) { JobSystem.GetInstance().DeleteJob(this); return(false); } //check that worker can actually get to the dropPosition if (!base.CanDoJob(worker)) { return(false); } //item search Func <Tile, bool> requirementsFunction = delegate(Tile tile) { if (tile == null) { return(false); } else { if (tile.Contents.HasItem) { return(tile.Contents.Item.GetType().Equals(ItemType) && tile.Contents.Item.HasHaulJob == false); } else { return(false); } } }; Tile t = SearchEngine.FindClosestBySubregionTileWhere(worker.MotionComponent.GridPosition, requirementsFunction, true); if (t == null) { JobSystem.GetInstance().StartCoroutine(JobSystem.GetInstance().HideJobForSeconds(this, 5f)); return(false); } else { _item = t.Contents.Item; return(true); } ///////////////// }
public virtual bool CanDoJob(JobHandlerComponent worker) { if (worker.IsAvailable == false) { return(false); } Node jobNode = Utils.NodeAt(Position); Node workerNode = Utils.NodeAt(worker.MotionComponent.GridPosition); if (SearchEngine.FindNodeNear(jobNode, workerNode) is null) { return(false); } return(true); }
public bool HasWorker(JobHandlerComponent worker) { return(_availableWorkers.Contains(worker)); }
public void RemoveWorker(JobHandlerComponent worker) => _availableWorkers.Remove(worker);
public void AddWorker(JobHandlerComponent worker) { _availableWorkers.Add(worker); ProcessJobs(); }
private void InitializeJobHandler() { JobHandlerComponent = new JobHandlerComponent(this); Components.Add(JobHandlerComponent); }
public void AssignWorker(JobHandlerComponent worker) { _worker = worker; PlanJob(); }