Search Unity

PlayTimer() and CopyTimer methods ain't working for mono script nongame app

Discussion in 'Editor & General Support' started by gabrieldubruncquez, Jul 10, 2019.

  1. gabrieldubruncquez

    gabrieldubruncquez

    Joined:
    Jul 10, 2019
    Posts:
    1
    Hi everyone,

    I'm in deepshit because I've to deliver an app before friday afternoon, and I don't know how I can do to resolve two problems :

    First : I've a playtimer method and a savedplaytimer(), savedplaytimer plays after a timer creation, on playbutton click. It works as hell, no problem with that, but my other PlayTimer() method, which is the same of savedplaytimer but with the current GridItem's Timer : I have the values, but on play, It doesn't go check for conditions in Update() ..

    Second : My CopyTimer() methods, is doing the same of my GenerateGrid(), but when using it, it just return "setting the parent of a transform which resides in a prefab is disabled to prevent data corruption" then, using generategrid after copy will generate some items in scene root.

    Here's my source code:

    Code (CSharp):
    1. using System;
    2. using System.Threading;
    3. using System.Collections;
    4. using System.Collections.Generic;
    5. using UnityEngine;
    6. using UnityEngine.UI;
    7. using System.Linq;
    8. using UnityEngine.Serialization;
    9. using UnityEngine.EventSystems;
    10. public class MainMenu : MonoBehaviour
    11. {
    12.      public void OnApplicationQuit()
    13.      {
    14.          newTimer = new Timer();
    15.          ChronoTimer = new Timer();
    16.          isUp = false;
    17.          TimerLeft = 0;
    18.          PlayerPrefs.SetString("User Timer List", Newtonsoft.Json.JsonConvert.SerializeObject(userTimers));
    19.          PlayerPrefs.Save();
    20.      }
    21.      public void OnApplicationPause(bool pause)
    22.      {
    23.          if (pause)
    24.          {
    25.              PlayerPrefs.SetString("User Timer List", Newtonsoft.Json.JsonConvert.SerializeObject(userTimers));
    26.              PlayerPrefs.Save();
    27.          }
    28.      }
    29.      #region Unity Start Method
    30.      // Use this for initialization
    31.      public void Start()
    32.      {
    33.          //var button = gameObject.GetComponent<Button>();
    34.          Time.timeScale = 1;
    35.          RandomizerToggle.isOn = false;
    36.          SoloInterface.SetActive(true);
    37.          EffortDoubleSliderInterface.SetActive(false);
    38.          newTimer = new Timer();
    39.          ChronoTimer = new Timer();
    40.          isUp = false;
    41.          TimerLeft = 0;
    42.          //PlayerPrefs.HasKey("User Timer List");
    43.          userTimers = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Timer>>(PlayerPrefs.GetString("User Timer List"));
    44.          if(userTimers == null)
    45.          {
    46.              userTimers = new List<Timer>();
    47.              PlayerPrefs.SetString("User Timer List", Newtonsoft.Json.JsonConvert.SerializeObject(userTimers));
    48.              PlayerPrefs.Save();
    49.          }
    50.      }
    51.      #endregion
    52.      #region Properties
    53.      public List<Timer> userTimers { get; private set; }
    54.      public static string displayer;
    55.      public Timer newTimer { get; private set; }
    56.      public int currentRepetition = 0;
    57.      // Éléments UI
    58.      public GameObject SavedViewPrefab;
    59.      public GameObject ChronolistPrefabs;
    60.      public GameObject TopBar;
    61.      public GameObject ChronoViewPrefabs;
    62.      public GameObject SettingViewPrefabs;
    63.      public GameObject CreateNewPrefabs;
    64.      public GameObject ContentPresenter;
    65.      public GameObject MenuContainerPrefab;
    66.      public GameObject SameNamePopUp;
    67.      //Partie Sources Audio
    68.      public AudioClip SoundOne;
    69.      public AudioClip SoundTwo;
    70.      public AudioClip SoundThree;
    71.      public AudioClip TimerBeep;
    72.      public AudioSource SoundManager;
    73.      //Partie DataGrid
    74.      public GameObject timerContainer;
    75.      //Grid  Template  Part
    76.      public GameObject DataTemplate;
    77.      public Text TimerName;
    78.      public Text nbRepetitions;
    79.      public Text SoloSliderDisplayer;
    80.      public Toggle RandomToggle;
    81.      public Text FightDurationTemplate;
    82.      public Text OptionnalDurationTemplate;
    83.      public Text ResstMinDurationTemplate;
    84.      public Text RestMaxDurationTemplate;
    85.      //Partie ToggleButton
    86.      public Toggle RandomizerToggle;
    87.      //Partie savedview
    88.      public Button PlayButton;
    89.      public Text nbrepdisplay;
    90.      public Text timernamedisplay;
    91.      public Toggle togglesaved;
    92.      public Slider EffortSoloSliderSaved;
    93.      public Slider FightDurationSliderSaved;
    94.      public Slider OptionnalDurationSliderSaved;
    95.      public Slider RestMaxSliderSaved;
    96.      public Slider RestDoubleSliderSaved;
    97.      public Text effortsololabel;
    98.      public Text effortminlabel;
    99.      public Text effortmaxlabel;
    100.      public Text Restminlabel;
    101.      public Text Restmaxlabel;
    102.      public GameObject SavedEffortSoloSliderInterface;
    103.      public GameObject SavedEffortDoubleSliderInterface;
    104.      //Partie Slider
    105.      public Text SoloSliderValueDisplayer;
    106.      public Text FightDurationDoubleSliderDisplayer;
    107.      public Text OptionnalDurationDoubleSliderDisplayer;
    108.      public Text RestMinDoubleSliderDisplayer;
    109.      public Text RestMaxDoubleSliderDisplayer;
    110.      public Text ChronoField;
    111.      public Slider EffortSoloSlider;
    112.      public GameObject EffortDoubleSliderInterface;
    113.      public GameObject RestDoubleSliderInterface;
    114.      public Slider OptionnalDurationSlider;
    115.      public Slider RestMaxSlider;
    116.      public GameObject SoloInterface;
    117.      public Slider EffortDoubleSlider;
    118.      public Slider RestDoubleSlider;
    119.      //Partie champs textes
    120.      public GameObject PauseButton;
    121.      public GameObject UnpauseButton;
    122.      public InputField NbRepetitions;
    123.      public InputField Timername;
    124.      private bool isUp;
    125.      private Timer ChronoTimer;
    126.      private double TimerLeft;
    127.      #endregion
    128.      #region Buttons Methods
    129.      #region  Menu
    130.      public void Create_ButtonClicked()
    131.      {
    132.          MenuContainerPrefab.SetActive(false);
    133.          CreateNewPrefabs.SetActive(true);
    134.          newTimer = new Timer();
    135.          newTimer.ResetCreator();
    136.          EffortSoloSlider.value = 0;
    137.          EffortDoubleSlider.value = 0;
    138.          OptionnalDurationSlider.value = 0;
    139.          RestDoubleSlider.value = 0;
    140.          RestMaxSlider.value = 0;
    141.          SoloSliderDisplayer.text = "00:00";
    142.          FightDurationDoubleSliderDisplayer.text = "00:00";
    143.          OptionnalDurationDoubleSliderDisplayer.text = "00:00";
    144.          RestMinDoubleSliderDisplayer.text = "00:00";
    145.          RestMaxDoubleSliderDisplayer.text = "00:00";
    146.          Timername.text = "";
    147.          NbRepetitions.text = "";
    148.          RandomizerToggle.isOn = false;
    149.      }
    150.      public void List_ButtonClicked()
    151.      {
    152.          MenuContainerPrefab.SetActive(false);
    153.          ChronolistPrefabs.SetActive(true);
    154.          GenerateGrid();
    155.      }
    156.      public void Settings_ButtonClicked()
    157.      {
    158.          MenuContainerPrefab.SetActive(false);
    159.          SettingViewPrefabs.SetActive(true);
    160.      }
    161.      #endregion
    162.      #region Create View
    163.      public void CreateView_BackButton()
    164.      {
    165.          CreateNewPrefabs.SetActive(false);
    166.          MenuContainerPrefab.SetActive(true);
    167.      }
    168.    
    169.      public void CreateNew_SaveButton()
    170.      {
    171.          Timer Comparator = new Timer();
    172.          if(newTimer.TimerName == null || newTimer.TimerName == "")
    173.          {
    174.              newTimer.TimerName = "ChronometreSansNom";
    175.          }
    176.          if(newTimer.nbRepetitions == 0 || newTimer.nbRepetitions < 0 )
    177.          {
    178.              newTimer.nbRepetitions = 1;
    179.          }
    180.          userTimers = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Timer>>(PlayerPrefs.GetString("User Timer List"));
    181.          Comparator = GetTimerInSaveToPlay(newTimer.TimerName, userTimers);
    182.          if(Comparator == newTimer)
    183.          {
    184.              userTimers.Remove(Comparator);
    185.              userTimers.Add(newTimer);
    186.              PlayerPrefs.SetString("User Timer List", Newtonsoft.Json.JsonConvert.SerializeObject(userTimers));
    187.              PlayerPrefs.Save();
    188.          }
    189.          else
    190.          {
    191.              userTimers.Add(newTimer);
    192.              PlayerPrefs.SetString("User Timer List", Newtonsoft.Json.JsonConvert.SerializeObject(userTimers));
    193.              PlayerPrefs.Save();
    194.          }
    195.          CreateNewPrefabs.SetActive(false); ;
    196.          SavedViewPrefab.SetActive(true);
    197.          togglesaved.isOn = newTimer.RandomTimer;
    198.          if (togglesaved.isOn == true)
    199.          {
    200.              SavedEffortDoubleSliderInterface.SetActive(true);
    201.              SavedEffortSoloSliderInterface.SetActive(false);
    202.          }
    203.          if (togglesaved.isOn == false)
    204.          {
    205.              SavedEffortSoloSliderInterface.SetActive(true);
    206.              SavedEffortDoubleSliderInterface.SetActive(false);
    207.          }
    208.          togglesaved.isOn = RandomizerToggle.isOn;
    209.          togglesaved.enabled = false;
    210.          EffortSoloSliderSaved.enabled = false;
    211.          EffortSoloSliderSaved.value = EffortSoloSlider.value;
    212.          FightDurationSliderSaved.value = EffortDoubleSlider.value;
    213.          OptionnalDurationSliderSaved.value = OptionnalDurationSlider.value;
    214.          RestDoubleSliderSaved.value = RestDoubleSlider.value;
    215.          RestMaxSliderSaved.value = RestMaxSlider.value;
    216.          effortsololabel.text = SoloSliderValueDisplayer.text;
    217.          effortminlabel.text = FightDurationDoubleSliderDisplayer.text;
    218.          effortmaxlabel.text = OptionnalDurationDoubleSliderDisplayer.text;
    219.          Restminlabel.text = RestMinDoubleSliderDisplayer.text;
    220.          Restmaxlabel.text = RestMaxDoubleSliderDisplayer.text;
    221.          FightDurationSliderSaved.enabled = false;
    222.          nbrepdisplay.text = NbRepetitions.text;
    223.          OptionnalDurationSlider.enabled = false;
    224.          RestDoubleSliderSaved.enabled = false;
    225.          RestMaxSliderSaved.enabled = false;
    226.          timernamedisplay.text = Timername.text;
    227.      }
    228.      #endregion
    229.      #region Saved View
    230.      public void SavedView_BackButton()
    231.      {
    232.          SavedViewPrefab.SetActive(false);
    233.          MenuContainerPrefab.SetActive(true);
    234.      }
    235.      public void SavedView_PlayClicked()
    236.      {
    237.          TimerLeft = 0;
    238.          string contexttimername = Timername.text;
    239.          SavedViewPrefab.SetActive(false);
    240.          ChronoViewPrefabs.SetActive(true);
    241.          Timer contexttimer = null;
    242.          contexttimer = newTimer;
    243.          contexttimer.SetValue();
    244.          ChronoTimer = contexttimer;
    245.          ChronoField.color = Color.green;
    246.          if (contexttimer.RandomTimer == true)
    247.          {
    248.              TimerLeft = contexttimer.effortTotalDuration * 1.0f;
    249.              contexttimer.EffectiveEffortTimeCalculator.Add(contexttimer.effortTotalDuration);
    250.              isUp = true;
    251.              currentRepetition = 1;
    252.          }
    253.          //Si le premier temps n'est pas aléatoire
    254.          else if (contexttimer.RandomTimer == false)
    255.          {
    256.              TimerLeft = contexttimer.FightDuration.TotalSeconds * 1.0f;
    257.              contexttimer.EffectiveEffortTimeCalculator.Add(contexttimer.effortTotalDuration);
    258.              isUp = true;
    259.              currentRepetition = 1;
    260.          }
    261.          else
    262.          {
    263.              isUp = false;
    264.          }
    265.      }
    266.      #endregion
    267.      #region Setting View
    268.      public void SettingView_BackButton()
    269.      {
    270.          SettingViewPrefabs.SetActive(false);
    271.          MenuContainerPrefab.SetActive(true);
    272.      }
    273.      #endregion
    274.      #region List View
    275.      public void ChronoListView_BackButton()
    276.      {
    277.          ChronolistPrefabs.SetActive(false);
    278.          MenuContainerPrefab.SetActive(true);
    279.      }
    280.      public void RemoveTimerFromSave()
    281.      {
    282.          GameObject buttonSection = EventSystem.current.currentSelectedGameObject.transform.parent.gameObject;
    283.          GameObject TemplateMainGo = buttonSection.transform.parent.gameObject;
    284.          GameObject TnameField = TemplateMainGo.transform.GetChild(0).gameObject;
    285.          Text Timername = TnameField.GetComponent<Text>();
    286.          userTimers = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Timer>>(PlayerPrefs.GetString("User Timer List"));
    287.          Timer t = GetTimerInSaveToPlay(Timername.text, userTimers);
    288.          userTimers.Remove(t);
    289.          PlayerPrefs.SetString("User Timer List", Newtonsoft.Json.JsonConvert.SerializeObject(userTimers));
    290.          PlayerPrefs.Save();
    291.          DestroyImmediate(TemplateMainGo, true);
    292.      }
    293.      public void CopyTimer()
    294.      {
    295.          GameObject buttonSection = EventSystem.current.currentSelectedGameObject.transform.parent.gameObject;
    296.          GameObject TemplateMainGo = buttonSection.transform.parent.gameObject;
    297.          GameObject TnameField = TemplateMainGo.transform.GetChild(0).gameObject;
    298.          GameObject test = TemplateMainGo.transform.parent.gameObject;
    299.          GameObject go = Instantiate(DataTemplate, timerContainer.transform) as GameObject;
    300.          go.transform.SetParent(timerContainer.transform, false);
    301.          go.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);
    302.          Text Timername = TnameField.GetComponent<Text>();
    303.          userTimers = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Timer>>(PlayerPrefs.GetString("User Timer List"));
    304.          Timer t = GetTimerInSaveToPlay(Timername.text, userTimers);
    305.          Timer titi = t.Clone();
    306.          userTimers.Add(titi);
    307.          PlayerPrefs.SetString("User Timer List", Newtonsoft.Json.JsonConvert.SerializeObject(userTimers));
    308.          PlayerPrefs.Save();
    309.      }
    310.      public void EditTimer()
    311.      {
    312.          GameObject buttonSection = EventSystem.current.currentSelectedGameObject.transform.parent.gameObject;
    313.          GameObject TemplateMainGo = buttonSection.transform.parent.gameObject;
    314.          GameObject TnameField = TemplateMainGo.transform.GetChild(0).gameObject;
    315.          Text Timername = TnameField.GetComponent<Text>();
    316.          userTimers = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Timer>>(PlayerPrefs.GetString("User Timer List"));
    317.          Timer t = GetTimerInSaveToPlay(Timername.text, userTimers);
    318.          newTimer = t;
    319.          GameObject itemContainers = TemplateMainGo.transform.parent.gameObject;
    320.          GameObject itemContainersContainer = itemContainers.transform.parent.gameObject;
    321.          GameObject GridTest = itemContainersContainer.transform.parent.gameObject;
    322.          GameObject ContentPresenter = GridTest.transform.parent.gameObject;
    323.          GameObject CreateNewView = ContentPresenter.transform.Find("CreateNew").gameObject;
    324.          newTimer = t;
    325.          NbRepetitions.text = "" + t.nbRepetitions;
    326.          Timername.text = t.TimerName;
    327.          RandomizerToggle.isOn = t.RandomTimer;
    328.          EffortSoloSlider.value = (float)t.FightDuration.TotalSeconds;
    329.          EffortDoubleSlider.value = (float)t.FightDuration.TotalSeconds;
    330.          OptionnalDurationSlider.value = (float)t.OptionnalDuration.TotalSeconds;
    331.          RestDoubleSlider.value = (float)t.RestSequenceMaximum.TotalSeconds;
    332.          RestMaxSlider.value = (float)t.RestSequenceMaximum.TotalSeconds;
    333.          GridTest.SetActive(false);
    334.          CreateNewView.SetActive(true);
    335.          NbRepetitions.text = "" + t.nbRepetitions;
    336.          Timername.text = t.TimerName;
    337.          RandomizerToggle.isOn = t.RandomTimer;
    338.          EffortSoloSlider.value = (float)t.FightDuration.TotalSeconds;
    339.          EffortDoubleSlider.value = (float)t.FightDuration.TotalSeconds;
    340.          OptionnalDurationSlider.value = (float)t.OptionnalDuration.TotalSeconds;
    341.          RestDoubleSlider.value = (float)t.RestSequenceMaximum.TotalSeconds;
    342.          RestMaxSlider.value = (float)t.RestSequenceMaximum.TotalSeconds;
    343.      }
    344.      public void GenerateGrid()
    345.      {
    346.          timerContainer.transform.DetachChildren();
    347.          userTimers = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Timer>>(PlayerPrefs.GetString("User Timer List"));
    348.          foreach (Timer t in userTimers)
    349.          {
    350.              GameObject go = Instantiate(DataTemplate);
    351.              go.transform.SetParent(timerContainer.transform, false);
    352.              go.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);
    353.              TimerName.text = t.TimerName;
    354.              nbRepetitions.text = "" + t.nbRepetitions;
    355.              if (t.RandomTimer == false)
    356.              {
    357.                  FightDurationTemplate.text = "";
    358.                   OptionnalDurationTemplate.text = "";
    359.                  SoloSliderDisplayer.text = t.FightDuration.Minutes.ToString("00") + ":" + t.FightDuration.Seconds.ToString("00");
    360.              }
    361.              if (t.RandomTimer == true)
    362.              {
    363.                  SoloSliderDisplayer.text = "";
    364.                  FightDurationTemplate.text = t.FightDuration.Minutes.ToString("00") + ":" + t.FightDuration.Seconds.ToString("00");
    365.                  OptionnalDurationTemplate.text = t.OptionnalDuration.Minutes.ToString("00") + ":" + t.OptionnalDuration.Seconds.ToString("00");
    366.              }
    367.              ResstMinDurationTemplate.text = t.RestSequenceMinimum.Minutes.ToString("00") + ":" + t.RestSequenceMinimum.Seconds.ToString("00");
    368.              RestMaxDurationTemplate.text = t.RestSequenceMinimum.Minutes.ToString("00") + ":" + t.RestSequenceMinimum.Seconds.ToString("00");
    369.              RandomToggle.isOn = t.RandomTimer;
    370.              RandomToggle.enabled = false;
    371.          }
    372.      }
    373.      public void PlayTimer()
    374.      {
    375.          if(isUp == true)
    376.          {
    377.              isUp = false;
    378.          }
    379.          TimerLeft = 0;
    380.          GameObject buttonsection = EventSystem.current.currentSelectedGameObject.transform.parent.gameObject;
    381.          GameObject TemplateMainGo = buttonsection.transform.parent.gameObject;
    382.          GameObject tnamefield = TemplateMainGo.transform.GetChild(0).gameObject;
    383.          Text Timername = tnamefield.GetComponent<Text>();
    384.          string contexttimername = Timername.text;
    385.          SavedViewPrefab.SetActive(false);
    386.          ChronoViewPrefabs.SetActive(true);
    387.          Timer contexttimer = null;
    388.          contexttimer = GetTimerInSaveToPlay(contexttimername, userTimers);
    389.          contexttimer.SetValue();
    390.          ChronoTimer = contexttimer;
    391.          ChronoField.color = Color.green;
    392.          if (contexttimer.RandomTimer == true)
    393.          {
    394.              TimerLeft = contexttimer.effortTotalDuration * 1.0f;
    395.              contexttimer.EffectiveEffortTimeCalculator.Add(contexttimer.effortTotalDuration);
    396.              isUp = true;
    397.              currentRepetition = 1;
    398.          }
    399.          //Si le premier temps n'est pas aléatoire
    400.          else if (contexttimer.RandomTimer == false)
    401.          {
    402.              TimerLeft = contexttimer.FightDuration.TotalSeconds * 1.0f;
    403.              contexttimer.EffectiveEffortTimeCalculator.Add(contexttimer.effortTotalDuration);
    404.              isUp = true;
    405.              currentRepetition = 1;
    406.          }
    407.          else
    408.          {
    409.              isUp = false;
    410.          }
    411.      }
    412.      #endregion
    413.      #region Chrono View
    414.      public void PauseButton_Clicked()
    415.      {
    416.          isUp = false;
    417.          PauseButton.SetActive(false);
    418.          UnpauseButton.SetActive(true);
    419.      }
    420.      public void UnpauseButton_Clicked()
    421.      {
    422.          isUp = true;
    423.          UnpauseButton.SetActive(false);
    424.          PauseButton.SetActive(true);
    425.      }
    426.      public void QuitButton_Clicked()
    427.      {
    428.          isUp = false;
    429.          ChronoViewPrefabs.SetActive(false);
    430.          MenuContainerPrefab.SetActive(true);
    431.      }
    432.      #endregion
    433.      #endregion
    434.      #region Unity Fixed Update
    435.      private void FixedUpdate()
    436.      {
    437.        
    438.      }
    439.      #endregion
    440.      #region Unity Update Method
    441.      // Update is called once per frame
    442.      void Update()
    443.      {
    444.          if (ChronoViewPrefabs != null)
    445.          {
    446.              if(isUp == true && ChronoViewPrefabs.activeSelf == true && TimerLeft  == 3)
    447.              {
    448.                  SoundManager.clip = SoundThree;
    449.                  SoundManager.Play();
    450.              }
    451.              if (isUp == true && ChronoViewPrefabs.activeSelf == true && TimerLeft  == 2)
    452.              {
    453.                  SoundManager.clip = SoundTwo;
    454.                  SoundManager.Play();
    455.              }
    456.              if (isUp == true && ChronoViewPrefabs.activeSelf == true && TimerLeft  == 1)
    457.              {
    458.                  SoundManager.clip = SoundOne;
    459.                  SoundManager.Play();
    460.              }
    461.              if (isUp == false && ChronoViewPrefabs.activeSelf == true )
    462.              {
    463.                  if (TimerLeft == 0)
    464.                  {
    465.                      SoundManager.clip = TimerBeep;
    466.                      SoundManager.Play();
    467.                      ChronoField.text = "";
    468.                      string totalEffortDisplayer = ChronoTimer.GetEffortEffectiveTime();
    469.                      string totalRestDisplayer = ChronoTimer.GetRestEffectiveTime(); ChronoField.resizeTextForBestFit = false;
    470.                      ChronoField.fontSize = 55;
    471.                      ChronoField.color = Color.white;
    472.                      ChronoField.text = "Le temps d'effort effectif de la session était de " + totalEffortDisplayer + " et le temps effectif de repos de " + totalRestDisplayer + ".";
    473.                  }
    474.              }
    475.              if (isUp == true && ChronoViewPrefabs.activeSelf == true)
    476.              {
    477.                 TimerLeft -= Time.deltaTime;
    478.                  if (TimerLeft < 0)
    479.                  {
    480.                      currentRepetition++;
    481.                      if (currentRepetition <= ChronoTimer.nbRepetitions * 2)
    482.                      {
    483.                          int i = currentRepetition;
    484.                          if (i % 2 == 0)
    485.                          {
    486.                              TimerLeft = ChronoTimer.restTotalDuration * 1.0f;
    487.                              ChronoTimer.EffectiveRestTimeCalculator.Add(ChronoTimer.restTotalDuration);
    488.                              ChronoField.color = Color.red;
    489.                          }
    490.                          //Si ce n'est pas un temps de repos
    491.                          else if (i % 2 != 0)
    492.                          {
    493.                              //Si le premier temps est aléatoire
    494.                              if (ChronoTimer.RandomTimer == true)
    495.                              {
    496.                                  TimerLeft = ChronoTimer.effortTotalDuration * 1.0f;
    497.                                  ChronoTimer.EffectiveEffortTimeCalculator.Add(ChronoTimer.effortTotalDuration);
    498.                              }
    499.                              //Si le premier temps n'est pas aléatoire
    500.                              else if (ChronoTimer.RandomTimer == false)
    501.                              {
    502.                                  TimerLeft = ChronoTimer.FightDuration.TotalSeconds * 1.0f;
    503.                                  ChronoTimer.EffectiveEffortTimeCalculator.Add(ChronoTimer.effortTotalDuration);
    504.                              }
    505.                              else
    506.                              {
    507.                                  isUp = false;
    508.                              }
    509.                              ChronoField.color = Color.green;
    510.                          }
    511.                          else
    512.                          {
    513.                              isUp = false;
    514.                          }
    515.                      }
    516.                      else
    517.                      {
    518.                          isUp = false;
    519.                      }
    520.                  }
    521.              }
    522.              if (isUp == true && ChronoViewPrefabs.activeSelf == true)
    523.              {
    524.                  displayer = TimeSpan.FromSeconds(TimerLeft).Minutes.ToString("00") + ":" + TimeSpan.FromSeconds(TimerLeft).Seconds.ToString("00");
    525.                  ChronoField.text = displayer;
    526.              }
    527.          }
    528.          //Récupération de la valeur du toggle button si false
    529.          if (CreateNewPrefabs.activeSelf == true && RandomizerToggle.isOn == false)
    530.          {
    531.              EffortDoubleSliderInterface.SetActive(false);
    532.              SoloInterface.SetActive(true);
    533.              newTimer.RandomTimer = false;
    534.          }
    535.          //Récupération de la valeur du toggle button si true
    536.          else if (CreateNewPrefabs.activeSelf == true &&  RandomizerToggle.isOn == true)
    537.          {
    538.              SoloInterface.SetActive(false);
    539.              EffortDoubleSliderInterface.SetActive(true);
    540.              newTimer.RandomTimer = true;
    541.          }
    542.          //Récupération du nombre de répétitions
    543.          if (NbRepetitions.text != newTimer.nbRepetitions.ToString() && CreateNewPrefabs.activeSelf == true)
    544.          {
    545.              int value = 0;
    546.              if (int.TryParse(NbRepetitions.text, out value))
    547.                  newTimer.nbRepetitions = value;
    548.          }
    549.          //Récupération du nom du chronomètre
    550.          if (Timername.text != newTimer.TimerName && CreateNewPrefabs.activeSelf == true)
    551.          {
    552.              newTimer.TimerName = Timername.text;
    553.          }
    554.        
    555.      }
    556.      #endregion
    557.      #region Methods
    558.      public Timer GetTimerInSaveToPlay(string timername ,List<Timer> userTimers)
    559.      {
    560.          string lestrouaquimontomberdsu = timername;
    561.          Timer t =null;
    562.          foreach (Timer ledavid in userTimers)
    563.          {
    564.              if (ledavid.TimerName == lestrouaquimontomberdsu)
    565.              {
    566.                  t = ledavid;
    567.              }
    568.          }
    569.          return t;
    570.      }
    571.      #endregion
    572.      #region Sliders Values Manager
    573.      //Sliders on value change methods
    574.      public void RangeSliderEffortSoloTimeSpan_OnValueChanged()
    575.      {
    576.          newTimer.FightDuration = TimeSpan.FromSeconds(EffortSoloSlider.value);
    577.          SoloSliderValueDisplayer.text = newTimer.FightDuration.Minutes.ToString("00") + ":" + newTimer.FightDuration.Seconds.ToString("00");
    578.      }
    579.      public void RangeSliderEffortFirstTimeSpan_OnValueChanged()
    580.      {
    581.          if (OptionnalDurationSlider.value < EffortDoubleSlider.value)
    582.          {
    583.              OptionnalDurationSlider.value = EffortDoubleSlider.value + 1;
    584.          }
    585.          newTimer.FightDuration = TimeSpan.FromSeconds(EffortDoubleSlider.value);
    586.          FightDurationDoubleSliderDisplayer.text = newTimer.FightDuration.Minutes.ToString("00") + ":" + newTimer.FightDuration.Seconds.ToString("00");
    587.      }
    588.      public void RangeSliderEffortSecondTimeSpan_OnValueChanged()
    589.      {
    590.          if (OptionnalDurationSlider.value < EffortDoubleSlider.value)
    591.          {
    592.              OptionnalDurationSlider.enabled = false;
    593.              OptionnalDurationSlider.value = EffortDoubleSlider.value + 1;
    594.              OptionnalDurationSlider.enabled = true;
    595.          }
    596.          newTimer.OptionnalDuration = TimeSpan.FromSeconds(OptionnalDurationSlider.value);
    597.          OptionnalDurationDoubleSliderDisplayer.text = newTimer.OptionnalDuration.Minutes.ToString("00") + ":" + newTimer.OptionnalDuration.Seconds.ToString("00");
    598.      }
    599.      public void RangeSliderRestFirstTimeSpan_OnValueChanged()
    600.      {
    601.          if (RestMaxSlider.value < RestDoubleSlider.value)
    602.          {
    603.              RestMaxSlider.value = RestDoubleSlider.value + 1;
    604.          }
    605.          newTimer.RestSequenceMinimum = TimeSpan.FromSeconds(RestDoubleSlider.value);
    606.          RestMinDoubleSliderDisplayer.text = newTimer.RestSequenceMinimum.Minutes.ToString("00") + ":" + newTimer.RestSequenceMinimum.Seconds.ToString("00");
    607.      }
    608.      public void RangeSliderRestSecondTimeSpan_OnValueChanged()
    609.      {
    610.          if (RestMaxSlider.value < RestDoubleSlider.value)
    611.          {
    612.              RestMaxSlider.enabled = false;
    613.              RestMaxSlider.value = RestDoubleSlider.value + 1;
    614.              RestMaxSlider.enabled = true;
    615.          }
    616.          newTimer.RestSequenceMaximum = TimeSpan.FromSeconds(RestMaxSlider.value);
    617.          RestMaxDoubleSliderDisplayer.text = newTimer.RestSequenceMaximum.Minutes.ToString("00") + ":" + newTimer.RestSequenceMaximum.Seconds.ToString("00");
    618.      }
    619.      #endregion
    620. }
    621. #region Objet Timer
    622. [System.Serializable]
    623. public class Timer
    624. {
    625.      #region Properties
    626.      public bool RandomTimer;
    627.      public List<double> EffectiveRestTimeCalculator = new List<double>();
    628.      public List<double> EffectiveEffortTimeCalculator = new List<double>();
    629.      //Récupérateurs de valeurs
    630.      public TimeSpan FightDuration;
    631.      public TimeSpan OptionnalDuration;
    632.      public TimeSpan RestSequenceMinimum;
    633.      public TimeSpan RestSequenceMaximum;
    634.      ////Gestion de la sérialisation des données des sliders
    635.      //public double FightDurationDouble;
    636.      //public double optionnaldurationdouble;
    637.      //public double restsequenceminimumdouble;
    638.      //public double restsequencemaximumdouble;
    639.      public string TimerName;
    640.      public double effortTotalDuration;
    641.      public double restTotalDuration;
    642.      public int nbRepetitions;
    643.      #endregion
    644.      #region Methods
    645.      public void SetValue()
    646.      {
    647.          if (RandomTimer == true)
    648.          {
    649.              System.Random effortRandomizer = new System.Random();
    650.              System.Random restRandomizer = new System.Random();
    651.              effortTotalDuration = NextDouble(effortRandomizer, FightDuration.TotalSeconds, OptionnalDuration.TotalSeconds);
    652.              restTotalDuration = NextDouble(restRandomizer, RestSequenceMinimum.TotalSeconds, RestSequenceMaximum.TotalSeconds);
    653.          }
    654.          else if (RandomTimer == false)
    655.          {
    656.              effortTotalDuration = FightDuration.TotalSeconds;
    657.              System.Random restRandomizer = new System.Random();
    658.              restTotalDuration = NextDouble(restRandomizer, RestSequenceMinimum.TotalSeconds, RestSequenceMaximum.TotalSeconds);
    659.          }
    660.      }
    661.      public static double NextDouble(System.Random r, double MinValue, double MaxValue)
    662.      {
    663.          return r.NextDouble() * (MaxValue - MinValue) + MinValue;
    664.      }
    665.      public Timer Clone()
    666.      {
    667.          return new Timer()
    668.          {
    669.              TimerName = this.TimerName + ("(Copie)"),
    670.              RandomTimer = this.RandomTimer,
    671.              FightDuration = TimeSpan.FromSeconds(this.FightDuration.TotalSeconds),
    672.              OptionnalDuration = TimeSpan.FromSeconds(this.OptionnalDuration.TotalSeconds),
    673.              RestSequenceMinimum = TimeSpan.FromSeconds(this.RestSequenceMinimum.TotalSeconds),
    674.              RestSequenceMaximum = TimeSpan.FromSeconds(this.RestSequenceMaximum.TotalSeconds),
    675.              nbRepetitions = this.nbRepetitions,
    676.              effortTotalDuration = this.effortTotalDuration,
    677.              restTotalDuration = this.restTotalDuration,
    678.          };
    679.      }
    680.      public string GetRestEffectiveTime()
    681.      {
    682.          double totalRest = 0;
    683.          foreach (double q in EffectiveRestTimeCalculator)
    684.          {
    685.              totalRest += q;
    686.          }
    687.          string totalRestDisplayer = TimeSpan.FromSeconds(totalRest).Minutes.ToString("00") + ":" + TimeSpan.FromSeconds(totalRest).Seconds.ToString("00");
    688.          return totalRestDisplayer;
    689.      }
    690.      public string GetEffortEffectiveTime()
    691.      {
    692.          double totalEffort = 0;
    693.          foreach (double q in EffectiveEffortTimeCalculator)
    694.          {
    695.              totalEffort += q;
    696.          }
    697.          string totalEffortDisplayer = TimeSpan.FromSeconds(totalEffort).Minutes.ToString("00") + ":" + TimeSpan.FromSeconds(totalEffort).Seconds.ToString("00");
    698.          return totalEffortDisplayer;
    699.      }
    700.      internal void ResetCreator()
    701.      {
    702.          TimerName = "";
    703.          RandomTimer = false;
    704.          OptionnalDuration = TimeSpan.Zero;
    705.          RestSequenceMinimum = TimeSpan.Zero;
    706.          RestSequenceMaximum = TimeSpan.Zero;
    707.          nbRepetitions = 1;
    708.          effortTotalDuration = 0;
    709.          restTotalDuration = 0;
    710.      }
    711.      #endregion
    712. }
    713. #endregion