예제 #1
0
        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);
        }
예제 #2
0
 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);
 }