/* sera appelée à chaque frame depuis Update() * y a t'il un évenement de la timeline à déclencher en fonction de la valeur actuelle du chrono ? */ private void Piloter_Event_TL() { if (indexTimeLine >= maxIndexTimeLine) { return; // partie non terminée (chrono en cours) mais plus d'événement à déclencher } //print("chrono " + chrono + " prochain event " + prochaine_cde_event.time_evt_TL); //print("'''''''''''''''''''''''''''''''''''''''indexTimeLine " + indexTimeLine + " maxIndexTimeLine " + maxIndexTimeLine); //if (maxIndexTimeLine >= 0) print("chrono " + chrono + " nbEvents : " + maxIndexTimeLine); while (chrono > prochaine_cde_event.time_evt_TL) { if (prochaine_cde_event.cdeEvt_TL == TypeCdeEvent.START) { prochaine_cde_event.evt_TL.start_TL_Event(); } else { prochaine_cde_event.evt_TL.stop_TL_Event(); } indexTimeLine++; if (indexTimeLine >= maxIndexTimeLine) { break; } prochaine_cde_event = TimeLine[indexTimeLine]; } }
//*******************************************************************************************************// public void StartChrono() { chrono = 0; ChronoDemarre = true; foreach (Interface_TL_Events evTL in p_Liste_TL_Events) { evTL.TL_ChronoDemarre(); } indexTimeLine = 0; prochaine_cde_event = TimeLine[0]; // à décommenter une fois la structure timeline créée }
/* sera appelée une seule fois avant le départ du jeu depuis la méthode Configurer () * y a t'il un évenement de la timeline à déclencher en fonction de la valeur actuelle du chrono ? * * la liste p_Liste_TL_Events rescence tous les évenements de TL i.e. les scripts (ou instances de classes) réalisant l'interface Interface_TL_Events * * il faut définir les commandes de démarrage et d'arrêt de ces scripts puis les ordonnées en fonction du temps * * il faut remplir la liste List<struct_evt_TL> TimeLine; qui sera interprétée par Piloter_Event_TL() pendant l'exécution */ private void ConstruireTimeLine() { /******************* ! ! ! A FAIRE ! ! ! *******************************/ struct_evt_TL __e; float __time_debut_evt_TL; float __period; if (TimeLine != null) { TimeLine.Clear(); // vider la liste (si 2ème ou suivantes exécutions.... } else { TimeLine = new List <struct_evt_TL>(); // 1ere exécution : instantiation } p_nb_TL_Events = 0; //pour chaque event de la liste d'event foreach (Interface_TL_Events __evTL in p_Liste_TL_Events) { __time_debut_evt_TL = __evTL.getStartTime_TL_Event(); //si c'est periodique tu fait plein de fois while ((__time_debut_evt_TL < dureeMax) && (__time_debut_evt_TL < __evTL.getStopTime_TL_Event())) { // ajouter dans la timeline les ordres de début et de fin de l'évenement __e = new struct_evt_TL(__time_debut_evt_TL, TypeCdeEvent.START, __evTL); TimeLine.Add(__e); __e = new struct_evt_TL(__time_debut_evt_TL + __evTL.getDuration_TL_Event(), TypeCdeEvent.STOP, __evTL); TimeLine.Add(__e); if (__evTL.isPeriodic_TL_Event(out __period)) { __time_debut_evt_TL += __period; } else { break; } } } maxIndexTimeLine = TimeLine.Count; print(maxIndexTimeLine + " evnt TL ont été ajoutés "); // TRIER !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TimeLine.Sort(Compare_Struct_Evt_TL); }
// ci dessous sera utilisé pour trier la liste avec la méthode sort() static int Compare_Struct_Evt_TL(struct_evt_TL x, struct_evt_TL y) { return(((struct_evt_TL)x).time_evt_TL.CompareTo(((struct_evt_TL)y).time_evt_TL)); }