예제 #1
0
        public override bool Run(float frameBudget)
        {
            int count = this.core.postList.Count;

            while (this.core.poolIdx < count)
            {
                MeshObject post = this.core.postList[this.core.poolIdx];
                ++this.core.poolIdx;
                bool flag = false;
                if (this.core.parameters.SplitMeshIslands || Object.op_Implicit((Object)post.option) && post.option.SplitMeshIslands)
                {
                    List <ExploderMesh> exploderMeshList = MeshUtils.IsolateMeshIslands(post.mesh);
                    if (exploderMeshList != null)
                    {
                        flag = true;
                        foreach (ExploderMesh exploderMesh in exploderMeshList)
                        {
                            this.islands.Add(new MeshObject()
                            {
                                mesh            = exploderMesh,
                                material        = post.material,
                                transform       = post.transform,
                                original        = post.original,
                                skinnedOriginal = post.skinnedOriginal,
                                parent          = post.transform.parent,
                                position        = post.transform.position,
                                rotation        = post.transform.rotation,
                                localScale      = post.transform.localScale,
                                option          = post.option
                            });
                        }
                    }
                }
                if (!flag)
                {
                    this.islands.Add(post);
                }
                if ((double)this.Watch.ElapsedMilliseconds > (double)frameBudget)
                {
                    return(false);
                }
            }
            this.core.postList = this.islands;
            this.Watch.Stop();
            return(true);
        }
예제 #2
0
        public override bool Run(float frameBudget)
        {
            var count = core.postList.Count;

            while (core.poolIdx < count)
            {
                var mesh = core.postList[core.poolIdx];
                core.poolIdx++;

                var islandsFound = false;

                if (core.parameters.SplitMeshIslands || (mesh.option && mesh.option.SplitMeshIslands))
                {
                    var meshIslands = MeshUtils.IsolateMeshIslands(mesh.mesh);

                    if (meshIslands != null)
                    {
                        islandsFound = true;

                        foreach (var meshIsland in meshIslands)
                        {
                            islands.Add(new MeshObject
                            {
                                mesh = meshIsland,

                                material        = mesh.material,
                                transform       = mesh.transform,
                                original        = mesh.original,
                                skinnedOriginal = mesh.skinnedOriginal,

                                parent     = mesh.transform.parent,
                                position   = mesh.transform.position,
                                rotation   = mesh.transform.rotation,
                                localScale = mesh.transform.localScale,

                                option = mesh.option,
                            });
                        }
                    }
                }

                if (!islandsFound)
                {
                    islands.Add(mesh);
                }

                if (Watch.ElapsedMilliseconds > frameBudget)
                {
                    return(false);
                }
            }

#if DBG
            ExploderUtils.Log("Replacing fragments: " + postList.Count + " by islands: " + islands.Count);
#endif

            // replace postList by island list
            core.postList = islands;

            Watch.Stop();

            return(true);
        }