Esempio n. 1
0
        public void OnDestroy()
        {
            if (mEditedBuildProcess != null)
            {
                SaveScenesToStringList();
            }

            mEditedBuildProcess = null;
        }
        public static int DrawBuildProcessEntry(BuildCollection data, BuildProcess e, bool odd, int selectedCount, bool editable)
        {
            GUILayout.BeginHorizontal(odd ? UBS.Styles.selectableListEntryOdd : UBS.Styles.selectableListEntry);
            {
                Texture2D platformIcon = GetPlatformIcon(e.mPlatform);
                GUILayout.Box(platformIcon, UBS.Styles.icon);
                GUILayout.Label(e.mName, odd ? UBS.Styles.selectableListEntryTextOdd : UBS.Styles.selectableListEntryText);
                GUILayout.FlexibleSpace();
                var sel = GUILayout.Toggle(e.mSelected, "");
                if (editable && sel != e.mSelected)
                {
                    e.mSelected = sel;
                    EditorUtility.SetDirty(data);
                }
                selectedCount += e.mSelected ? 1 : 0;
            }
            GUILayout.EndHorizontal();


            if (Event.current.type == EventType.MouseDown && Event.current.button == 1)
            {
                Rect r = GUILayoutUtility.GetLastRect();
                if (r.Contains(Event.current.mousePosition))
                {
                    GenericMenu menu = new GenericMenu();
                    menu.AddItem(new GUIContent(e.mName), false, null);
                    menu.AddSeparator("");
                    menu.AddItem(new GUIContent("Open target folder"), false, () => {
                        DirectoryInfo di = new DirectoryInfo(UBS.Helpers.GetAbsolutePathRelativeToProject(e.mOutputPath));

                        string path;
                        if ((di.Attributes & FileAttributes.Directory) != 0)
                        {
                            path = di.FullName;
                        }
                        else
                        {
                            path = di.Parent.FullName;
                        }

                        EditorUtility.RevealInFinder(path);
                    });
                    menu.AddSeparator("");
                    menu.AddItem(new GUIContent("Build and run"), false, BuildAndRun, new BuildAndRunUserData(data, e));
                    menu.AddItem(new GUIContent("Build"), false, Build, new BuildAndRunUserData(data, e));

                    menu.ShowAsContext();
                }
            }


            return(selectedCount);
        }
        void RenderSelectableBuildProcess(BuildProcess pProcess, bool pOdd)
        {
            bool selected = false;

            if (mSelectedBuildProcess == pProcess)
            {
                selected = GUILayout.Button(pProcess.mName, Styles.selectedListEntry);
            }
            else
            {
                selected = GUILayout.Button(pProcess.mName, pOdd ? Styles.selectableListEntryOdd : Styles.selectableListEntry);
            }

            if (selected)
            {
                DoSelectBuildProcess(pProcess);
            }
        }
        public void BuildStepStart(BuildConfiguration pConfiguration)
        {
            BuildProcess p           = pConfiguration.GetCurrentBuildProcess();
            FileInfo     file        = new FileInfo(p.mOutputPath);
            string       newFilename = string.Format("{0}/{1}_{2}_{3}.apk", file.DirectoryName,
                                                     PlayerSettings.bundleIdentifier,
                                                     PlayerSettings.bundleVersion,
                                                     EditorUserBuildSettings.androidBuildSubtarget.ToString().ToLower());

            // maybe pretend build was enabled before
            if (file.Exists)
            {
                file.MoveTo(newFilename);
            }

            // user could have disabled the apk split already -> just check for an existing obb file.
            RenameOBB(p.mOutputPath);
        }
