private void GenerateResearchButtons()
        {
            foreach (Transform child in ResearchOptionParent)
            {
                Destroy(child.gameObject);
            }

            ResearchOption[] available        = Controller.GetAvailable();
            ResourceComparer resourceComparer = new ResourceComparer();

            Array.Sort(available, new Comparison <ResearchOption>((x, y) => resourceComparer.Compare(x.ResourceCost, y.ResourceCost)));

            foreach (var option in available)
            {
                GameObject           butt   = Instantiate(ResearchButtonPrefab, ResearchOptionParent);
                ResearchOptionButton button = butt.GetComponent <ResearchOptionButton>();
                button.Assign(option);

                Button actualButton = butt.GetComponent <Button>();
                actualButton.interactable = ShouldButtonBeAvailable(button);

                actualButton.onClick.AddListener(() => OnReseachButtonClick(option));
            }

            UpdateAllButtonAvailability();
        }
 private void UpdateAllButtonAvailability()
 {
     foreach (Transform child in ResearchOptionParent)
     {
         ResearchOptionButton butt = child.GetComponent <ResearchOptionButton>();
         UpdateButtonAvailability(butt);
     }
 }
 private void UpdateButtonAvailability(ResearchOptionButton butt)
 {
     butt.UpdateButton(ShouldButtonBeAvailable(butt));
 }
 private bool ShouldButtonBeAvailable(ResearchOptionButton butt)
 => _resourceContainer.HasEnough(butt.Research.ResourceCost) && butt.Research.UniquePrerequisitesCompleted;