void FractureBreakableShape(HkdBreakableShape bShape, MyModelFractures modelFractures, string modPath) { HkdFracture fracture = null; HkReferenceObject geometry = null; if (modelFractures.Fractures[0] is RandomSplitFractureSettings) { var settings = (RandomSplitFractureSettings)modelFractures.Fractures[0]; fracture = new HkdRandomSplitFracture() { NumObjectsOnLevel1 = settings.NumObjectsOnLevel1, NumObjectsOnLevel2 = settings.NumObjectsOnLevel2, RandomRange = settings.RandomRange, RandomSeed1 = settings.RandomSeed1, RandomSeed2 = settings.RandomSeed2, SplitGeometryScale = Vector4.One }; if (!string.IsNullOrEmpty(settings.SplitPlane)) { var splitPlane = settings.SplitPlane; if (!string.IsNullOrEmpty(modPath)) { splitPlane = Path.Combine(modPath, settings.SplitPlane); } geometry = CreateGeometryFromSplitPlane(splitPlane); if (geometry != null) { ((HkdRandomSplitFracture)fracture).SetGeometry(geometry); VRageRender.MyRenderProxy.PreloadMaterials(splitPlane); } } } if (modelFractures.Fractures[0] is VoronoiFractureSettings) { var settings = (VoronoiFractureSettings)modelFractures.Fractures[0]; fracture = new HkdVoronoiFracture() { Seed = settings.Seed, NumSitesToGenerate = settings.NumSitesToGenerate, NumIterations = settings.NumIterations }; if (!string.IsNullOrEmpty(settings.SplitPlane)) { var splitPlane = settings.SplitPlane; if (!string.IsNullOrEmpty(modPath)) { splitPlane = Path.Combine(modPath, settings.SplitPlane); } geometry = CreateGeometryFromSplitPlane(splitPlane); var pspm = MyModels.GetModel(splitPlane); if (geometry != null) { ((HkdVoronoiFracture)fracture).SetGeometry(geometry); VRageRender.MyRenderProxy.PreloadMaterials(splitPlane); } } } //if (woodButton.IsChecked) //{ // fracture = new HkdWoodFracture() // { // RandomSeed = 123456, // BoardSplittingData = new HkdWoodFracture.SplittingData() // { // }, // SplinterSplittingData = new HkdWoodFracture.SplittingData() // { // } // }; //} if (fracture != null) { Storage.FractureShape(bShape, fracture); fracture.Dispose(); } if (geometry != null) { geometry.Dispose(); } }
void FractureBreakableShape(HkdBreakableShape bShape, MyModelFractures modelFractures, string modPath) { HkdFracture fracture = null; HkReferenceObject geometry = null; if (modelFractures.Fractures[0] is RandomSplitFractureSettings) { var settings = (RandomSplitFractureSettings)modelFractures.Fractures[0]; fracture = new HkdRandomSplitFracture() { NumObjectsOnLevel1 = settings.NumObjectsOnLevel1, NumObjectsOnLevel2 = settings.NumObjectsOnLevel2, RandomRange = settings.RandomRange, RandomSeed1 = settings.RandomSeed1, RandomSeed2 = settings.RandomSeed2, SplitGeometryScale = Vector4.One }; if (!string.IsNullOrEmpty(settings.SplitPlane)) { var splitPlane = settings.SplitPlane; if (!string.IsNullOrEmpty(modPath)) splitPlane = Path.Combine(modPath, settings.SplitPlane); geometry = CreateGeometryFromSplitPlane(splitPlane); if (geometry != null) { ((HkdRandomSplitFracture)fracture).SetGeometry(geometry); VRageRender.MyRenderProxy.PreloadMaterials(splitPlane); } } } if (modelFractures.Fractures[0] is VoronoiFractureSettings) { var settings = (VoronoiFractureSettings)modelFractures.Fractures[0]; fracture = new HkdVoronoiFracture() { Seed = settings.Seed, NumSitesToGenerate = settings.NumSitesToGenerate, NumIterations = settings.NumIterations }; if (!string.IsNullOrEmpty(settings.SplitPlane)) { var splitPlane = settings.SplitPlane; if (!string.IsNullOrEmpty(modPath)) splitPlane = Path.Combine(modPath, settings.SplitPlane); geometry = CreateGeometryFromSplitPlane(splitPlane); var pspm = MyModels.GetModel(splitPlane); if (geometry != null) { ((HkdVoronoiFracture)fracture).SetGeometry(geometry); VRageRender.MyRenderProxy.PreloadMaterials(splitPlane); } } } if (modelFractures.Fractures[0] is WoodFractureSettings) { //TODO: Apply wood fracture algorithm var settings = (WoodFractureSettings)modelFractures.Fractures[0]; fracture = new HkdWoodFracture() { //Seed = settings.Seed, //NumSitesToGenerate = settings.NumSitesToGenerate, //NumIterations = settings.NumIterations }; //if (!string.IsNullOrEmpty(settings.SplitPlane)) //{ // var splitPlane = settings.SplitPlane; // if (!string.IsNullOrEmpty(modPath)) // splitPlane = Path.Combine(modPath, settings.SplitPlane); // geometry = CreateGeometryFromSplitPlane(splitPlane); // var pspm = MyModels.GetModel(splitPlane); // if (geometry != null) // { // ((HkdWoodFracture)fracture).SetGeometry(geometry); // VRageRender.MyRenderProxy.PreloadMaterials(splitPlane); // } //} } //if (woodButton.IsChecked) //{ // fracture = new HkdWoodFracture() // { // RandomSeed = 123456, // BoardSplittingData = new HkdWoodFracture.SplittingData() // { // }, // SplinterSplittingData = new HkdWoodFracture.SplittingData() // { // } // }; //} if (fracture != null) { Storage.FractureShape(bShape, fracture); fracture.Dispose(); } if (geometry != null) geometry.Dispose(); }
void FractureBreakableShape(HkdBreakableShape bShape, MyModelFractures modelFractures, string modPath) { HkdFracture fracture = null; HkReferenceObject geometry = null; if (modelFractures.Fractures[0] is RandomSplitFractureSettings) { var settings = (RandomSplitFractureSettings)modelFractures.Fractures[0]; fracture = new HkdRandomSplitFracture() { NumObjectsOnLevel1 = settings.NumObjectsOnLevel1, NumObjectsOnLevel2 = settings.NumObjectsOnLevel2, RandomRange = settings.RandomRange, RandomSeed1 = settings.RandomSeed1, RandomSeed2 = settings.RandomSeed2, SplitGeometryScale = Vector4.One }; if (!string.IsNullOrEmpty(settings.SplitPlane)) { var splitPlane = settings.SplitPlane; if (!string.IsNullOrEmpty(modPath)) splitPlane = Path.Combine(modPath, settings.SplitPlane); geometry = CreateGeometryFromSplitPlane(splitPlane); if (geometry != null) { ((HkdRandomSplitFracture)fracture).SetGeometry(geometry); VRageRender.MyRenderProxy.PreloadMaterials(splitPlane); } } } if (modelFractures.Fractures[0] is VoronoiFractureSettings) { var settings = (VoronoiFractureSettings)modelFractures.Fractures[0]; fracture = new HkdVoronoiFracture() { Seed = settings.Seed, NumSitesToGenerate = settings.NumSitesToGenerate, NumIterations = settings.NumIterations }; if (!string.IsNullOrEmpty(settings.SplitPlane)) { var splitPlane = settings.SplitPlane; if (!string.IsNullOrEmpty(modPath)) splitPlane = Path.Combine(modPath, settings.SplitPlane); geometry = CreateGeometryFromSplitPlane(splitPlane); var pspm = MyModels.GetModel(splitPlane); if (geometry != null) { ((HkdVoronoiFracture)fracture).SetGeometry(geometry); VRageRender.MyRenderProxy.PreloadMaterials(splitPlane); } } } if (fracture != null) { Storage.FractureShape(bShape, fracture); fracture.Dispose(); } if (geometry != null) geometry.Dispose(); }