Esempio n. 5
0
        bool CheckOutputPath(BuildProcess pProcess)
        {
            string error = "";


            if (pProcess.mOutputPath.Length == 0)
            {
                error = "Please provide an output path.";
                Cancel(error);
                return(false);
            }

            try
            {
                DirectoryInfo dir;
                if (pProcess.mPlatform == BuildTarget.Android ||
                    pProcess.mPlatform == BuildTarget.StandaloneWindows ||
                    pProcess.mPlatform == BuildTarget.StandaloneWindows64)
                {
                    dir = new DirectoryInfo(Path.GetDirectoryName(UBS.Helpers.GetAbsolutePathRelativeToProject(pProcess.mOutputPath)));
                }
                else
                {
                    dir = new DirectoryInfo(pProcess.mOutputPath);
                }
                dir.Create();

                if (!dir.Exists)
                {
                    error = "The given output path is invalid.";
                }
            }
            catch (Exception e)
            {
                error = e.ToString();
            }

            if (error.Length > 0)
            {
                Cancel(error);
                return(false);
            }
            return(true);
        }
        public BuildProcess(BuildProcess pOther)
        {
            foreach (var bs in pOther.mPreBuildSteps)
            {
                mPreBuildSteps.Add(new BuildStep(bs));
            }


            foreach (var bs in pOther.mPostBuildSteps)
            {
                mPostBuildSteps.Add(new BuildStep(bs));
            }

            mName         = pOther.mName;
            mOutputPath   = pOther.mOutputPath;
            mPlatform     = pOther.mPlatform;
            mBuildOptions = pOther.mBuildOptions;
            mSelected     = false;
            mScenes       = new List <string>(pOther.mScenes.ToArray());
            mSceneAssets  = new List <UnityEngine.Object>(pOther.mSceneAssets.ToArray());
        }
 internal BuildAndRunUserData(BuildCollection bCollection, BuildProcess bProcess)
 {
     process    = bProcess;
     collection = bCollection;
 }
