Page 2 sur 3

Re: date et heure

Publié : 15 Juin 2021 07:44
par Max
Bonjour,

je penses que tu as encore du mal à bien appréhender le rôle de la fonction Update(). Dans ton code, tu lances une coroutine plusieurs dizaine de fois par seconde (le nombre étant lié à ton framerate). Donc cela ne peut que pauser des problèmes.
Et tout cela semble en effet bien complexe.
Tu peux simplement essayer de dire:

Code : Tout sélectionner

    DateTime  objectifMinuit ;
    void Start()
    {
        DateTime now = DateTime.Now;
        objectifMinuit = new DateTime(now.Year, now.Month, now.Day+1, 0, 0, 0);
    }
puis ensuite, vérifier l'écart te séparant de cette échéance par

Code : Tout sélectionner

DateTime localtime = DateTime.UtcNow.ToLocalTime();
Debug.Log("temps restant: "+ (objectifMinuit - localtime));

Re: date et heure

Publié : 15 Juin 2021 09:36
par jones
je me sens tout bête tout d'un coup.
ça semble bien facile comme ça.
C'était la première fois que je travail avec des dates et heures, je pensais que ça serait une formalité qui me prendrait 2 minutes...

Merciiiiii énormément Max.

Re: date et heure

Publié : 15 Juin 2021 17:15
par Max
jones a écrit :
15 Juin 2021 09:36
C'était la première fois que je travail avec des dates et heures, je pensais que ça serait une formalité qui me prendrait 2 minutes...
c'est le métier qui rentre (si on peut dire) :mrgreen:

Re: date et heure

Publié : 26 Juin 2021 10:27
par jones
Maxx, ca ne fonctionne pas :pleur4: :pleur4: :pleur4:
Pourtant j'ai essayé tous les variants possible.
Mais rien n'y fait, à minuit, le bouton est toujours fermé et compte à rebours se relance dés le début.
Alors que mon jeu est "quasi" terminé, je reste bloqué sur ce système.

Code : Tout sélectionner



 if(PlayerPrefs.GetInt("levelComplete1")== 0 && PlayerPrefs.GetInt("Level2Ouvert")== 0 ){               
                   buttonLev2.interactable = false; 
           }
           
 if(PlayerPrefs.GetInt("levelComplete1")== 1 && PlayerPrefs.GetInt("Level2Ouvert")== 0 ){
                   buttonLev2.interactable = false; 
            DateTime localDate = DateTime.Now;
            objectifMinuit = new DateTime(localDate.Year, localDate.Month, localDate.Day, 09, 18, 0);
            
            buttonLev2.GetComponentInChildren<Text>().text  =(objectifMinuit-localDate).ToString();          
                     if( localDate > objectifMinuit){
                    PlayerPrefs.SetInt("Level2Ouvert", 1);
                  }
           }

 if( PlayerPrefs.GetInt("levelComplete1")== 1 && PlayerPrefs.GetInt("Level2Ouvert")== 1 ){
                buttonLev2.interactable = true;
                buttonLev2.GetComponentInChildren<Text>().text =("level 02");

                  if( PlayerPrefs.GetInt("levelComplete2")== 0 ){
                         DateTime localDate = DateTime.Now;
                         objectifMinuit = new DateTime(localDate.Year, localDate.Month, localDate.Day+1, 0, 0, 0);
                                 petitText2.text = (objectifMinuit-localDate).ToString(); 
                                 if( localDate > objectifMinuit){
                                   petitText2.text  ="";
                                   PlayerPrefs.DeleteAll();
                                 }
                  if ( PlayerPrefs.GetInt("levelComplete2")== 1){
                           petitText2.text  ="";
                           buttonLev2.interactable = true;         
                                 } 
                  }
        }


Re: date et heure

Publié : 26 Juin 2021 14:37
par Max
Bonjour,

