Esempio n. 1
0
        public T Get(long x, long y, long z)
        {
            FilteredConsole.Write(FilterCategory.OctreeGetTracing, "GET " + x + ", " + y + ", " + z + "");
            PositionOctreeNode <T> current = this;

            while (current != null && current.m_CurrentDepth != current.m_MaximalDepth)
            {
                if ((x & current.GetMaskAtDepth()) == 0)
                {
                    if ((y & current.GetMaskAtDepth()) == 0)
                    {
                        if ((z & current.GetMaskAtDepth()) == 0)
                        {
                            current = current.m_Nodes[0] ?? null;
                            FilteredConsole.Write(FilterCategory.OctreeGetTracing, "0 - ");
                        }
                        else
                        {
                            current = current.m_Nodes[1] ?? null;
                            FilteredConsole.Write(FilterCategory.OctreeGetTracing, "1 - ");
                        }
                    }
                    else
                    {
                        if ((z & current.GetMaskAtDepth()) == 0)
                        {
                            current = current.m_Nodes[2] ?? null;
                            FilteredConsole.Write(FilterCategory.OctreeGetTracing, "2 - ");
                        }
                        else
                        {
                            current = current.m_Nodes[3] ?? null;
                            FilteredConsole.Write(FilterCategory.OctreeGetTracing, "3 - ");
                        }
                    }
                }
                else
                {
                    if ((y & current.GetMaskAtDepth()) == 0)
                    {
                        if ((z & current.GetMaskAtDepth()) == 0)
                        {
                            current = current.m_Nodes[4] ?? null;
                            FilteredConsole.Write(FilterCategory.OctreeGetTracing, "4 - ");
                        }
                        else
                        {
                            current = current.m_Nodes[5] ?? null;
                            FilteredConsole.Write(FilterCategory.OctreeGetTracing, "5 - ");
                        }
                    }
                    else
                    {
                        if ((z & current.GetMaskAtDepth()) == 0)
                        {
                            current = current.m_Nodes[6] ?? null;
                            FilteredConsole.Write(FilterCategory.OctreeGetTracing, "6 - ");
                        }
                        else
                        {
                            current = current.m_Nodes[7] ?? null;
                            FilteredConsole.Write(FilterCategory.OctreeGetTracing, "7 - ");
                        }
                    }
                }

                if (current != null && current.m_CurrentDepth % 8 == 0)
                {
                    FilteredConsole.WriteLine(FilterCategory.OctreeGetTracing, "");
                }
            }
            FilteredConsole.WriteLine(FilterCategory.OctreeGetTracing, "");
            if (current == null)
            {
                return(null);
            }
            return(current.m_Value);
        }
Esempio n. 2
0
        public void Set(T value, long x, long y, long z)
        {
            FilteredConsole.Write(FilterCategory.OctreeSetTracing, "SET " + x + ", " + y + ", " + z + "");
            PositionOctreeNode <T> current = this;

            while (current != null && current.m_CurrentDepth != current.m_MaximalDepth)
            {
                if ((x & current.GetMaskAtDepth()) == 0)
                {
                    if ((y & current.GetMaskAtDepth()) == 0)
                    {
                        if ((z & current.GetMaskAtDepth()) == 0)
                        {
                            if (current.m_Nodes[0] == null)
                            {
                                current.m_Nodes[0] = current.CreateSubnode(-1, -1, -1);
                            }
                            current = current.m_Nodes[0];
                            FilteredConsole.Write(FilterCategory.OctreeSetTracing, "0 - ");
                        }
                        else
                        {
                            if (current.m_Nodes[1] == null)
                            {
                                current.m_Nodes[1] = current.CreateSubnode(-1, -1, 1);
                            }
                            current = current.m_Nodes[1];
                            FilteredConsole.Write(FilterCategory.OctreeSetTracing, "1 - ");
                        }
                    }
                    else
                    {
                        if ((z & current.GetMaskAtDepth()) == 0)
                        {
                            if (current.m_Nodes[2] == null)
                            {
                                current.m_Nodes[2] = current.CreateSubnode(-1, 1, -1);
                            }
                            current = current.m_Nodes[2];
                            FilteredConsole.Write(FilterCategory.OctreeSetTracing, "2 - ");
                        }
                        else
                        {
                            if (current.m_Nodes[3] == null)
                            {
                                current.m_Nodes[3] = current.CreateSubnode(-1, 1, 1);
                            }
                            current = current.m_Nodes[3];
                            FilteredConsole.Write(FilterCategory.OctreeSetTracing, "3 - ");
                        }
                    }
                }
                else
                {
                    if ((y & current.GetMaskAtDepth()) == 0)
                    {
                        if ((z & current.GetMaskAtDepth()) == 0)
                        {
                            if (current.m_Nodes[4] == null)
                            {
                                current.m_Nodes[4] = current.CreateSubnode(1, -1, -1);
                            }
                            current = current.m_Nodes[4];
                            FilteredConsole.Write(FilterCategory.OctreeSetTracing, "4 - ");
                        }
                        else
                        {
                            if (current.m_Nodes[5] == null)
                            {
                                current.m_Nodes[5] = current.CreateSubnode(1, -1, 1);
                            }
                            current = current.m_Nodes[5];
                            FilteredConsole.Write(FilterCategory.OctreeSetTracing, "5 - ");
                        }
                    }
                    else
                    {
                        if ((z & current.GetMaskAtDepth()) == 0)
                        {
                            if (current.m_Nodes[6] == null)
                            {
                                current.m_Nodes[6] = current.CreateSubnode(1, 1, -1);
                            }
                            current = current.m_Nodes[6];
                            FilteredConsole.Write(FilterCategory.OctreeSetTracing, "6 - ");
                        }
                        else
                        {
                            if (current.m_Nodes[7] == null)
                            {
                                current.m_Nodes[7] = current.CreateSubnode(1, 1, 1);
                            }
                            current = current.m_Nodes[7];
                            FilteredConsole.Write(FilterCategory.OctreeSetTracing, "7 - ");
                        }
                    }
                }
            }

            FilteredConsole.WriteLine(FilterCategory.OctreeSetTracing, "");
            current.m_Value = value;
        }