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