Esempio n. 8
0
        public void OnGUI(BuildProcess pProcess, BuildCollection pCollection)
        {
            if (pProcess == null)
            {
                return;
            }

            if (pProcess != mEditedBuildProcess)
            {
                if (mEditedBuildProcess != null)
                {
                    SaveScenesToStringList();
                }

                mEditedBuildProcess = pProcess;
                mCollection         = pCollection;

                LoadScenesFromStringList();
                OnEnable();

                // after switching to another process, we want to make sure to unfocus all possible controls
                // like textfields. This will remove an issue, where dangling focus between process switching could happen
                GUI.FocusControl("");
            }

            GUILayout.BeginVertical();

            GUILayout.Label("Build Process", Styles.detailsTitle);

            Styles.HorizontalSeparator();

            Undo.RecordObject(mCollection, "Edit Build Process Details");
            pProcess.mName = EditorGUILayout.TextField("Name", mEditedBuildProcess.mName);


            mEditedBuildProcess.mPlatform = (BuildTarget)EditorGUILayout.EnumPopup("Platform", mEditedBuildProcess.mPlatform);

            mEditedBuildProcess.mPretend = EditorGUILayout.Toggle(new GUIContent("Pretend Build", "Will not trigger a unity build, but run everything else. "), mEditedBuildProcess.mPretend);

            GUILayout.Space(5);
            mShowBuildOptions = EditorGUILayout.Foldout(mShowBuildOptions, "Build Options");
            GUILayout.BeginHorizontal();
            GUILayout.Space(25);

            if (mShowBuildOptions)
            {
                GUILayout.BeginVertical();

                foreach (var buildOption in mBuildOptions)
                {
                    bool selVal = (mEditedBuildProcess.mBuildOptions & buildOption) != 0;
                    {
                        bool resVal = EditorGUILayout.ToggleLeft(buildOption.ToString(), selVal);
                        if (resVal != selVal)
                        {
                            if (resVal)
                            {
                                mEditedBuildProcess.mBuildOptions = mEditedBuildProcess.mBuildOptions | buildOption;
                            }
                            else
                            {
                                mEditedBuildProcess.mBuildOptions = mEditedBuildProcess.mBuildOptions & ~buildOption;
                            }
                            UpdateSelectedOptions();
                        }
                    }
                }


                GUILayout.EndVertical();
            }
            else
            {
                GUILayout.Label(selectedOptionsString);
            }


            GUILayout.EndHorizontal();
            GUILayout.Space(5);

            DrawOutputPathSelector();

            ReorderableListGUI.Title("Included Scenes");
            ReorderableListGUI.ListField(mEditedBuildProcess.mSceneAssets, SceneDrawer);

            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();

            if (GUILayout.Button("Copy scenes from settings"))
            {
                CopyScenesFromSettings();
            }

            if (GUILayout.Button("Clear scenes"))
            {
                mEditedBuildProcess.mSceneAssets.Clear();
            }

            GUILayout.EndHorizontal();

            Styles.HorizontalSeparator();

            mDrawingBuildStepType = EBuildStepType.PreBuildStep;
            ReorderableListGUI.Title("Pre Build Steps");
            ReorderableListGUI.ListField(mEditedBuildProcess.mPreBuildSteps, StepDrawer);


            Styles.HorizontalSeparator();
            GUILayout.Label("Actual Unity Build", Styles.mediumHint);
            Styles.HorizontalSeparator();


            mDrawingBuildStepType = EBuildStepType.PostBuildStep;
            ReorderableListGUI.Title("Post Build Steps");
            ReorderableListGUI.ListField(mEditedBuildProcess.mPostBuildSteps, StepDrawer);


            GUILayout.EndVertical();
        }
        protected override void OnGUI()
        {
            base.OnGUI();

            Initialize();
            if (!mInitialized)
            {
                return;
            }

            GUILayout.BeginVertical();
            mScrollPositions[0] = GUILayout.BeginScrollView(mScrollPositions[0]);


            GUILayout.BeginHorizontal();
            //
            // selectable Build Processes
            //
            GUILayout.BeginVertical("GameViewBackground", GUILayout.MaxWidth(kListWidth));
            SearchField();
            mScrollPositions[1] = GUILayout.BeginScrollView(mScrollPositions[1], GUILayout.ExpandWidth(true));
            bool odd = true;

            if (mData != null)
            {
                foreach (var process in mData.mProcesses)
                {
                    if (process == null)
                    {
                        mData.mProcesses.Remove(process);
                        GUIUtility.ExitGUI();
                        return;
                    }
                    if (string.IsNullOrEmpty(mSearchContent) || process.mName.StartsWith(mSearchContent))
                    {
                        RenderSelectableBuildProcess(process, odd);
                        odd = !odd;
                    }
                }
            }
            GUILayout.EndScrollView();
            GUILayout.EndVertical();
            GUILayout.BeginVertical(GUILayout.Width(32));
            {
                if (GUILayout.Button(new GUIContent("+", "Add"), UBS.Styles.toolButton))
                {
                    var el = new BuildProcess();
                    Undo.RecordObject(mData, "Add Build Process");
                    mData.mProcesses.Add(el);
                }
                GUI.enabled = mSelectedBuildProcess != null;
                if (GUILayout.Button(new GUIContent("-", "Remove"), UBS.Styles.toolButton))
                {
                    Undo.RecordObject(mData, "Add Build Process");
                    mData.mProcesses.Remove(mSelectedBuildProcess);
                }
                if (GUILayout.Button(new GUIContent(('\u274f').ToString(), "Duplicate"), UBS.Styles.toolButton))
                {
                    Undo.RecordObject(mData, "Duplicate Build Process");
                    BuildProcess bp = new BuildProcess(mSelectedBuildProcess);
                    mData.mProcesses.Add(bp);
                }
                if (GUILayout.Button(new GUIContent(('\u21e1').ToString(), "Move Up"), UBS.Styles.toolButton))
                {
                    if (mSelectedBuildProcess != null)
                    {
                        int idx = mData.mProcesses.IndexOf(mSelectedBuildProcess);
                        if (idx > 0)
                        {
                            Undo.RecordObject(mData, "Sort Build Processes");
                            mData.mProcesses.Remove(mSelectedBuildProcess);
                            mData.mProcesses.Insert(idx - 1, mSelectedBuildProcess);
                        }
                    }
                }
                if (GUILayout.Button(new GUIContent(('\u21e3').ToString(), "Move Down"), UBS.Styles.toolButton))
                {
                    if (mSelectedBuildProcess != null)
                    {
                        int idx = mData.mProcesses.IndexOf(mSelectedBuildProcess);
                        if (idx < mData.mProcesses.Count - 1)
                        {
                            Undo.RecordObject(mData, "Sort Build Processes");
                            mData.mProcesses.Remove(mSelectedBuildProcess);
                            mData.mProcesses.Insert(idx + 1, mSelectedBuildProcess);
                        }
                    }
                }
                GUI.enabled = true;
            }
            GUILayout.EndVertical();
            Styles.VerticalLine();
            //
            // selected Build Process
            //
            mScrollPositions[2] = GUILayout.BeginScrollView(mScrollPositions[2], UBS.Styles.buildProcessEditorBackground);

            mEditor.OnGUI(mSelectedBuildProcess, mData);

            GUILayout.EndScrollView();

            GUILayout.EndHorizontal();

            Styles.HorizontalLine();
            RenderBuildVersion();
            Styles.HorizontalLine();

            GUILayout.EndVertical();

            GUILayout.EndScrollView();
        }
 void DoSelectBuildProcess(BuildProcess pProcess)
 {
     mSelectedBuildProcess = pProcess;
 }