public void DestroyHeightField(ObiHeightFieldHandle handle) { if (handle != null && handle.isValid && handle.index < handles.Count) { var header = headers[handle.index]; // Update headers: for (int i = 0; i < headers.count; ++i) { var h = headers[i]; if (h.firstSample > header.firstSample) { h.firstSample -= header.sampleCount; headers[i] = h; } } // update handles: foreach (var pair in handles) { if (pair.Value.index > handle.index) { pair.Value.index--; } } // Remove nodes samples.RemoveRange(header.firstSample, header.sampleCount); // remove header: headers.RemoveAt(handle.index); // remove the heightfield from the dictionary: handles.Remove(handle.owner); // Invalidate our handle: handle.Invalidate(); } }