// 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 }
public void ChangePlayerPositionRandom() { OnPlayerPositionChange?.Invoke(Random.Range(1, 10)); Invoke(nameof(ChangePlayerPositionRandom), Random.Range(1, 5)); }