Exemplo n.º 1
0
 public void Unload()
 {
     octree.RemoveAll();
     RemoveQueue.Clear();
     AddQueue.Clear();
     faceBatch.Update();
 }
Exemplo n.º 2
0
        public void Do()
        {
            OctreeAdd    tmp;
            OctreeRemove remove;

            while (true)
            {
                System.Console.WriteLine("working it.");
                while (AddQueue.Count > 0)
                {
                    tmp = AddQueue.Dequeue();
                    if (tmp == null)
                    {
                        continue;
                    }
                    if (tmp.x >= Size.X || tmp.y >= Size.Y || tmp.z >= Size.Z || tmp.x < 0 || tmp.y < 0 || tmp.z < 0)
                    {
                        continue;
                    }
                    if (root == null)
                    {
                        this.root = new OctreeNode((int)Math.Max(Size.X, Math.Max(Size.Y, Size.Z)), 0, 0, 0, ref tmp.color);
                    }

                    root.Add(tmp.x, tmp.y, tmp.z, tmp.size, ref tmp.color);
                }


                while (RemoveQueue.Count > 0)
                {
                    remove = RemoveQueue.Dequeue();
                    if (root == null)
                    {
                        continue;
                    }
                    root.Remove(remove.x, remove.y, remove.z);
                    UpdateNeighbors(remove.x, remove.y, remove.z);
                }

                faceBatch.Update();
            }
        }