public void Run(IAABBox startViewBox, IQuadTreeNode rootNode, IArrayBackgroundWorkerListener listener) { var visibleNodesCollector = new VisibleNodesCollector(); rootNode.VisitVisibleNodes(startViewBox, visibleNodesCollector); var planetFactory = mPlanetFactoryCreator.CreatePlanetFactory(); foreach (var curLeaf in visibleNodesCollector.GetVisibleLeaves()) { // ReSharper disable once PossibleNullReferenceException curLeaf.SetPlanets(planetFactory.CreatePlanetsForSector()); } var nodesInCameraCollector = new VisibleNodesCollector(); rootNode.VisitVisibleNodes(new AABBox(0f, 0f, mConstants.GetMaxCameraSize(), mConstants.GetMaxCameraSize()), nodesInCameraCollector); mBackgroundWorker.AddListener(listener); mBackgroundWorker.Run(nodesInCameraCollector.GetVisibleLeaves(), mPlanetFactoryCreator); }
public void VisitVisibleNodes(IAABBox cameraBox, INodeVisitor nodeVisitor) { if (!mBox.IsIntersect(cameraBox)) { return; } mTopLeft.VisitVisibleNodes(cameraBox, nodeVisitor); mTopRight.VisitVisibleNodes(cameraBox, nodeVisitor); mBottomLeft.VisitVisibleNodes(cameraBox, nodeVisitor); mBottomRight.VisitVisibleNodes(cameraBox, nodeVisitor); }