/// <summary>
 /// Remove button from list
 /// </summary>
 /// <param name="button"></param>
 public void RemoveLevel(CustomLevelButton button)
 {
     buttons.Remove(button);
     if (buttons.Count == 0)
     {
         deleteButton.SetActive(false);
     }
     else
     {
         EventSystem.current.SetSelectedGameObject(deleteButton);
     }
 }
    protected override void SpawnButtons(string[] fileNames)
    {
        for (int i = 0; i < levelCount - 1; i++)
        {
            GameObject        buttonObject = InstantiateButtonAsChild();
            CustomLevelButton button       = buttonObject.GetComponent <CustomLevelButton>();
            button.SetLevelNameAndId(fileNames[i], i + 1);
            button.SetLevelSelection(this);
            buttons.Add(button);
        }

        if (buttons.Count > 0)
        {
            deleteButton = Instantiate(deleteButtonPrefab);
            deleteButton.transform.SetParent(this.transform);
            deleteButton.transform.localScale = Vector3.one;
            deleteButton.GetComponent <Button>().onClick.AddListener(SwitchDeleteMode);
        }
    }
    public void Refresh()
    {
        Pack pack = ((CustomGameManager)CustomGameManager.Instance).Packs.Selected;

        ItemsRange range = LevelController.PackLevelsRange(pack);

        for (int i = range.From; i < range.To + 1; i++)
        {
            Level level = GameManager.Instance.Levels.GetItem(i);
            level.LoadData();

            GameObject newObject = Instantiate(Prefab);
            newObject.transform.SetParent(transform, false);

            CustomLevelButton levelButton = newObject.GetComponent <CustomLevelButton>();
            levelButton.Context.Number = i;

            if (level.IsUnlocked)
            {
                CanvasGroup canvasGroup = GameObjectHelper.GetChildComponentOnNamedGameObject <CanvasGroup> (newObject, "PlayButton", true);
                canvasGroup.alpha = 1f;
            }

            Level nextLevel = GameManager.Instance.Levels.GetItem(i + 1);

            if (nextLevel != null && nextLevel.IsUnlocked == false && level.IsUnlocked)
            {
                Animator anim = GameObjectHelper.GetChildComponentOnNamedGameObject <Animator>(newObject, "PlayButton", true);
                anim.enabled = true;
            }

            if (level.ProgressBest > 0.9f)
            {
                Text statusText = GameObjectHelper.GetChildComponentOnNamedGameObject <Text>(newObject, "Status", true);
                statusText.text = LocaliseText.Get("Text.Done");
            }

            Text text = GameObjectHelper.GetChildComponentOnNamedGameObject <Text> (newObject, "Name", true);
            text.text = LocaliseText.Format("Text.LevelNumber", i);

            GameObject previewObject = GameObjectHelper.GetChildNamedGameObject(newObject, "Preview", true);
            GameObject wordsObject   = GameObjectHelper.GetChildNamedGameObject(previewObject, "Words", true);

            string preview    = level.JsonData.GetString("preview");
            char[] characters = preview.ToCharArray();

            int index = 0;
            int angle = 360 / characters.Length;

            foreach (char _char in characters)
            {
                GameObject _charObject = Instantiate(_charPrefab, wordsObject.transform);

                Vector3 pos = Vector3Utils.RandomCircle(wordsObject.transform.position, 0.2f, angle, index);
                _charObject.transform.position   = pos;
                _charObject.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f);

                GameObject _text = GameObjectHelper.GetChildNamedGameObject(_charObject, "Text", true);
                _text.GetComponent <Text> ().text = _char.ToString().ToUpper();

                index++;
            }

            buttons.Add(newObject);
        }
    }