public DynamicFlatLodGRingNodeTerrain(INewGRingListenersCreator listenersCreator,
                                       FlatLodCalculator flatLodCalculator, Ring1Node node)
 {
     _listenersCreator  = listenersCreator;
     _flatLodCalculator = flatLodCalculator;
     _node = node;
 }
        public IAsyncGRingNodeListener CreateNewListener(Ring1Node node, FlatLod lod)
        {
            var creatorsFilteredList = _creatorsList
                                       .Where(c => c.PositionLimiter == null || c.PositionLimiter.IsAccepted(node))
                                       .Where(c => c.MaximumLod.ScalarValue >= lod.ScalarValue)
                                       .OrderBy(c => c.MaximumLod.ScalarValue).Select(c => c.Creator).ToList();

            INewGRingListenersCreator creator = null;

            if (creatorsFilteredList.Any())
            {
                creator = creatorsFilteredList.First();
            }
            else
            {
                creator =
                    _creatorsList.Where(c => c.IsFallthroughCreator).Select(c => c.Creator).First();
            }

            return(creator.CreateNewListener(node, lod));
        }
 public DynamicFlatLodGRingNodeTerrainCreator(INewGRingListenersCreator subCreator,
                                              FlatLodCalculator flatLodCalculator)
 {
     _subCreator        = subCreator;
     _flatLodCalculator = flatLodCalculator;
 }