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); }
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; }
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; }