IEnumerator FinalDestroyNextSubVoxel(int layer, int columnID, string subID) { //Debug.Log("finally destroying sub: '" + subID + "' determines shatter level: " + (subID.Split(',').Length - 1)); Voxel v = getSubVoxelAt(layer, columnID, subID); int maxTries = 5; while (maxTries > 0 && v == null) { v = getSubVoxelAt(layer, columnID, subID); maxTries--; yield return(new WaitForSecondsRealtime(0.25f)); } if (v != null) { if (v.isContainer) { Debug.LogError("tried deleting subvoxel at: " + subID + " found voxel container instead: " + v); } else { if (v.shatterLevel < MapManager.manager.shatters) { StartCoroutine(v.ConvertToContainer()); } else { Destroy(v.gameObject); } } } else { Debug.LogError("failed to get voxel to destroy it. error in subvoxel storage or subvoxel does not exist; subid=" + subID); } yield return(new WaitForEndOfFrame()); }