Esempio n. 1
0
    // Update is called once per frame
    void Update()
    {
        for (int i = 0; i < _positions.Count; i++)
        {
            Position p        = _positions[i];
            float    newAngle = CalculateAngle(p.Racer.transform.position.normalized);
            if (p.Angle - newAngle > _angleThreshold)
            {
                LapCompleted(i, true);
            }
            else if (p.Angle - newAngle < -_angleThreshold)
            {
                LapCompleted(i, false);
            }
            p.Angle = newAngle;

            if (p.Racer.IsPlayer)
            {
                float fullAngle = newAngle + p.Laps * 360;
                if (_playerAngle > fullAngle + wrongDirectionAngle)
                {
                    _playerAngle = fullAngle;
                    OnWrongDirection?.Invoke();
                }
                else if (_playerAngle < fullAngle)
                {
                    _playerAngle = fullAngle;
                }
            }
        }

        _positions.Sort(); // Sort the positions, when should this be done? (And how often?)
        int newPosition = FindPlayerPosition();

        if (newPosition != _previousPosition)
        {
            OnPlayerPositionChange?.Invoke(newPosition);
            _previousPosition = newPosition;
        }

        // Save player angle
        // If angle is smaller, check if the difference is bigger that the threshold
        // If it is larger, save the angle as the new value
    }
Esempio n. 2
0
 public void ChangePlayerPositionRandom()
 {
     OnPlayerPositionChange?.Invoke(Random.Range(1, 10));
     Invoke(nameof(ChangePlayerPositionRandom), Random.Range(1, 5));
 }