Ejemplo n.º 1
0
    /// <summary>
    /// Funktion, wird von Unity mehrmals pro Frame aufgerufen.
    /// </summary>
    private void FixedUpdate()
    {
        if (!GlobalDataHandler.PlayerAtCtrlPoint())
        {
            _inputs   = Vector3.zero;
            _inputs.z = IsPlayerOnTrack() ? 1 : 0;

            // Erhöhe die Spielergeschwindigkeit beim Erreichen eines Meilensteins
            if (!GlobalDataHandler.GetActualSceneName().Contains("Tutorial") &&
                GlobalDataHandler.GetPlayerPosition() >= GlobalDataHandler.GetNextMilestone())
            {
                EventManager.IncreaseSpeedAndMilestone();
            }

            //Beende das Spiel, wenn der Spieler von der Strecke fällt
            if (!_isGrounded && _body.transform.position.y < Gulf)
            {
                EventManager.GameEnd();
            }

            //Aktualisiere die Punktzahl basierend auf der zurückgelegten Distanz
            int delta = (int)(_body.transform.position.z - _pastDistance);
            ScoreHandler.IncreasePlayerScore(delta);
            _pastDistance = (int)_body.transform.position.z;
        }

        if (!GlobalDataHandler.GetGameModus())
        {
            return;
        }

        //Berechne die Geschwindigkeit des Spielers
        switch (GlobalDataHandler.GetRunMode())
        {
        case RunMode.Faster:
            GlobalDataHandler.SetPlayerspeed(GlobalDataHandler.GetSpeed() * 2);
            break;

        case RunMode.Normal:
            GlobalDataHandler.SetPlayerspeed(GlobalDataHandler.GetSpeed());
            break;

        case RunMode.Slower:
            GlobalDataHandler.SetPlayerspeed(GlobalDataHandler.GetSpeed() / 2);
            break;

        case RunMode.Idle:
            GlobalDataHandler.SetPlayerspeed(0);
            break;
        }

        //Berechne die neue Position des Spielers
        _body.position += _inputs * GlobalDataHandler.GetPlayerspeed() * Time.fixedDeltaTime;
    }