void CreateMenu()
    {
        Canvas c = CheckManagers(true);

        if (c != null)
        {
            ZUIManager manager  = FindObjectOfType <ZUIManager>();
            Menu[]     allMenus = FindObjectsOfType <Menu>();

            GameObject menu = Instantiate((GameObject)EditorGUIUtility.Load("ZUI/Templates/Menu.prefab"), c.transform);
            Undo.RegisterCreatedObjectUndo(menu, "Create Menu");
            menu.name = "Menu (" + (allMenus.Length + 1) + ")";
            RectTransform menuRT = menu.GetComponent <RectTransform>();
            menuRT.offsetMin  = menuRT.offsetMax = Vector2.zero;
            menuRT.localScale = Vector3.one;

            Selection.activeGameObject = menu;

            Undo.RecordObject(manager, "Create Menu");
            manager.AllMenus.Add(menu.GetComponent <Menu>());
        }
        else
        {
            if (tryCreatingAgain)
            {
                CreateMenu();
            }
        }
    }
    void CreateSidemenu()
    {
        Canvas c = CheckManagers(true);

        if (c != null)
        {
            ZUIManager manager      = FindObjectOfType <ZUIManager>();
            SideMenu[] allSideMenus = FindObjectsOfType <SideMenu>();

            GameObject menu = Instantiate((GameObject)EditorGUIUtility.Load("ZUI/Templates/SideMenu.prefab"), c.transform);
            Undo.RegisterCreatedObjectUndo(menu, "Create Side-menu");
            menu.name = "SideMenu (" + (allSideMenus.Length + 1) + ")";
            RectTransform smRT = menu.GetComponent <RectTransform>();
            smRT.offsetMin  = smRT.offsetMax = Vector2.zero;
            smRT.localScale = Vector3.one;

            Selection.activeGameObject = menu;

            Undo.RecordObject(manager, "Create Side-menu");
            manager.AllSideMenus.Add(menu.GetComponent <SideMenu>());

            Button b = menu.GetComponentInChildren <Button>();
            if (b)
            {
                UnityAction closeMethod = new UnityAction(FindObjectOfType <ZUIManager>().CloseSideMenu);
                UnityEventTools.AddPersistentListener(b.onClick, closeMethod);
            }
        }
        else
        {
            if (tryCreatingAgain)
            {
                CreateSidemenu();
            }
        }
    }
    void CreatePopup()
    {
        Canvas c = CheckManagers(true);

        if (c != null)
        {
            ZUIManager manager   = FindObjectOfType <ZUIManager>();
            Popup[]    allPopups = FindObjectsOfType <Popup>();

            GameObject popup = Instantiate((GameObject)EditorGUIUtility.Load("ZUI/Templates/Popup.prefab"), c.transform);
            Undo.RegisterCreatedObjectUndo(popup, "Create Pop-up");
            popup.name = "Popup (" + (allPopups.Length + 1) + ")";
            RectTransform popRT = popup.GetComponent <RectTransform>();
            popRT.offsetMin  = popRT.offsetMax = Vector2.zero;
            popRT.localScale = Vector3.one;

            Selection.activeGameObject = popup;

            Undo.RecordObject(manager, "Create Pop-up");
            manager.AllPopups.Add(popup.GetComponent <Popup>());

            Button b = popup.GetComponentInChildren <Button>();
            if (b)
            {
                UnityAction closeMethod = new UnityAction(FindObjectOfType <ZUIManager>().ClosePopup);
                UnityEventTools.AddPersistentListener(b.onClick, closeMethod);
            }
        }
        else
        {
            if (tryCreatingAgain)
            {
                CreatePopup();
            }
        }
    }
    public override void OnInspectorGUI()
    {
        Popup      myPopup = target as Popup;
        ZUIManager zM      = FindObjectOfType <ZUIManager>();

        zM.GetAllHolders();

        #region Activate Button
        if (GUILayout.Button("Activate", GUILayout.Height(30)))
        {
            foreach (Popup p in zM.AllPopups)
            {
                if (p == null)
                {
                    continue;
                }

                Undo.RecordObject(p.gameObject, "Activate Pop-up");
                if (p == myPopup)
                {
                    p.gameObject.SetActive(true);
                }
                else
                {
                    p.gameObject.SetActive(false);
                }
            }
        }
        #endregion

        #region User Interface
        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Settings", EditorStyles.boldLabel);
        EditorGUILayout.LabelField("Is Visible?", visible.boolValue.ToString());
        EditorGUILayout.PropertyField(deactivateWhileInvisible);

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Elements", EditorStyles.boldLabel);
        EditorGUILayout.PropertyField(animatedElements, true);

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Information", EditorStyles.boldLabel);
        EditorGUILayout.PropertyField(titleHolder);
        EditorGUILayout.PropertyField(bodyHolder);

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Switching", EditorStyles.boldLabel);
        if (useSimpleActivation.boolValue == true)
        {
            EditorGUILayout.HelpBox("No animations will be played, all the animated elements will be ignored because \"Use Simple Activation\" option is set to true.", MessageType.Info);
        }
        EditorGUILayout.PropertyField(useSimpleActivation);

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Sounds & Events", EditorStyles.boldLabel);
        EditorGUILayout.PropertyField(showingClip);
        EditorGUILayout.PropertyField(hidingClip);

        EditorGUILayout.Space();

        EditorGUILayout.PropertyField(onShow);
        EditorGUILayout.PropertyField(onHide);

        EditorGUILayout.PropertyField(onShowComplete);
        EditorGUILayout.PropertyField(onHideComplete);

        EditorGUILayout.PropertyField(ignoreEventsOnInitialization, new GUIContent("Ignore On Initialization"));

        EditorGUILayout.PropertyField(overrideBack);
        if (overrideBack.boolValue)
        {
            EditorGUILayout.PropertyField(myBack);
        }

        EditorGUILayout.Space();
        #endregion

        #region Tools
        EditorGUILayout.LabelField("Tools", EditorStyles.boldLabel);

        #region Update Animated Elements Button
        if (GUILayout.Button("Update Animated Elements", GUILayout.Height(30)))
        {
            //Save old elements list to make a check after updating.
            List <UIElement> oldElements = myPopup.AnimatedElements;
            added   = 0;
            removed = 0;

            Undo.RecordObject(myPopup, "Update Animated Items");

            myPopup.AnimatedElements = GetAnimatedElements(myPopup.transform);
            UIElement popupUE = myPopup.GetComponent <UIElement>();
            if (popupUE)
            {
                myPopup.AnimatedElements.Insert(0, popupUE);
            }

            //Check which elements are added and which elements are removed.
            for (int i = 0; i < myPopup.AnimatedElements.Count; i++)
            {
                Undo.RecordObject(myPopup.AnimatedElements[i], "Update Animated Items");
                if (!oldElements.Contains(myPopup.AnimatedElements[i]))
                {
                    added++;
                }
            }
            removed = oldElements.Count - myPopup.AnimatedElements.Count + added;

            updatedElements = true;
        }
        #endregion

        #region Elements Updated Info
        if (updatedElements)
        {
            string removedText = removed != 0 ? "Removed " + removed + " element" + (removed == 1 ? "." : "s.") : "";
            string addedText   = added != 0 ? "Added " + added + " element" + (added == 1 ? ". " : "s. ") : "";
            string finalText   = (added != 0 || removed != 0) ? addedText + removedText : "Nothing changed. Is the element you want this holder to control being controlled by another holder?";

            EditorGUILayout.HelpBox(finalText, (added != 0 || removed != 0) ? MessageType.Info : MessageType.Warning);
        }
        #endregion

        if (!zM && !AssetDatabase.Contains(target))
        {
            Debug.LogError("There's no ZUIManager script in the scene, you can have it by using the menu bar ZUI>Creation Window>Setup. Or by creating an empty GameObject and add ZUIManager script to it.");
            serializedObject.ApplyModifiedProperties();
            return;
        }

        #region Check Menu Independant Elements
        if (myPopup.AnimatedElements != null)
        {
            for (int i = 0; i < myPopup.AnimatedElements.Count; i++)
            {
                if (myPopup.AnimatedElements[i] == null)
                {
                    continue;
                }

                if (!myPopup.AnimatedElements[i].MenuDependent)
                {
                    if (EditorUtility.DisplayDialog("Error", myPopup.AnimatedElements[i].gameObject.name + " is menu independant but is inside this Pop-up's elements list.", "Remove it from the list", "Switch it to menu dependant"))
                    {
                        Undo.RecordObject(myPopup, "Removing from list");
                        myPopup.AnimatedElements[i].ControlledBy = null;
                        myPopup.AnimatedElements.RemoveAt(i);
                        i--;
                        continue;
                    }
                    else
                    {
                        Undo.RecordObject(myPopup, "Switch to menu dependant");
                        myPopup.AnimatedElements[i].MenuDependent = true;
                    }
                }
                if (myPopup.AnimatedElements[i].ControlledBy != myPopup)
                {
                    myPopup.AnimatedElements[i].ControlledBy = myPopup;
                }
            }
        }
        #endregion
        #endregion

        serializedObject.ApplyModifiedProperties();
    }
