protected override void DetectSpike(Volleyball v, PlayerController player)
    {
        if (!SPIKES)
        {
            return;
        }

        Rigidbody2D body      = v.GetComponent <Rigidbody2D>();
        Vector2     playerPos = player.transform.position;
        Vector2     ballPos   = body.position;
        float       dunkTop   = playerPos.y + player.DUNK_HEIGHT;
        float       dunkBot   = playerPos.y;

        if (ballPos.y - dunkTop < 0 && ballPos.y - dunkBot > -RADIUS)
        {
            Messenger.Broadcast(GameEvent.SPIKE_HIT, v, player);
        }
    }
    protected override void SpikeBall(Volleyball v, PlayerController player)
    {
        Rigidbody2D body      = v.GetComponent <Rigidbody2D>();
        Vector2     playerPos = player.transform.position;
        Vector2     ballPos   = body.position;
        float       dunkTop   = playerPos.y + player.DUNK_HEIGHT;

        Vector2 direction = new Vector2(
            ballPos.x - playerPos.x, dunkTop - ballPos.y);

        if (ballPos.x > playerPos.x)
        {
            direction += Vector2.right * player.XRADIUS;
        }
        else
        {
            direction += Vector2.left * player.XRADIUS;
        }

        direction.Normalize();
        body.AddForce(direction * player.DUNK_STRENGTH);
    }
    private void BoundBall(Volleyball volleyball, Side side)
    {
        Rigidbody2D body             = volleyball.GetComponent <Rigidbody2D>();
        Vector2     modifiedPosition = body.position;

        if (side == Side.CEILING)
        {
            modifiedPosition.y = Game.Instance.CEILING - RADIUS;
        }
        else if (side == Side.GROUND)
        {
            modifiedPosition.y = Game.Instance.DROP_HEIGHT;
        }
        else if (side == Side.RIGHT)
        {
            modifiedPosition.x = Game.Instance.RIGHT_WALLX - RADIUS;
        }
        else if (side == Side.LEFT)
        {
            modifiedPosition.x = Game.Instance.LEFT_WALLX + RADIUS;
        }

        body.position = modifiedPosition;
    }