예제 #1
0
        public static void BuildEdge(DestroyableEdgeColliderCell cell, Stack <EdgeCollider2D> tempColliders, GameObject child, float weld, float detail)
        {
            for (var i = 0; i < pointCount; i++)
            {
                var point = points[i];

                if (point.Used == false)
                {
                    Trace(point);
                    WeldLines(weld);
                    OptimizeEdges(detail);

                    cell.AddPath(tempColliders, child, ExtractPoints(0));
                }
            }
        }
예제 #2
0
        private void RebuildCell(ref DestroyableEdgeColliderCell cell, int cellX, int cellY)
        {
            var xMin = CellSize * cellX;
            var yMin = CellSize * cellY;
            var xMax = Mathf.Min(CellSize + xMin, destructible.AlphaWidth);
            var yMax = Mathf.Min(CellSize + yMin, destructible.AlphaHeight);

            if (xMin > 0)
            {
                xMin += 1;
            }
            if (yMin > 0)
            {
                yMin += 1;
            }
            if (xMax < destructible.AlphaWidth)
            {
                xMax -= 1;
            }
            if (yMax < destructible.AlphaHeight)
            {
                yMax -= 1;
            }

            DestroyableColliderBuilder.AlphaData   = destructible.AlphaData;
            DestroyableColliderBuilder.AlphaWidth  = destructible.AlphaWidth;
            DestroyableColliderBuilder.AlphaHeight = destructible.AlphaHeight;
            DestroyableColliderBuilder.MinX        = xMin;
            DestroyableColliderBuilder.MinY        = yMin;
            DestroyableColliderBuilder.MaxX        = xMax;
            DestroyableColliderBuilder.MaxY        = yMax;

            DestroyableColliderBuilder.CalculateEdgeCells();

            if (cell == null)
            {
                cell = DestroyableEdgeColliderCell.Get();
            }

            cell.Clear(tempColliders);

            DestroyableColliderBuilder.BuildEdge(cell, tempColliders, child, Weld, Detail);

            cell.UpdateColliderSettings(IsTrigger, Material);
        }
예제 #3
0
        private void Mark()
        {
            tempColliders.Clear();

            if (cells != null)
            {
                for (var i = cells.Length - 1; i >= 0; i--)
                {
                    var cell = cells[i];

                    if (cell != null)
                    {
                        cell.Clear(tempColliders);

                        cells[i] = DestroyableEdgeColliderCell.Add(cell);
                    }
                }
            }
        }
예제 #4
0
        public static DestroyableEdgeColliderCell Add(DestroyableEdgeColliderCell cell)
        {
            pool.Push(cell);

            return(null);
        }