Ejemplo n.º 1
0
    protected override void DoFracture()
    {
        var mainQuad = new D2D_Quad();

        mainQuad.BL = new D2D_Point(0, 0);
        mainQuad.BR = new D2D_Point(width - 1, 0);
        mainQuad.TL = new D2D_Point(0, height - 1);
        mainQuad.TR = new D2D_Point(width - 1, height - 1);

        quads.Clear();
        quads.Add(mainQuad);

        for (var i = 0; i < Count; i++)
        {
            SplitLargest();
        }

        for (var i = 0; i < quads.Count; i++)
        {
            var quad  = quads[i];
            var group = D2D_SplitBuilder.CreateGroup();

            group.AddTriangle(quad.BL, quad.BR, quad.TL);
            group.AddTriangle(quad.TR, quad.TL, quad.BR);
        }
    }
Ejemplo n.º 2
0
    public void UpdateSplit()
    {
        if (destructible == null)
        {
            destructible = GetComponent <D2D_Destructible>();
        }

        BeginSplitting();
        {
            // Find which pixels are solid
            for (var y = 0; y < height; y++)
            {
                for (var x = 0; x < width; x++)
                {
                    cells.Add(alphaTex.GetPixel(x, y).a >= Threshold);
                }
            }

            // Go through all pixels
            for (var i = 0; i < total; i++)
            {
                // First pixel of unclaimed island?
                if (cells[i] == true)
                {
                    splitGroup = D2D_SplitBuilder.CreateGroup();

                    BeginFloodFill(i, i % width, i / width);
                }
            }
        }
        EndSplitting();
    }
Ejemplo n.º 3
0
    private void EndSplitting()
    {
        // If there's only one island then skip, else every modification will waste CPU
        if (D2D_SplitBuilder.Groups.Count != 1)
        {
            D2D_SplitBuilder.DiscardTinyBits(MinPixels);

            D2D_SplitBuilder.EndSplitting(SplitOrder, false);
        }

        BusySplitting = false;
    }
Ejemplo n.º 4
0
    public void Fracture()
    {
        if (destructible == null)
        {
            destructible = GetComponent <D2D_Destructible>();
        }

        alphaTex = destructible.AlphaTex;
        width    = alphaTex.width;
        height   = alphaTex.height;
        total    = width * height;

        D2D_SplitBuilder.BeginSplitting(destructible);
        {
            DoFracture();
        }
        D2D_SplitBuilder.EndSplitting(D2D_SplitOrder.Default, Blur);
    }
Ejemplo n.º 5
0
    private void BeginSplitting()
    {
        BusySplitting = true;

        alphaTex = destructible.AlphaTex;
        width    = alphaTex.width;
        height   = alphaTex.height;
        total    = width * height;

        // Clear cells and set capacity
        cells.Clear();

        if (cells.Capacity < total)
        {
            cells.Capacity = total;
        }

        D2D_SplitBuilder.BeginSplitting(destructible);
    }