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