IEnumerator Evolve()
    {
        evolutionShowing = true;

        Patents.Sort((p1, p2) => p1.dateGranted.CompareTo(p2.dateGranted));
        Patents.ForEach(p => p.AssociatedGameObject.SetActive(false));

        DateTime currentTime = DateTime.MinValue;

        currentTime = currentTime.AddYears(2000);

        while (currentTime < DateTime.Today)
        {
            foreach (Patent p in Patents)
            {
                if (currentTime > p.dateGranted)
                {
                    p.AssociatedGameObject.SetActive(true);
                }
            }
            currentTime = currentTime.AddMonths(1);

            yield return(null);
        }

        evolutionShowing = false;
    }
 private void Awake()
 {
     using (var r = new StreamReader(PatentJsonFileLocation)) {
         var json = r.ReadToEnd();
         Patents = JsonConvert.DeserializeObject <List <Patent> >(json);
         Patents.ForEach(p => p.Alpha = PatentConfig["DefaultAlpha"].FloatValue);
         Patents.ForEach(p => p.Size  = PatentConfig["InitialSize"].FloatValue);
         GameObjectToPatent           = new Dictionary <GameObject, Patent>(Patents.Count);
         Patents.ForEach(p => GameObjectToPatent.Add(p.AssociatedGameObject, p));
         PatentIdToPatent = new Dictionary <string, Patent>(Patents.Count);
         Patents.ForEach(p => PatentIdToPatent.Add(p.patentID, p));
     }
 }