Exemple #1
0
        public static void EndInteractiveGeneration(ref InteractiveGenerationContext context)
        {
            while (context.priorityQueue.Count > 0 &&
                   context.segments.Count < Config.segmentCountLimit &&
                   context.globalDerivationStep++ < Config.derivationStepLimit)
            {
                var item    = context.priorityQueue.Dequeue();
                var segment = item.Value;
                if (LocalConstraints(segment, context.segments, context.quadtree, context.debugData))
                {
                    segment.SetupBranchLinks();
                    AddSegment(segment, context.segments, context.quadtree);
                    var queueItems   = GlobalGoals(segment);
                    int basePriority = item.Priority + 1;
                    foreach (var queueItem in queueItems)
                    {
                        context.priorityQueue.Enqueue(queueItem.Item1, basePriority + queueItem.Item2);
                    }
                }
            }

            if (context.ended)
            {
                return;
            }

            context.ended = true;
        }
Exemple #2
0
        public static bool InteractiveGenerationStep(int speed, ref InteractiveGenerationContext context)
        {
            if (context.priorityQueue.Count == 0 || context.segments.Count >= Config.segmentCountLimit || context.globalDerivationStep >= Config.derivationStepLimit)
            {
                if (!context.ended)
                {
                    context.ended = true;
                }
                return(false);
            }

            int steps = 0;

            while (steps++ < speed &&
                   context.priorityQueue.Count > 0 &&
                   context.segments.Count < Config.segmentCountLimit &&
                   context.globalDerivationStep++ < Config.derivationStepLimit)
            {
                var item    = context.priorityQueue.Dequeue();
                var segment = item.Value;
                if (LocalConstraints(segment, context.segments, context.quadtree, context.debugData))
                {
                    segment.SetupBranchLinks();
                    AddSegment(segment, context.segments, context.quadtree);
                    var queueItems   = GlobalGoals(segment);
                    int basePriority = item.Priority + 1;
                    foreach (var queueItem in queueItems)
                    {
                        context.priorityQueue.Enqueue(queueItem.Item1, basePriority + queueItem.Item2);
                    }
                }
            }
            return(true);
        }