Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Pontuação maxima sempre a atual

Eu fiz um codigo um pouco diferente, mas era para ter funcionado, não? Aparece aqui sempre a pontução atual como maxima.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class ControlaInterface : MonoBehaviour
{

    private ControlaJogador scriptControlaJogador;
    public Slider SliderVidaJogador;
    public GameObject PainelGameOver;
    public Text TextoTempoDeSobrevivencia;
    public Text TempoPontuacaoMaxima;
    private float tempoPontuacaoSalva;


    void Start()
    {
        scriptControlaJogador = GameObject.FindWithTag("Jogador")
            .GetComponent<ControlaJogador>();
        SliderVidaJogador.maxValue = scriptControlaJogador.statusJogador.Vida;
        AtualizaSliderVidaJogador();
        tempoPontuacaoSalva = PlayerPrefs.GetFloat("PontuacaoMaxima");
    }




    public void AtualizaSliderVidaJogador()
    {
        SliderVidaJogador.value = scriptControlaJogador.statusJogador.Vida;
    }

    public void GameOver()
    {
        PainelGameOver.SetActive(true);
        Time.timeScale = 0;
        int minutos = (int)(Time.timeSinceLevelLoad / 60);
        int segundos = (int)(Time.timeSinceLevelLoad % 60);
        TextoTempoDeSobrevivencia.text = "Você sobreviveu por " + minutos + " minutos e " + segundos + " segundos.";
        AjustarPontuacaoMaxima(minutos, segundos);
    }

    public void Reiniciar()
    {
        SceneManager.LoadScene("Game");
    }


    void AjustarPontuacaoMaxima(int min, int sec)
    {
        int minuto, segundos;

        if (Time.timeSinceLevelLoad > tempoPontuacaoSalva)
        {
            tempoPontuacaoSalva = Time.timeSinceLevelLoad;           
            PlayerPrefs.SetFloat("PontuacaoMaxima", tempoPontuacaoSalva);
            minuto = min;
            segundos = sec;
        }
        else
        {
             minuto= (int)(Time.timeSinceLevelLoad / 60);
             segundos = (int)(Time.timeSinceLevelLoad % 60);
        }

        TempoPontuacaoMaxima.text =
           string.Format("Seu melhor tempo é {0}min e {1}segundos.", minuto, segundos);
    }
}
2 respostas

Oi, Danilo, tudo bem?

Provalmente é porque tá caindo nesse else:

else
{
     minuto= (int)(Time.timeSinceLevelLoad / 60);
    segundos = (int)(Time.timeSinceLevelLoad % 60);
}

Nele você tá usando o valor atual de tempo não o máximo que tá salvo. Você poderia trocar o seu código para algo como:

if (Time.timeSinceLevelLoad > tempoPontuacaoSalva)
{
    tempoPontuacaoSalva = Time.timeSinceLevelLoad;           
    PlayerPrefs.SetFloat("PontuacaoMaxima", tempoPontuacaoSalva);
}

minuto = (int)(tempoPontuacaoSalva / 60);
segundos = (int)(tempoPontuacaoSalva  % 60);


TempoPontuacaoMaxima.text = string.Format("Seu melhor tempo é {0}min e {1}segundos.", minuto, segundos);

Acho que simplifica até a versão do curso e faz mais sentido, eu não testei se funciona então qualquer coisa me avise :P

solução!

As vezes a gente precisa parar um pouco e ver com "olhos frescos", não faz sentido nenhum o meu código., eu estava pegando sempre o TimeSinceLevelLoad...