public void OnInspectorGUI(Terrain terrain, IOnInspectorGUI editContext) { if (m_noiseSettings == null) { m_noiseSettings = ScriptableObject.CreateInstance <NoiseSettings>(); m_noiseSettings.Reset(); } if (m_noiseSettingsGUI == null) { m_noiseSettingsGUI = new NoiseSettingsGUI(); m_noiseSettingsGUI.Init(m_noiseSettings); } m_noiseSettingsGUI.OnGUI(NoiseSettingsGUIFlags.Settings); }
public NoiseEditorView(NoiseSettings _noiseUpdateTarget_ = null, NoiseSettings _sourceAsset_ = null) { // create temp noisesettings asset and the IMGUI view for this window m_noiseUpdateTarget = _noiseUpdateTarget_ == null?ScriptableObject.CreateInstance <NoiseSettings>() : _noiseUpdateTarget_; m_serializedNoiseProfile = new SerializedObject(m_noiseUpdateTarget); m_noiseGUI = new NoiseSettingsGUI(); m_noiseGUI.Init(m_noiseUpdateTarget); m_noiseSourceAsset = _sourceAsset_; var stylesheet = EditorGUIUtility.isProSkin ? Resources.Load <StyleSheet>("Styles/Noise_Dark") : Resources.Load <StyleSheet>("Styles/Noise_Light"); var settingsScrollView = new ScrollView() { name = Styles.settingsScrollViewName }; /////////////////////////////////////////////////////////////////////////////// // settings buttons /////////////////////////////////////////////////////////////////////////////// var noiseGUIContainer = new IMGUIContainer() { name = Styles.noiseGUIContainerName }; noiseGUIContainer.onGUIHandler = () => { EditorGUI.BeginChangeCheck(); { m_noiseGUI.OnGUI(NoiseSettingsGUIFlags.All & (~NoiseSettingsGUIFlags.Preview)); } bool changed = EditorGUI.EndChangeCheck(); if (changed) { INTERNAL_OnSettingsChanged(); } }; settingsScrollView.Add(noiseGUIContainer); /////////////////////////////////////////////////////////////////////////////// // settings buttons /////////////////////////////////////////////////////////////////////////////// filePanelContainer = new VisualElement() { name = Styles.saveButtonsContainer, style = { flexDirection = FlexDirection.Row } }; filePanelContainer.AddToClassList(Styles.filePanelContainer); saveAsButton = new Button(SaveAsCallback) { name = Styles.saveAsButtonName, text = "Save As", tooltip = Styles.saveasTooltip }; saveAsButton.AddToClassList(Styles.filePanelButton); revertButton = new Button(ResetRevertCallback) { name = Styles.resetButtonName, text = "Reset", tooltip = Styles.resetTooltip }; revertButton.AddToClassList(Styles.filePanelButton); applyButton = new Button(() => { Undo.RecordObject(m_noiseSourceAsset, "NoiseWindow - Apply Settings"); m_noiseSourceAsset.CopySerialized(m_noiseUpdateTarget); }) { name = Styles.applyButtonName, text = "Apply", tooltip = Styles.applyTooltip }; applyButton.AddToClassList(Styles.filePanelButton); applyButton.AddToClassList(Styles.filePanelButton); /////////////////////////////////////////////////////////////////////////////// // noise settings object field /////////////////////////////////////////////////////////////////////////////// var objectFieldContainer = new VisualElement() { name = Styles.objectFieldContainer }; objectFieldContainer.AddToClassList(Styles.objectFieldContainer); objectField = new ObjectField() { name = Styles.noiseAssetFieldName, allowSceneObjects = false, objectType = typeof(NoiseSettings), label = Styles.noiseAssetFieldLabel, tooltip = Styles.noiseAssetFieldTooltip //, // viewDataKey = Styles.noiseAssetFieldName }; objectField.AddToClassList(Styles.noiseAssetFieldName); objectField.RegisterCallback <ChangeEvent <UnityEngine.Object> >(OnSourceProfileChanged); objectFieldContainer.Add(objectField); /////////////////////////////////////////////////////////////////////////////// // export settings /////////////////////////////////////////////////////////////////////////////// var flexArea = new VisualElement() { name = Styles.flexArea }; flexArea.AddToClassList(Styles.flexArea); var exportContainer = new VisualElement() { name = Styles.exportContainer }; exportContainer.AddToClassList(Styles.exportContainer); var exportHeader = new Foldout() { name = Styles.exportHeader, text = "Export Settings", tooltip = Styles.exportTooltip, viewDataKey = Styles.exportHeader }; exportHeader.RegisterCallback <ChangeEvent <bool> >( (evt) => { if (evt.newValue) { m_exportContainer.Add(m_exportSettings); m_exportContainer.Add(m_exportButton); } else { m_exportContainer.Remove(m_exportSettings); m_exportContainer.Remove(m_exportButton); } } ); exportHeader.AddToClassList(Styles.foldoutContainer); var exportSettings = CreateExportSettingsView(); var exportButton = new Button( () => { if (m_exportType.value == ExportTextureType.Texture2D) { Export2D(); } else if (m_exportType.value == ExportTextureType.Texture3D) { Export3D(); } } ) { name = Styles.exportButton, text = "Export To Texture" }; exportButton.AddToClassList(Styles.exportButton); m_exportButton = exportButton; exportContainer.Add(exportHeader); // exportContainer.Add( exportSettings ); // exportContainer.Add( exportButton ); m_exportContainer = exportContainer; exportHeader.value = false; // container for the settings panel var settingsContainer = new VisualElement() { name = Styles.settingsContainerName }; settingsContainer.AddToClassList(Styles.settingsContainerName); settingsContainer.Add(objectFieldContainer); settingsContainer.Add(filePanelContainer); settingsContainer.Add(settingsScrollView); settingsContainer.Add(flexArea); // add this so the export stuff stays at the bottom of the settings container settingsContainer.Add(exportContainer); settingsContainer.Bind(m_serializedNoiseProfile); /////////////////////////////////////////////////////////////////////////////// // settings buttons /////////////////////////////////////////////////////////////////////////////// var previewContainer = new VisualElement() { name = Styles.noisePreviewContainerName }; previewContainer.AddToClassList(Styles.noisePreviewContainerName); var previewLabel = new Label() { name = Styles.noisePreviewLabelName, text = Styles.previewLabel, tooltip = Styles.previewLabelTooltip }; previewLabel.AddToClassList(Styles.noisePreviewLabelName); previewContainer.Add(previewLabel); m_noiseFieldView = new NoiseFieldView(m_serializedNoiseProfile) { name = Styles.noisePreviewTextureName }; m_noiseFieldView.onGUIHandler += () => { INTERNAL_OnSettingsChanged(); }; m_noiseFieldView.AddToClassList(Styles.noisePreviewTextureName); previewContainer.Add(m_noiseFieldView); /////////////////////////////////////////////////////////////////////////////// // wrap it all up /////////////////////////////////////////////////////////////////////////////// styleSheets.Add(stylesheet); AddToClassList(Styles.noiseWindowName); Add(settingsContainer); Add(previewContainer); this.Bind(m_serializedNoiseProfile); m_settingsContainer = settingsContainer; INTERNAL_OnSourceProfileChanged(_sourceAsset_); this.viewDataKey = Styles.noiseWindowName; }