private (bool, DeploymentConfig) DrawDeploymentConfig(DeploymentConfig config) { var foldoutState = stateManager.GetStateObjectOrDefault <bool>(config.Deployment.Name.GetHashCode()); var copy = config.DeepCopy(); var errors = copy.GetErrors(); using (var check = new EditorGUI.ChangeCheckScope()) { using (new EditorGUILayout.HorizontalScope()) { foldoutState = EditorGUILayout.Foldout(foldoutState, new GUIContent(config.Deployment.Name), true); GUILayout.FlexibleSpace(); using (new EditorGUIUtility.IconSizeScope(style.SmallIconSize)) { if (errors.Any()) { GUILayout.Label(style.DeploymentConfigurationErrorContents); } if (GUILayout.Button(style.RemoveDeploymentConfigurationButtonContents, EditorStyles.miniButton)) { return(true, null); } } } using (new EditorGUI.IndentLevelScope()) using (new EditorGUILayout.VerticalScope()) { if (foldoutState) { copy.AssemblyName = EditorGUILayout.TextField("Assembly Name", config.AssemblyName); RenderBaseDeploymentConfig(config.Deployment, copy.Deployment); if (copy.Deployment.Name != config.Deployment.Name) { UpdateSimulatedDeploymentNames(copy); } GUILayout.Space(10); EditorGUILayout.LabelField("Simulated Player Deployments"); for (var i = 0; i < copy.SimulatedPlayerDeploymentConfigs.Count; i++) { var simConfig = copy.SimulatedPlayerDeploymentConfigs[i]; var(shouldRemove, updated) = DrawSimulatedConfig(i, simConfig); GUILayout.Space(5); if (shouldRemove) { copy.SimulatedPlayerDeploymentConfigs.RemoveAt(i); i--; UpdateSimulatedDeploymentNames(copy); } else { copy.SimulatedPlayerDeploymentConfigs[i] = updated; } } } } using (new EditorGUILayout.HorizontalScope()) { if (foldoutState) { GUILayout.FlexibleSpace(); if (GUILayout.Button("Add simulated player deployment")) { var newSimPlayerDepl = new SimulatedPlayerDeploymentConfig(); newSimPlayerDepl.TargetDeploymentName = config.Deployment.Name; newSimPlayerDepl.Name = $"{config.Deployment.Name}_sim{config.SimulatedPlayerDeploymentConfigs.Count + 1}"; copy.SimulatedPlayerDeploymentConfigs.Add(newSimPlayerDepl); } } } if (errors.Any()) { EditorGUILayout.HelpBox($"This deployment configuration has the following errors:\n\n{errors.FormatErrors()}", MessageType.Error); } if (check.changed) { stateManager.SetStateObject(copy.Deployment.Name.GetHashCode(), foldoutState); } } CommonUIElements.DrawHorizontalLine(5, style.HorizontalLineColor); return(false, copy); }
private bool DrawWorkerConfiguration(WorkerBuildConfiguration configurationForWorker) { var workerType = configurationForWorker.WorkerType; var foldoutState = stateManager.GetStateObjectOrDefault <FoldoutState>(configurationForWorker.WorkerType.GetHashCode()); using (new EditorGUILayout.HorizontalScope()) { if (foldoutState.Content == null || invalidateCachedContent > 0) { var buildStateIcon = GetBuildConfigurationStateIcon(configurationForWorker); if (buildStateIcon != null) { foldoutState.Icon = new GUIContent(EditorGUIUtility.IconContent(buildStateIcon)) { tooltip = "Missing build support for one or more build targets." }; } else if (configurationForWorker.CloudBuildConfig.BuildTargets.Any(NeedsAndroidSdk) || configurationForWorker.LocalBuildConfig.BuildTargets.Any(NeedsAndroidSdk)) { foldoutState.Icon = new GUIContent(EditorGUIUtility.IconContent(BuildConfigEditorStyle.BuiltInErrorIcon)) { tooltip = "Missing Android SDK installation. Go to Preferences > External Tools to set it up." }; } else { foldoutState.Icon = null; } foldoutState.Content = new GUIContent(workerType); } foldoutState.Expanded = EditorGUILayout.Foldout(foldoutState.Expanded, foldoutState.Content, true); GUILayout.FlexibleSpace(); using (new EditorGUIUtility.IconSizeScope(SmallIconSize)) { if (foldoutState.Icon != null) { using (new EditorGUIUtility.IconSizeScope(Vector2.zero)) { GUILayout.Label(foldoutState.Icon); } } if (GUILayout.Button(style.RemoveWorkerTypeButtonContents, EditorStyles.miniButton)) { return(false); } } } using (var check = new EditorGUI.ChangeCheckScope()) using (new EditorGUI.IndentLevelScope()) { if (foldoutState.Expanded) { DrawScenesInspectorForWorker(configurationForWorker); EditorGUILayout.Space(); DrawEnvironmentInspectorForWorker(configurationForWorker); } if (check.changed) { // Re-evaluate heading. foldoutState.Content = null; } } return(true); }