Example #1
0
        public void UpdateButtons(DeityFactory factory, Action activateDetailsView, Action deactivateDetailsView)
        {
            void SelectDeityOnClick(int identifier)
            {
                if (factory.CurrentDeity != null && factory.CurrentDeity.identifier == identifier)
                {
                    deactivateDetailsView();
                    factory.CurrentDeity = null;
                }
                else
                {
                    factory.CurrentDeity = factory.GetDeity(identifier);
                    activateDetailsView();
                }
            }

            if (_buttons == null)
            {
                _buttons = new List <DeitySelectButtonControl>();
            }
            foreach (var button in _buttons)
            {
                factory.OnCurrentDeityChange -= button.ChangeCurrentDeity;
                Destroy(button.gameObject);
            }

            _buttons.Clear();
            var count      = 1;
            var collection = factory.GetDeities().OrderBy(deity => deity.identifier);

            foreach (var deity in collection)
            {
                var deityButton = Instantiate(deityButtonPrefab, content.transform);
                var control     = deityButton.GetComponent <DeitySelectButtonControl>();
                control.UpdateText(deity);
                control.button.onClick.AddListener(delegate { SelectDeityOnClick(deity.identifier); });
                factory.OnCurrentDeityChange += control.ChangeCurrentDeity;
                control.ChangeCurrentDeity(null, new DeityEventArgs(factory.CurrentDeity));
                var deityButtonRect = deityButton.GetComponent <RectTransform>();
                deityButtonRect.anchoredPosition = new Vector2(0, 30 + (-60 * count));
                deityButtonRect.offsetMax        = new Vector2(0, deityButtonRect.offsetMax.y);
                deityButtonRect.offsetMin        = new Vector2(0, deityButtonRect.offsetMin.y);
                _buttons.Add(control);
                count += 1;
            }

            var contentRect = content.GetComponent <RectTransform>();

            contentRect.offsetMin = new Vector2(contentRect.offsetMin.x, -60 * (count - 1));
        }