private void DequeByPositionType(PositionPointType positionType) { if (waitQueue[positionType].Any() && positions[positionType].Any(position => !position.occupied)) { // var freePosition = positions.Find(position => position.positionType == positionType && !position.occupied); var freePositions = positions[positionType].Where(position => !position.occupied).ToArray(); var freePosition = freePositions.ElementAt(Random.Range(0, freePositions.Count())); freePosition.occupied = true; waitQueue[positionType].Dequeue().FreePositionAvailable(freePosition); } }
public void RequestFreePositionWhenAvailable(IMoveToPointSubscriber subscriber, PositionPointType positionType) { waitQueue[positionType].Enqueue(subscriber); }