je suppose que ce bout de code est dans l'update ?
Prend l'habitude de définir les objectifs dans les fonctions d'initialisation Start ou Awake.
Car là c'est mis à jour plusieurs fois pas seconde, il me semble te l'avoir déjà souligné. Résultat, objectifMinuit va changer en permanence, ce qui n'est pas souhaitable. C'est comme si tu avançais progressivement la ligne d'arrivé d'une course en même temps que les coureurs avancent, ils ne la franchiraient jamais :(
Dans le bout de code que j'ai posté plus haut, tu remarqueras que je définis l'objectif dans Start, et je passe par une variable globale et non locale.

Re: date et heure

Publié : 26 Juin 2021 15:36
par jones
oui, c'est dans l'update.
En fait, comme je t'ai dit, j'ai essayé pleins de variants. Du coup objectif minuit c'était initialement dans le Start() comme tu me l'avais indiqué puis j'ai fait des modifications vu que ça ne fonctionnait pas, tant tôt en usant de logique, tant tôt en faisant n'importe quoi par désespoir.
Pendant les tests, ça marchait, l'lorsque je définis une heure proche, genre dans quelques minutes pour essayer. Puis je ressaye à minuit, je vérifie le lendemain et nada le bouton est fermé et il y a encore le compte a rebours jusqu'à minuit.
Pour moi, la logique est correcte, je ne sais vraiment par ce qui cloche. En plus c'est le dernier point qui reste dans le jeu...
Là, le test que j'ai lancé aujourd'hui est de mettre l'objectif a 23h59 -_-

Re: date et heure

Publié : 26 Juin 2021 18:13
par Max
J'avoue que j'ai un peu de mal avec ton code, plutôt confus.
Tu initialises plusieurs fois la localDate, idem pour objectifMinuit, perso je m'y perd un peu.

Re: date et heure

Publié : 26 Juin 2021 19:19
par jones
Alors voilà,
1) au début, on a : if(PlayerPrefs.GetInt("levelComplete1")== 0 && PlayerPrefs.GetInt("Level2Ouvert")== 0 ){
donc le bouton de level2 est fermé.
donc on joue au Level1 et on le débloque, ce qui donne : (PlayerPrefs.GetInt("levelComplete1")== 1.
ce qui nous mène à l'étape 2

2) if(PlayerPrefs.GetInt("levelComplete1")== 1 && PlayerPrefs.GetInt("Level2Ouvert")== 0 ){
ainsi le bouton 2 est toujours fermé, et il y a un compte a rebours jusqu'à minuit.
une fois minuit arrive, on a PlayerPrefs.GetInt("Level2Ouvert")== 1
ce qui nous mène à l'étape 3

3)if( PlayerPrefs.GetInt("levelComplete1")== 1 && PlayerPrefs.GetInt("Level2Ouvert")== 1 ){
dans l'étape 3, le bouton du level 2 s'ouvre mais :

3A) if( PlayerPrefs.GetInt("levelComplete2")== 0 ){ si on a toujours pas débloqué le niveau 2, on a un deuxième compte a rebours (petitTexte2) jusqu'à minuit.
si on debloque pas le niveau 2 à minuit, PlayerPrefs.DeleteAll();

3B) if ( PlayerPrefs.GetInt("levelComplete2")== 1){ si on débloque le niveau 2 alors le bouton du level reste ouvert

et ainsi de suite pour les autres niveaux



je sais que c'est plutôt compliqué et j'en suis sincèrement navré. Je n'aurai jamais osé demandé ça à quelqu'un si j'étais pas un peu désespéré.

Re: date et heure

Publié : 27 Juin 2021 15:58
par Max
Bonjour,

dans le morceau de code que tu as posté plus haut, un des deux calculs de objectifMinuit,
tu ne mets pas localDate.Day + 1, c'est volontaire ?

Re: date et heure

Publié : 27 Juin 2021 16:05
par jones
ah oui, mais c'était juste pour tester. et ça fonctionnait bien. Mais dés lors que je met +1 et à minuit, ça ne fonctionne plus.
J'aurais du corriger avant de publier, désolé.
Mais, normalement c'est bien +1