Search Unity

  1. Good news ✨ We have more Unite Now videos available for you to watch on-demand! Come check them out and ask our experts any questions!
    Dismiss Notice
  2. Ever participated in one our Game Jams? Want pointers on your project? Our Evangelists will be available on Friday to give feedback. Come share your games with us!
    Dismiss Notice

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
     
unityunity