Ejemplo n.º 1
0
 private void OnEnable()
 {
     if (popRef == null)
     {
         popRef = FindObjectOfType <PopRef>();
     }
     if (allUIObjects == null)
     {
         allUIObjects = popRef.themeSwap.allFlexibleUIData[popRef.themeSwap.activeIndex].allUIObjects;
     }
     allUIObjects.Add(this);
 }
Ejemplo n.º 2
0
    public void Swap()
    {
        int activeThemesCount = allFlexibleUIData.Count;

        if (previousFlexibleUIData == null)
        {
            OnEnable();
        }

        //Check if activeIndex is within the existing range
        if (activeIndex > activeThemesCount - 1)
        {
            activeIndex = 0;
        }

        //Adds unique themes to the new elements
        if (activeThemesCount > previousFlexibleUIData.Count)
        {
            //if there are no spare themes
            if (activeThemesCount > popRef.allThemes.Count)
            {
                allFlexibleUIData = previousFlexibleUIData.ToList();
                Debug.LogError("Themes cannot be used twice due to unique collections, create new Theme first", popRef.allThemes[0]);
            }
            else
            {
                int indexLimit = activeThemesCount;
                allFlexibleUIData = previousFlexibleUIData.ToList();
                foreach (var item in popRef.allThemes)
                {
                    if (!allFlexibleUIData.Contains(item))
                    {
                        allFlexibleUIData.Add(item);
                        if (allFlexibleUIData.Count == indexLimit)
                        {
                            break;
                        }
                    }
                }
                OnEnable();
            }
        }
        else if (allFlexibleUIData.Count < previousFlexibleUIData.Count)
        {
            OnEnable();
        }
        //Check for repeating Theme usage, reset if not unique
        else
        {
            bool allUnique = allFlexibleUIData.GroupBy(x => x).All(g => g.Count() == 1);
            if (!allUnique)
            {
                allFlexibleUIData = previousFlexibleUIData.ToList();
                Debug.LogError("Not allowed to use the same Theme twice. This will merge collections", this);
            }
        }

        activeThemesCount = allFlexibleUIData.Count;
        for (int i = 0; i < activeThemesCount; i++)
        {
            if (allFlexibleUIData[i] != previousFlexibleUIData[i])
            {
                for (int j = 0; j < previousFlexibleUIData[i].allUIObjects.Items.Count; j++)
                {
                    CollectionItemUI collectionItemUI = (CollectionItemUI)previousFlexibleUIData[i].allUIObjects.Items[j];
                    collectionItemUI.allUIObjects = allFlexibleUIData[i].allUIObjects;
                    collectionItemUI.allUIObjects.Add(collectionItemUI);
                    FlexibleUI flexibleUI = collectionItemUI.GetComponent <FlexibleUI>();
                    flexibleUI.flexibleUIData = allFlexibleUIData[i];
                    flexibleUI.OnSkinUI();
                }
                previousFlexibleUIData[i].allUIObjects.Items.Clear();
            }
        }

        for (int i = 0; i < activeThemesCount; i++)
        {
            ItemsCollectionUI allUIObjects = allFlexibleUIData[i].allUIObjects;
            int subCount = allUIObjects.Items.Count - 1;
            for (int j = subCount; j >= 0; j--)
            {
                //take out leftover empty items
                if (allUIObjects.Items[j] == null)
                {
                    allUIObjects.Remove(allUIObjects.Items[j]);
                    continue;
                }
                ((CollectionItemUI)allUIObjects.Items[j]).GetComponent <FlexibleUI>().flexibleUIData = allFlexibleUIData[i];
            }
        }

        for (int i = 0; i < activeThemesCount; i++)
        {
            allFlexibleUIData[i].OnValidate();
            previousFlexibleUIData[i] = allFlexibleUIData[i];
        }
    }