protected virtual bool TryDrillVoxels(MyVoxelBase voxels, Vector3D hitPosition, bool collectOre, bool onlyCheck, bool applyDamagedMaterial) { const float DISCARDING_MULTIPLIER = 3.0f; if (voxels.GetOrePriority() == MyVoxelConstants.PRIORITY_IGNORE_EXTRACTION) { return(false); } bool somethingDrilled = false; var bsphere = new MyShapeSphere() { Center = m_cutOut.Sphere.Center, Radius = (float)m_cutOut.Sphere.Radius }; if (!collectOre) { bsphere.Radius *= DISCARDING_MULTIPLIER; } float voxelsCountInPercent; MyVoxelMaterialDefinition material; MyVoxelGenerator.CutOutShapeWithProperties(voxels, bsphere, out voxelsCountInPercent, out material, m_drilledMaterialBuffer, Sync.IsServer, onlyCheck, applyDamagedMaterial); foreach (var entry in m_drilledMaterialBuffer) { somethingDrilled = (!collectOre || TryHarvestOreMaterial(entry.Key, hitPosition, entry.Value, onlyCheck)) || somethingDrilled; if (somethingDrilled && !onlyCheck) { MyDebris.Static.CreateDirectedDebris(hitPosition, MyUtils.GetRandomVector3Normalized(), 0.1f, 1, 0, MathHelper.Pi, 5, 1, 0.15f, entry.Key); } } m_drilledMaterialBuffer.Clear(); return(somethingDrilled); }