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);
                }
            }
        }