public void AssignWorkToRobots(float deltaTime) { for (int i = workItems.Count - 1; i >= 0; i -= 1) { WorkItem w = workItems[i]; if (!w.IsItReadyYet()) { continue; } Entity worker = null; float dist = 0; float nearest = 0; /* * int closeByIdle = World.current.entities.Count( * e => e.typeName == "entities::basic_robot" * && e.state == "idle" * && w.workTile.chunk == e.pos.chunk); * * int closeByReady = World.current.entities.Count( * e => e.typeName == "entities::basic_robot" * && e.state == "find_work" * && w.workTile.chunk == e.pos.chunk); * * if (closeByIdle > 0 && closeByReady == 0) continue; */ foreach (Entity robot in World.current.entities.Where(e => e.state == "find_work")) { dist = Funcs.TaxiDistance(w.workTile, robot.pos); if (worker == null || dist < nearest) { worker = robot; nearest = dist; } } if (worker != null) { worker.work = w; worker.state = "init_work"; w.Assign(worker); assignedWork.Add(w); workItems.Remove(w); //Debug.Log("gave work " + w.ToString()+ " to " + worker.name); } } }