示例#1
0
        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);
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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();
            }
        }
示例#4
0
 protected override void OnSliceFinished(BzSliceTryResult result)
 {
 }
示例#5
0
 protected abstract void OnSliceFinished(BzSliceTryResult result);
示例#6
0
        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);
        }
示例#7
0
 /// <summary>
 /// Called when sliced process finished
 /// </summary>
 protected virtual void OnSliceFinished(BzSliceTryResult result)
 {
 }