public void ShootBall(TennisBall ball, FixedShot shot) { ball.transform.position = shot.StartPosition; ball.ResetProperties(); ball.gameObject.SetActive(true); ball.Hit(shot); }
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); }