示例#1
0
 public void OnBullseyeImpacted(BullseyeImpactInfo bullseyeImpactInfo)
 {
     if (bullseyeImpacted != null)
     {
         bullseyeImpacted(bullseyeImpactInfo);
     }
 }
示例#2
0
    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);
    }
示例#3
0
    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);
    }
示例#4
0
    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" );
        }
    }
示例#5
0
    public int calculateRingOfImpact(BullseyeImpactInfo bullseyeImpactInfo)
    {
        int result = (int)(bullseyeImpactInfo.Distance / this.radiusForEachRing);

        return(result < numberOfTrames ? result : numberOfTrames - 1);
    }
示例#6
0
    public int CalculateScore(BullseyeImpactInfo bullseyeImpactInfo)
    {
        int ringOfImpact = calculateRingOfImpact(bullseyeImpactInfo);

        return(Points[ringOfImpact]);
    }