private void ConfigureBuildPlatforms(BuildEnvironmentConfig environmentConfiguration)
        {
            using (IndentLevelScope(1))
            {
                EditorGUI.BeginChangeCheck();

                var buildPlatformsString = SelectedPlatformsToString(environmentConfiguration.BuildPlatforms);
                var newBuildPlatforms    = environmentConfiguration.BuildPlatforms;
                var showBuildPlatforms   = EditorGUILayout.Foldout(environmentConfiguration.ShowBuildPlatforms,
                                                                   "Build Platforms: " + buildPlatformsString);
                if (showBuildPlatforms)
                {
                    newBuildPlatforms = EnumFlagsToggleField(environmentConfiguration.BuildPlatforms);
                }

                var currentAdjustedPlatforms = newBuildPlatforms;
                if ((currentAdjustedPlatforms & SpatialBuildPlatforms.Windows32) != 0 &&
                    (currentAdjustedPlatforms & SpatialBuildPlatforms.Windows64) != 0)
                {
                    EditorGUILayout.HelpBox(WorkerBuilder.IncompatibleWindowsPlatformsErrorMessage,
                                            MessageType.Error);
                }

                if (EditorGUI.EndChangeCheck())
                {
                    EditorUtility.SetDirty(target);
                    Undo.RecordObject(target, "Configure build platforms for worker");

                    environmentConfiguration.ShowBuildPlatforms = showBuildPlatforms;
                    environmentConfiguration.BuildPlatforms     = newBuildPlatforms;
                }
            }
        }
        private void ConfigureBuildOptions(BuildEnvironmentConfig environmentConfiguration)
        {
            using (IndentLevelScope(1))
            {
                var buildOptionsString = EnumFlagToString(environmentConfiguration.BuildOptions);

                EditorGUI.BeginChangeCheck();

                var showBuildOptions = EditorGUILayout.Foldout(environmentConfiguration.ShowBuildOptions,
                                                               "Build Options: " + buildOptionsString);

                var newBuildOptions = environmentConfiguration.BuildOptions;

                if (showBuildOptions)
                {
                    newBuildOptions = EnumFlagsToggleField(environmentConfiguration.BuildOptions);
                }

                if ((newBuildOptions & BuildOptions.EnableHeadlessMode) != 0 &&
                    (newBuildOptions & BuildOptions.Development) != 0)
                {
                    EditorGUILayout.HelpBox(
                        "\nYou cannot have both EnableHeadlessMode and Development in BuildOptions.\n\n" +
                        "This will crash Unity Editor while building.\n",
                        MessageType.Error);
                }

                if (EditorGUI.EndChangeCheck())
                {
                    // build options have changed

                    EditorUtility.SetDirty(target);
                    Undo.RecordObject(target, "Configure build options for worker");

                    environmentConfiguration.ShowBuildOptions = showBuildOptions;
                    environmentConfiguration.BuildOptions     = newBuildOptions;
                }
            }
        }
        private void ConfigureBuildOptions(BuildEnvironmentConfig environmentConfiguration)
        {
            using (IndentLevelScope(1))
            {
                EditorGUI.BeginChangeCheck();
                var showBuildOptions = EditorGUILayout.Foldout(environmentConfiguration.ShowBuildOptions, "Build Options");
                var newBuildOptions  = environmentConfiguration.BuildOptions;
                if (showBuildOptions)
                {
                    using (IndentLevelScope(1))
                    {
                        var indentedHelpBox =
                            new GUIStyle(EditorStyles.helpBox)
                        {
                            margin = { left = EditorGUI.indentLevel * 16 }
                        };

                        using (new EditorGUILayout.VerticalScope(indentedHelpBox))
                            using (IndentLevelScope(-EditorGUI.indentLevel))
                            {
                                var prevValue = (newBuildOptions & BuildOptions.Development) != 0;
                                var newValue  = EditorGUILayout.ToggleLeft("Development Build", prevValue);
                                if (prevValue != newValue)
                                {
                                    newBuildOptions ^= BuildOptions.Development;
                                }

                                prevValue = (newBuildOptions & BuildOptions.EnableHeadlessMode) != 0;
                                newValue  = EditorGUILayout.ToggleLeft("Headless Mode", prevValue);
                                if (prevValue != newValue)
                                {
                                    newBuildOptions ^= BuildOptions.EnableHeadlessMode;
                                }
                            }
                    }
                }


                if ((newBuildOptions & BuildOptions.EnableHeadlessMode) != 0 &&
                    (newBuildOptions & BuildOptions.Development) != 0)
                {
                    EditorGUILayout.HelpBox(
                        "You cannot have both EnableHeadlessMode and Development build enabled.\n" +
                        "This will crash the Unity Editor during the build.",
                        MessageType.Error);
                }

                if ((newBuildOptions & BuildOptions.EnableHeadlessMode) != 0 &&
                    (environmentConfiguration.BuildPlatforms & ~SpatialBuildPlatforms.Linux) != 0)
                {
                    EditorGUILayout.HelpBox(
                        "EnableHeadlessMode is only available for Linux builds.",
                        MessageType.Warning);
                }

                if (EditorGUI.EndChangeCheck())
                {
                    EditorUtility.SetDirty(target);
                    Undo.RecordObject(target, "Configure build options for worker");

                    environmentConfiguration.ShowBuildOptions = showBuildOptions;
                    environmentConfiguration.BuildOptions     = newBuildOptions;
                }
            }
        }
        private void DrawBuildTargets(BuildEnvironmentConfig env, int hash)
        {
            // Init cached UI state.
            var selectedBuildTarget = stateManager.GetStateObjectOrDefault <BuildTargetState>(hash ^ typeof(BuildTargetState).GetHashCode());

            if (selectedBuildTarget.Choices == null || invalidateCachedContent > 0)
            {
                selectedBuildTarget.Choices = env.BuildTargets.Select(GetBuildTargetGuiContents).ToArray();
            }

            // Draw available build targets.
            using (new EditorGUIUtility.IconSizeScope(SmallIconSize))
            {
                selectedBuildTarget.Index =
                    GUILayout.Toolbar(selectedBuildTarget.Index, selectedBuildTarget.Choices);
            }

            // Draw selected build target.
            var buildTarget    = env.BuildTargets[selectedBuildTarget.Index];
            var canBuildTarget = WorkerBuildData.BuildTargetsThatCanBeBuilt[buildTarget.Target];

            var options  = buildTarget.Options;
            var enabled  = buildTarget.Enabled;
            var required = buildTarget.Required;

            using (var check = new EditorGUI.ChangeCheckScope())
                using (new EditorGUILayout.VerticalScope(GUILayout.ExpandWidth(true)))
                {
                    BuildConfigEditorStyle.DrawHorizontalLine();
                    EditorGUILayout.Space();

                    enabled = EditorGUILayout.Toggle("Build", enabled);

                    if (!enabled)
                    {
                        required = false;
                    }

                    using (new EditorGUI.DisabledScope(!buildTarget.Enabled))
                    {
                        required = EditorGUILayout.Toggle("Required", required);

                        switch (buildTarget.Target)
                        {
                        case BuildTarget.StandaloneOSX:
                            options = ConfigureOSX(buildTarget);
                            break;

                        case BuildTarget.StandaloneWindows:
                            options = ConfigureWindows(buildTarget);
                            break;

                        case BuildTarget.iOS:
                            options = ConfigureIOS(buildTarget);
                            break;

                        case BuildTarget.Android:
                            options = ConfigureAndroid(buildTarget);
                            break;

                        case BuildTarget.StandaloneWindows64:
                            options = ConfigureWindows(buildTarget);
                            break;

                        case BuildTarget.StandaloneLinux64:
                            options = ConfigureLinux(buildTarget);
                            break;
                        }

                        options = ConfigureCompression(options);
                    }

                    if (!canBuildTarget)
                    {
                        EditorGUILayout.HelpBox(
                            $"Your Unity Editor is missing build support for {buildTarget.Target.ToString()}.\n" +
                            "Please add the missing build support options to your Unity Editor",
                            buildTarget.Required ? MessageType.Error : MessageType.Warning);
                    }

                    if (check.changed)
                    {
                        RecordUndo("Worker build options");

                        env.BuildTargets[selectedBuildTarget.Index] =
                            new BuildTargetConfig(buildTarget.Target, options, enabled, required);

                        selectedBuildTarget.Choices = null;
                    }
                }
        }
