Run = function (side)
{
    if (body1Pushable && body2Pushable)
    {
        //  Both pushable, or both moving at the same time, so equal rebound
        overlap *= 0.5;

        if (side === 0 || side === 3)
        {
            //  body1MovingUp && body2OnTop
            //  body2MovingDown && body2OnTop
            body1.processY(overlap, body1MassImpact);
            body2.processY(-overlap, body2MassImpact);
        }
        else
        {
            //  body2MovingUp && body1OnTop
            //  body1MovingDown && body1OnTop
            body1.processY(-overlap, body1MassImpact);
            body2.processY(overlap, body2MassImpact);
        }
    }
    else if (body1Pushable && !body2Pushable)
    {
        //  Body1 pushable, Body2 not

        if (side === 0 || side === 3)
        {
            //  body1MovingUp && body2OnTop
            //  body2MovingDown && body2OnTop
            body1.processY(overlap, body1FullImpact, true);
        }
        else
        {
            //  body2MovingUp && body1OnTop
            //  body1MovingDown && body1OnTop
            body1.processY(-overlap, body1FullImpact, false, true);
        }
    }
    else if (!body1Pushable && body2Pushable)
    {
        //  Body2 pushable, Body1 not

        if (side === 0 || side === 3)
        {
            //  body1MovingUp && body2OnTop
            //  body2MovingDown && body2OnTop
            body2.processY(-overlap, body2FullImpact, false, true);
        }
        else
        {
            //  body2MovingUp && body1OnTop
            //  body1MovingDown && body1OnTop
            body2.processY(overlap, body2FullImpact, true);
        }
    }
    else
    {
        //  Neither body is pushable, so base it on movement

        var halfOverlap = overlap * 0.5;

        if (side === 0)
        {
            //  body1MovingUp && body2OnTop

            if (body2Stationary)
            {
                body1.processY(overlap, 0, true);
                body2.processY(0, null, false, true);
            }
            else if (body2MovingDown)
            {
                body1.processY(halfOverlap, 0, true);
                body2.processY(-halfOverlap, 0, false, true);
            }
            else
            {
                //  Body2 moving same direction as Body1
                body1.processY(halfOverlap, body2.velocity.y, true);
                body2.processY(-halfOverlap, null, false, true);
            }
        }
        else if (side === 1)
        {
            //  body2MovingUp && body1OnTop

            if (body1Stationary)
            {
                body1.processY(0, null, false, true);
                body2.processY(overlap, 0, true);
            }
            else if (body1MovingDown)
            {
                body1.processY(-halfOverlap, 0, false, true);
                body2.processY(halfOverlap, 0, true);
            }
            else
            {
                //  Body1 moving same direction as Body2
                body1.processY(-halfOverlap, null, false, true);
                body2.processY(halfOverlap, body1.velocity.y, true);
            }
        }
        else if (side === 2)
        {
            //  body1MovingDown && body1OnTop

            if (body2Stationary)
            {
                body1.processY(-overlap, 0, false, true);
                body2.processY(0, null, true);
            }
            else if (body2MovingUp)
            {
                body1.processY(-halfOverlap, 0, false, true);
                body2.processY(halfOverlap, 0, true);
            }
            else
            {
                //  Body2 moving same direction as Body1
                body1.processY(-halfOverlap, body2.velocity.y, false, true);
                body2.processY(halfOverlap, null, true);
            }
        }
        else if (side === 3)
        {
            //  body2MovingDown && body2OnTop

            if (body1Stationary)
            {
                body1.processY(0, null, true);
                body2.processY(-overlap, 0, false, true);
            }
            else if (body1MovingUp)
            {
                body1.processY(halfOverlap, 0, true);
                body2.processY(-halfOverlap, 0, false, true);
            }
            else
            {
                //  Body1 moving same direction as Body2
                body1.processY(halfOverlap, body2.velocity.y, true);
                body2.processY(-halfOverlap, null, false, true);
            }
        }
    }

    return true;
}
The main check function. Runs through one of the four possible tests and returns the results.

@function Phaser.Physics.Arcade.ProcessY.Run
@ignore
@since 3.50.0

@param {number} side - The side to test. As passed in by the `Check` function.

@return {boolean} Always returns `true`.