Beispiel #5
0
 void Awake()
 {
     Instance = this;
 }
    public override void OnInspectorGUI()
    {
        //base.OnInspectorGUI();
        ZUIManager myZUIManager = target as ZUIManager;

        EditorGUILayout.Space();

        EditorGUILayout.PropertyField(autoFindHolders, new GUIContent("Auto Find Holders"));

        if (!autoFindHolders.boolValue)
        {
            #region Menus
            EditorGUILayout.LabelField("Menus", EditorStyles.boldLabel);

            EditorGUILayout.PropertyField(allMenus, true);
            EditorGUILayout.PropertyField(animateFirstMenuAtStart);

            //EditorGUILayout.LabelField("Tools", EditorStyles.boldLabel);
            if (GUILayout.Button("Update All Menus", GUILayout.Height(30)))
            {
                Undo.RecordObject(myZUIManager, "Update All Menus");
                myZUIManager.AllMenus = GetAllMenus();
            }
            if (GUILayout.Button("Activate All Menus", GUILayout.Height(30)))
            {
                foreach (Menu m in myZUIManager.AllMenus)
                {
                    Undo.RecordObject(m.gameObject, "Activate All Menus");
                    m.gameObject.SetActive(true);
                }
            }
            #endregion

            EditorGUILayout.Space();

            #region Pop-ups
            EditorGUILayout.LabelField("Pop-ups", EditorStyles.boldLabel);

            EditorGUILayout.PropertyField(allPopups, true);

            if (GUILayout.Button("Update All Pop-ups", GUILayout.Height(30)))
            {
                Undo.RecordObject(myZUIManager, "Update All Pop-ups");
                myZUIManager.AllPopups = GetAllPopups();
            }
            if (GUILayout.Button("Activate All Pop-ups", GUILayout.Height(30)))
            {
                foreach (Popup sM in myZUIManager.AllPopups)
                {
                    Undo.RecordObject(sM.gameObject, "Activate All Pop-ups");
                    sM.gameObject.SetActive(true);
                }
            }
            #endregion

            EditorGUILayout.Space();

            #region Side-menus
            EditorGUILayout.LabelField("Side-menus", EditorStyles.boldLabel);

            EditorGUILayout.PropertyField(allSideMenus, true);

            if (GUILayout.Button("Update All Side-menus", GUILayout.Height(30)))
            {
                Undo.RecordObject(myZUIManager, "Update All Side-menus");
                myZUIManager.AllSideMenus = GetAllSideMenus();
            }
            if (GUILayout.Button("Activate All Side-menus", GUILayout.Height(30)))
            {
                foreach (SideMenu sM in myZUIManager.AllSideMenus)
                {
                    Undo.RecordObject(sM.gameObject, "Activate All Side-menus");
                    sM.gameObject.SetActive(true);
                }
            }
            #endregion
        }
        EditorGUILayout.Space();

        #region General Settings
        EditorGUILayout.LabelField("General Settings", EditorStyles.boldLabel);
        if (autoFindHolders.boolValue)
        {
            EditorGUILayout.PropertyField(animateFirstMenuAtStart);
        }
        EditorGUILayout.PropertyField(escIsBack);

        if (!autoFindHolders.boolValue && GUILayout.Button("Update All", GUILayout.Height(30)))
        {
            Undo.RecordObject(myZUIManager, "Update All");
            myZUIManager.AllMenus     = GetAllMenus();
            myZUIManager.AllPopups    = GetAllPopups();
            myZUIManager.AllSideMenus = GetAllSideMenus();
        }
        #endregion

        serializedObject.ApplyModifiedProperties();
    }