Esempio n. 5
0
        private void DrawBuildTargets(BuildEnvironmentConfig env, int hash)
        {
            // Build a mapping from the 'build target' position in the toolbar to it's position in the 'BuildTargets' array.
            // We do this since sometimes there are different number of targets in the BuildTargets array and those
            // in the toolbar as some targets are deprecated
            if (toolbarMapping.Count == 0)
            {
                var toolbarIndex = 0;
                for (var buildTargetIndex = 0; buildTargetIndex < env.BuildTargets.Count; buildTargetIndex++)
                {
                    if (!env.BuildTargets[buildTargetIndex].Deprecated)
                    {
                        toolbarMapping.Add(toolbarIndex++, buildTargetIndex);
                    }
                }
            }

            // Init cached UI state.
            var selectedBuildTarget = stateManager.GetStateObjectOrDefault <BuildTargetState>(hash ^ typeof(BuildTargetState).GetHashCode());

            if (selectedBuildTarget.Choices == null || invalidateCachedContent > 0)
            {
                selectedBuildTarget.Choices = env.BuildTargets
                                              .Where(c => !c.Deprecated)
                                              .Select(GetBuildTargetGuiContents)
                                              .ToArray();
            }


            // Draw available build targets.
            using (new EditorGUIUtility.IconSizeScope(SmallIconSize))
            {
                selectedBuildTarget.Index =
                    GUILayout.Toolbar(selectedBuildTarget.Index, selectedBuildTarget.Choices);
            }

            // Convert the index from the position selected in the toolbar to the position in the BuildTargets array
            var selectedTargetIndex = toolbarMapping[selectedBuildTarget.Index];

            // Draw selected build target.
            var buildTarget    = env.BuildTargets[selectedTargetIndex];
            var canBuildTarget = BuildSupportChecker.CanBuildTarget(buildTarget.Target);

            var options  = buildTarget.Options;
            var enabled  = buildTarget.Enabled;
            var required = buildTarget.Required;

            // Pick the current backend based on the current build target
            var scriptingImplementation = buildTarget.ScriptingImplementation;

            using (var check = new EditorGUI.ChangeCheckScope())
                using (new EditorGUILayout.VerticalScope(GUILayout.ExpandWidth(true)))
                {
                    BuildConfigEditorStyle.DrawHorizontalLine();
                    EditorGUILayout.Space();

                    enabled = EditorGUILayout.Toggle("Build", enabled);

                    if (!enabled)
                    {
                        required = false;
                    }

                    using (new EditorGUI.DisabledScope(!buildTarget.Enabled))
                    {
                        required = EditorGUILayout.Toggle("Required", required);

                        options = ConfigurePlatform(buildTarget.Target, options);

                        options = ConfigureCompression(options);

                        scriptingImplementation = ConfigureScriptingImplementation(scriptingImplementation, buildTarget.Target);
                    }

                    if (!canBuildTarget)
                    {
                        EditorGUILayout.HelpBox(
                            $"Your Unity Editor is missing build support for {buildTarget.Target.ToString()}.\n" +
                            "Please add the missing build support options to your Unity Editor",
                            buildTarget.Required ? MessageType.Error : MessageType.Warning);
                    }

                    if (check.changed)
                    {
                        RecordUndo("Worker build options");

                        env.BuildTargets[selectedTargetIndex] =
                            new BuildTargetConfig(buildTarget.Target, options, enabled, required, deprecated: false, scriptingImplementation);

                        selectedBuildTarget.Choices = null;
                    }
                }
        }