private void SliceTryFinished(SliceTry sliceTry) { BzSliceTryResult result = null; if (sliceTry.sliced) { result = ApplyChanges(sliceTry); } if (result == null) { result = new BzSliceTryResult(false, sliceTry.sliceData.addData); } else { InvokeEvents(result.outObjectNeg, result.outObjectPos); } OnSliceFinished(result); if (sliceTry.callBack != null) { sliceTry.callBack(result); } }
private BzSliceTryResult ApplyChanges(SliceTry sliceTry) { // duplicate object GameObject resultObjA, resultObjB; GetNewObjects(out resultObjA, out resultObjB); var renderersNeg = GetRenderers(resultObjA); var renderersPos = GetRenderers(resultObjB); if (renderersNeg.Length != renderersPos.Length | sliceTry.items.Length != renderersPos.Length) { // if something wrong happaned with object, and during slicing it was changed // disallow slicing return(null); } sliceTry.sliceData.componentManager.OnSlicedMainThread(resultObjA, resultObjB, renderersNeg, renderersPos); BzSliceTryResult result = new BzSliceTryResult(true, sliceTry.sliceData.addData); result.meshItems = new BzMeshSliceResult[sliceTry.items.Length]; for (int i = 0; i < sliceTry.items.Length; i++) { var sliceTryItem = sliceTry.items[i]; if (sliceTryItem == null) { continue; } var rendererNeg = renderersNeg[i]; var rendererPos = renderersPos[i]; if (sliceTryItem.SliceResult == SliceResult.Sliced) { sliceTryItem.meshDissector.RebuildNegMesh(rendererNeg); sliceTryItem.meshDissector.RebuildPosMesh(rendererPos); var itemResult = GetItemResult(sliceTryItem, rendererNeg, rendererPos); result.meshItems[i] = itemResult; } if (sliceTryItem.SliceResult == SliceResult.Neg) { DeleteRenderer(rendererPos); } if (sliceTryItem.SliceResult == SliceResult.Pos) { DeleteRenderer(rendererNeg); } } result.outObjectNeg = resultObjA; result.outObjectPos = resultObjB; return(result); }
private void SliceTryFinished(SliceTry sliceTry) { BzSliceTryResult result = null; if (sliceTry.sliced) { Profiler.BeginSample("ApplyChanges"); result = ApplyChanges(sliceTry); Profiler.EndSample(); } if (result == null) { result = new BzSliceTryResult(false, sliceTry.sliceData.addData); } else { lastSuccessfulSlice = sliceTry; result.outObjectNeg.GetComponent <BzSliceableBase>().lastSuccessfulSlice = sliceTry; result.outObjectPos.GetComponent <BzSliceableBase>().lastSuccessfulSlice = sliceTry; Profiler.BeginSample("InvokeEvents"); InvokeEvents(result.outObjectNeg, result.outObjectPos); Profiler.EndSample(); } Profiler.BeginSample("OnSliceFinished"); OnSliceFinished(result); Profiler.EndSample(); if (result.sliced) { var runnerNeg = result.outObjectNeg.GetComponent <LazyActionRunner>(); if (runnerNeg != null) { runnerNeg.RunLazyActions(); } var runnerPos = result.outObjectPos.GetComponent <LazyActionRunner>(); if (runnerPos != null) { runnerPos.RunLazyActions(); } } if (sliceTry.callBack != null) { Profiler.BeginSample("CallBackMethod"); sliceTry.callBack(result); Profiler.EndSample(); } }
protected override void OnSliceFinished(BzSliceTryResult result) { }
protected abstract void OnSliceFinished(BzSliceTryResult result);
private BzSliceTryResult ApplyChanges(SliceTry sliceTry) { // duplicate object GameObject resultObjNeg, resultObjPos; GetNewObjects(out resultObjNeg, out resultObjPos); var renderersNeg = GetRenderers(resultObjNeg); var renderersPos = GetRenderers(resultObjPos); resultObjNeg.AddComponent <LazyActionRunner>(); resultObjPos.AddComponent <LazyActionRunner>(); if (renderersNeg.Length != renderersPos.Length | renderersNeg.Length != sliceTry.items.Length) { // if something wrong happaned with object, and during slicing it was changed // reject this slice try return(null); } Profiler.BeginSample("ComponentManager.OnSlicedMainThread"); sliceTry.sliceData.componentManager.OnSlicedMainThread(resultObjNeg, resultObjPos, renderersNeg, renderersPos); Profiler.EndSample(); BzSliceTryResult result = new BzSliceTryResult(true, sliceTry.sliceData.addData); result.meshItems = new BzMeshSliceResult[sliceTry.items.Length]; for (int i = 0; i < sliceTry.items.Length; i++) { var sliceTryItem = sliceTry.items[i]; if (sliceTryItem == null) { continue; } var rendererNeg = renderersNeg[i]; var rendererPos = renderersPos[i]; if (sliceTryItem.SliceResult == SliceResult.Sliced) { sliceTryItem.meshDissector.RebuildNegMesh(rendererNeg); sliceTryItem.meshDissector.RebuildPosMesh(rendererPos); var itemResult = GetItemResult(sliceTryItem, rendererNeg, rendererPos); result.meshItems[i] = itemResult; } if (sliceTryItem.SliceResult == SliceResult.Neg) { DeleteRenderer(rendererPos); } if (sliceTryItem.SliceResult == SliceResult.Pos) { DeleteRenderer(rendererNeg); } } result.outObjectNeg = resultObjNeg; result.outObjectPos = resultObjPos; return(result); }
/// <summary> /// Called when sliced process finished /// </summary> protected virtual void OnSliceFinished(BzSliceTryResult result) { }