public void OnBullseyeImpacted(BullseyeImpactInfo bullseyeImpactInfo) { if (bullseyeImpacted != null) { bullseyeImpacted(bullseyeImpactInfo); } }
void ShotResultBullseyeFeedback(BullseyeImpactInfo _info) { string feedbackString = ""; switch (_info.Ring) { case 0: feedbackString = LocalizacionManager.instance.GetTexto(243).ToUpper(); break; case 1: feedbackString = LocalizacionManager.instance.GetTexto(241).ToUpper(); break; case 2: feedbackString = LocalizacionManager.instance.GetTexto(248).ToUpper(); break; } ShotFeedbackManager.Instance.SpawnShotReviewFeedback(feedbackString); }
public BullseyeImpactInfo CheckThrow(ShotInfo _shot) { bullseyeImpactInfo.Points = 0; if (Vector3.Distance(_shot.Target, transform.position) <= radiusOfBullseye) { bullseyeImpactInfo = new BullseyeImpactInfo(); bullseyeImpactInfo.Distance = this.CalculateDistance(_shot.Target); bullseyeImpactInfo.Position = _shot.Target; bullseyeImpactInfo.Points = CalculateScore(bullseyeImpactInfo); bullseyeImpactInfo.Ring = calculateRingOfImpact(bullseyeImpactInfo); } DoEvent(); return(bullseyeImpactInfo); }
private void CheckIfShotFinished() { // La bola ha salido del campo y no es un rebote if ((!fieldBounds.Contains(new Vector2(ball.transform.position.x, ball.transform.position.z))) && (!BallPhysics.instance.ReboundBall())) { // El resultado por defecto es fallo ShotResult shotResult = new ShotResult() { Result = Result.OutOfBounds, Point = ball.transform.position, Rebounded = false, ScorePoints = 0, Perfect = false, EffectBonusPoints = 0 }; // Bola dentro de la porteria if (goalBounds.Contains(ball.transform.position)) { if (Goalkeeper.instance != null) { // Hay portero... shotResult.Result = Result.Goal; } else if (HasBullseye) { // ... o hay diana BullseyeImpactInfo bInfo = ServiceLocator.Request <IDifficultyService>().GetBullseye().CheckThrow(lastShotinfo); if (bInfo.Points > 0) { // Si hemos puntuado con la diana, modificamos el ShotResult shotResult.Result = Result.Target; shotResult.ScorePoints = bInfo.Points; shotResult.Perfect = (bInfo.Ring == 0); lastTarget = lastShotinfo.Target; kickEffects.instance.targetHit(lastTarget); } else { // no hemos dado a la diana, comprobamos si la diana tiene zona amarilla Rect area = ServiceLocator.Request <IDifficultyService>().GetRect(); if (area.width > 0.1f) { Vector2 planeHit = new Vector2(ball.transform.position.x, ball.transform.position.y); if (area.Contains(planeHit + new Vector2(3.55f, 0f))) { // Hay zona amarilla y le hemos atizado con la bola shotResult.Result = Result.Goal; shotResult.AreaResult = AreaResultValues.BallHitsArea; kickEffects.instance.DrawZone(true, ball.transform.position); } else { // Hay zona amarilla pero no hemos conseguido darle shotResult.AreaResult = AreaResultValues.BallFailsArea; kickEffects.instance.DrawZone(false, ball.transform.position); } } else { // No habia zona amarilla, asi que lo tomamos como gol shotResult.Result = Result.Goal; shotResult.AreaResult = AreaResultValues.NoAreaExists; } } } else if (HasSheet) { // ... o hay sabana float sheetMultiplicator = SabanasManager.instance.GetScore(shotResult.Point); if (sheetMultiplicator > 0.0f) { // si se ha sacado algo de puntuacion... shotResult.Result = Result.Target; shotResult.ScorePoints = (int)sheetMultiplicator; } } } else { // Bola fuera de la porteria if (Goalkeeper.instance != null) { Goalkeeper.instance.lastResult = GKResult.ThrowerFail; shotResult.DefenseResult = GKResult.ThrowerFail; } } if (playingGoalKeeper) { shotResult.Perfect = Goalkeeper.instance.lastPerfect; shotResult.Precision = Goalkeeper.instance.lastPrecision; shotResult.DefenseResult = Goalkeeper.instance.lastResult; } // Propagamos el evento de ShotEnded ServiceLocator.Request <IShotResultService>().OnShotEnded(shotResult); playOnCourse = false; } else { // Debug.Log( "INSIDE THE FIELD" ); } }
public int calculateRingOfImpact(BullseyeImpactInfo bullseyeImpactInfo) { int result = (int)(bullseyeImpactInfo.Distance / this.radiusForEachRing); return(result < numberOfTrames ? result : numberOfTrames - 1); }
public int CalculateScore(BullseyeImpactInfo bullseyeImpactInfo) { int ringOfImpact = calculateRingOfImpact(bullseyeImpactInfo); return(Points[ringOfImpact]); }