private void DrawSettingsInspector() { VegetationSystemPro vegetationSystemPro = _runtimePrefabSpawner.VegetationSystemPro; if (vegetationSystemPro.VegetationPackageProList.Count == 0) { EditorGUILayout.HelpBox( "There is no vegetation package/biome in the vegetation system", MessageType.Warning); return; } GUILayout.BeginVertical("box"); EditorGUILayout.LabelField("Select biome/vegetation package", LabelStyle); string[] packageNameList = new string[vegetationSystemPro.VegetationPackageProList.Count]; for (int i = 0; i <= vegetationSystemPro.VegetationPackageProList.Count - 1; i++) { if (vegetationSystemPro.VegetationPackageProList[i]) { packageNameList[i] = (i + 1).ToString() + " " + vegetationSystemPro.VegetationPackageProList[i].PackageName; } else { packageNameList[i] = "Not found"; } } EditorGUI.BeginChangeCheck(); _runtimePrefabSpawner.VegetationPackageIndex = EditorGUILayout.Popup("Selected vegetation package", _runtimePrefabSpawner.VegetationPackageIndex, packageNameList); if (EditorGUI.EndChangeCheck()) { SetSceneDirty(); } GUILayout.EndVertical(); VegetationPackagePro vegetationPackagePro = vegetationSystemPro.VegetationPackageProList[_runtimePrefabSpawner.VegetationPackageIndex]; if (vegetationPackagePro == null) { return; } if (vegetationPackagePro.VegetationInfoList.Count == 0) { return; } GUILayout.BeginVertical("box"); EditorGUILayout.LabelField("Select Vegetation Item", LabelStyle); EditorGUI.BeginChangeCheck(); _selectedVegetationTypeIndex = GUILayout.SelectionGrid(_selectedVegetationTypeIndex, VegetationTypeNames, 3, EditorStyles.toolbarButton); if (EditorGUI.EndChangeCheck()) { _selectedGridIndex = 0; } VegetationPackageEditorTools.VegetationItemTypeSelection vegetationItemTypeSelection = VegetationPackageEditorTools.GetVegetationItemTypeSelection(_selectedVegetationTypeIndex); int selectionCount = 0; VegetationPackageEditorTools.DrawVegetationItemSelector(vegetationSystemPro, vegetationPackagePro, ref _selectedGridIndex, ref _vegIndex, ref selectionCount, vegetationItemTypeSelection, 70); if (_lastVegIndex != _vegIndex) { GUI.FocusControl(null); } _lastVegIndex = _vegIndex; GUILayout.EndVertical(); VegetationItemInfoPro vegetationItemInfoPro = vegetationPackagePro.VegetationInfoList[_vegIndex]; if (vegetationItemInfoPro == null) { return; } GUILayout.BeginVertical("box"); EditorGUILayout.LabelField("Selected item", vegetationItemInfoPro.Name); if (GUILayout.Button("Add run-time prefab rule")) { RuntimePrefabRule newRuntimePrefabRule = new RuntimePrefabRule(); newRuntimePrefabRule.SetSeed(); vegetationItemInfoPro.RuntimePrefabRuleList.Add(newRuntimePrefabRule); _runtimePrefabSpawner.RefreshRuntimePrefabs(); EditorUtility.SetDirty(vegetationPackagePro); SetSceneDirty(); } GUILayout.EndVertical(); for (int i = 0; i <= vegetationItemInfoPro.RuntimePrefabRuleList.Count - 1; i++) { RuntimePrefabRule runtimePrefabRule = vegetationItemInfoPro.RuntimePrefabRuleList[i]; EditorGUI.BeginChangeCheck(); GUILayout.BeginVertical("box"); runtimePrefabRule.RuntimePrefab = EditorGUILayout.ObjectField("Runtime prefab", runtimePrefabRule.RuntimePrefab, typeof(GameObject), true) as GameObject; var prefabTexture = AssetPreview.GetAssetPreview(runtimePrefabRule.RuntimePrefab); Texture2D convertedPrefabTexture = new Texture2D(2, 2, TextureFormat.ARGB32, true, true); if (Application.isPlaying) { convertedPrefabTexture = prefabTexture; } else { if (prefabTexture) { convertedPrefabTexture.LoadImage(prefabTexture.EncodeToPNG()); } } if (convertedPrefabTexture) { Rect space = GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.Height(convertedPrefabTexture.height)); float width = space.width; space.xMin = (width - convertedPrefabTexture.width); if (space.xMin < 0) { space.xMin = 0; } space.width = convertedPrefabTexture.width; space.height = convertedPrefabTexture.height; EditorGUI.DrawPreviewTexture(space, convertedPrefabTexture); } runtimePrefabRule.SpawnFrequency = EditorGUILayout.Slider("Spawn frequency", runtimePrefabRule.SpawnFrequency, 0, 1f); runtimePrefabRule.PrefabScale = EditorGUILayout.Vector3Field("Scale", runtimePrefabRule.PrefabScale); runtimePrefabRule.UseVegetationItemScale = EditorGUILayout.Toggle("Add vegetation item scale", runtimePrefabRule.UseVegetationItemScale); runtimePrefabRule.PrefabRotation = EditorGUILayout.Vector3Field("Rotation", runtimePrefabRule.PrefabRotation); runtimePrefabRule.PrefabOffset = EditorGUILayout.Vector3Field("Offset", runtimePrefabRule.PrefabOffset); runtimePrefabRule.PrefabLayer = EditorGUILayout.LayerField("Prefab layer", runtimePrefabRule.PrefabLayer); runtimePrefabRule.Seed = EditorGUILayout.IntSlider("Seed", runtimePrefabRule.Seed, 0, 99); runtimePrefabRule.UsePool = EditorGUILayout.Toggle("Use pooling system", runtimePrefabRule.UsePool); runtimePrefabRule.DistanceFactor = EditorGUILayout.Slider("Distance factor", runtimePrefabRule.DistanceFactor, 0, 1f); float currentDistance = vegetationSystemPro.VegetationSettings.GetVegetationDistance() * runtimePrefabRule.DistanceFactor; EditorGUILayout.LabelField("Current distance: " + currentDistance.ToString("F2") + " meters", LabelStyle); EditorGUILayout.HelpBox( "The distance from the camera where prefabs are instantiated. Distance is a factor of the current vegetation item draw distance.", MessageType.Info); if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(vegetationPackagePro); _runtimePrefabSpawner.RefreshRuntimePrefabs(); SetSceneDirty(); } if (GUILayout.Button("Remove run-time prefab rule")) { vegetationItemInfoPro.RuntimePrefabRuleList.Remove(runtimePrefabRule); _runtimePrefabSpawner.RefreshRuntimePrefabs(); GUILayout.EndVertical(); return; } GUILayout.EndVertical(); } }
public override void OnInspectorGUI() { HelpTopic = "scene-vegetation-baker"; _sceneVegetationBaker = (SceneVegetationBaker)target; ShowLogo = false; base.OnInspectorGUI(); if (!_sceneVegetationBaker.VegetationSystemPro) { EditorGUILayout.HelpBox( "The SceneVegetationBaker Component needs to be added to a GameObject with a VegetationSystemPro Component.", MessageType.Error); return; } VegetationSystemPro vegetationSystemPro = _sceneVegetationBaker.VegetationSystemPro; GUILayout.BeginVertical("box"); EditorGUILayout.LabelField("Select biome/vegetation package", LabelStyle); string[] packageNameList = new string[vegetationSystemPro.VegetationPackageProList.Count]; for (int i = 0; i <= vegetationSystemPro.VegetationPackageProList.Count - 1; i++) { if (vegetationSystemPro.VegetationPackageProList[i]) { packageNameList[i] = (i + 1).ToString() + " " + vegetationSystemPro.VegetationPackageProList[i].PackageName + " (" + vegetationSystemPro.VegetationPackageProList[i].BiomeType.ToString() + ")";; } else { packageNameList[i] = "Not found"; } } EditorGUI.BeginChangeCheck(); _sceneVegetationBaker.VegetationPackageIndex = EditorGUILayout.Popup("Selected vegetation package", _sceneVegetationBaker.VegetationPackageIndex, packageNameList); if (EditorGUI.EndChangeCheck()) { SetSceneDirty(); } GUILayout.EndVertical(); VegetationPackagePro vegetationPackagePro = vegetationSystemPro.VegetationPackageProList[_sceneVegetationBaker.VegetationPackageIndex]; if (vegetationPackagePro == null) { return; } if (vegetationPackagePro.VegetationInfoList.Count == 0) { return; } GUILayout.BeginVertical("box"); EditorGUILayout.LabelField("Select Vegetation Item", LabelStyle); EditorGUI.BeginChangeCheck(); _selectedVegetationTypeIndex = GUILayout.SelectionGrid(_selectedVegetationTypeIndex, VegetationTypeNames, 3, EditorStyles.toolbarButton); if (EditorGUI.EndChangeCheck()) { _selectedGridIndex = 0; } VegetationPackageEditorTools.VegetationItemTypeSelection vegetationItemTypeSelection = VegetationPackageEditorTools.GetVegetationItemTypeSelection(_selectedVegetationTypeIndex); int selectionCount = 0; VegetationPackageEditorTools.DrawVegetationItemSelector(vegetationSystemPro, vegetationPackagePro, ref _selectedGridIndex, ref _vegIndex, ref selectionCount, vegetationItemTypeSelection, 70); if (_lastVegIndex != _vegIndex) { GUI.FocusControl(null); } _lastVegIndex = _vegIndex; GUILayout.EndVertical(); VegetationItemInfoPro vegetationItemInfoPro = vegetationPackagePro.VegetationInfoList[_vegIndex]; if (vegetationItemInfoPro == null) { return; } GUILayout.BeginVertical("box"); _sceneVegetationBaker.ExportStatic = EditorGUILayout.Toggle("Export as static objects", _sceneVegetationBaker.ExportStatic); GUILayout.EndVertical(); GUILayout.BeginVertical("box"); if (GUILayout.Button("Bake VegetationItem to scene")) { BakeVegetationToScene(vegetationItemInfoPro); } GUILayout.EndVertical(); }