Esempio n. 1
0
    public void ShootBall(TennisBall ball, FixedShot shot)
    {
        ball.transform.position = shot.StartPosition;
        ball.ResetProperties();
        ball.gameObject.SetActive(true);

        ball.Hit(shot);
    }
Esempio n. 2
0
    private void Hit(TennisBall tennisBall, ShotType shotType)
    {
        if (!tennisBall)
        {
            return;
        }

        Shot    currentShot          = null;
        Vector3 startPosition        = tennisBall.transform.position;
        Vector3 targetPosition       = aimPointTransform.position;
        bool    validVolleySituation = ValidVolleySituation(tennisBall, startPosition, 2f);

        switch (shotType)
        {
        case ShotType.Flat:
            currentShot = validVolleySituation ? volleyShotDefault : flatShotDefault;
            break;

        case ShotType.TopSpin:
            currentShot = validVolleySituation ? volleyShotDefault : topSpinShotDefault;
            break;

        case ShotType.Slice:
            currentShot = validVolleySituation ? volleyShotDefault : sliceShotDefault;
            break;

        case ShotType.DropOrLob:
            bool validDropSituation = ValidDropSituation(targetPosition, 23.78f);
            if (validDropSituation)
            {
                currentShot = validVolleySituation ? volleyShotDefault : dropShotDefault;
            }
            else
            {
                currentShot = validVolleySituation ? volleyShotDefault : lobShotDefault;
            }

            // currentShot = validVolleySituation ? volleyShotDefault : targetPosition.z < 23.78f ? dropShotDefault : lobShotDefault;
            break;
        }

        tennisBall.Hit(currentShot, startPosition, targetPosition);

        onHit?.Invoke(tennisBall);
    }