void MenuCallbackBendType(object obj) { CurvedWorld.BEND_TYPE newBendType = (CurvedWorld.BEND_TYPE)obj; Undo.RecordObject(_target, "Change Bend Type"); _target.DisableBend(); _target.bendType = newBendType; UnityEditor.EditorUtility.SetDirty(_target); }
void Init(string label) { CurvedWorld.BEND_TYPE[] bendTypes; int[] bendIDs; bool hasNormalTransform; if (EditorUtilities.StringToBendSettings(label, out bendTypes, out bendIDs, out hasNormalTransform)) { shaderSupportedBendType = bendTypes[0]; shaderSupportedBendID = bendIDs[0]; } }
public override void OnGUI(Rect position, MaterialProperty prop, GUIContent label, MaterialEditor editor) { Material material = (Material)editor.target; Init(prop.displayName); CurvedWorld.BEND_TYPE bendType; int bendID; bool normalTransform; EditorUtilities.GetBendSettingsFromVector(prop.vectorValue, out bendType, out bendID, out normalTransform); #region Bend Type EditorGUI.BeginChangeCheck(); using (new AmazingAssets.EditorGUIUtility.EditorGUILayoutBeginHorizontal()) { bendType = (CurvedWorld.BEND_TYPE)EditorGUILayout.Popup(" ", (int)bendType, EditorUtilities.bendTypesNamesForMenu); EditorGUI.LabelField(GUILayoutUtility.GetLastRect(), "Bend Type", EditorUtilities.GetBendTypeNameInfo(bendType).forLable, EditorStyles.popup); if (GUILayout.Button("≡", GUILayout.MaxWidth(20))) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("Find Controller"), false, EditorUtilities.CallbackFindController, (int)bendType + "_" + bendID); menu.AddItem(new GUIContent("Editor Window"), false, EditorUtilities.CallbackOpenCurvedWorldSettingsWindow, (int)bendType + "_" + bendID); menu.AddItem(new GUIContent("Curved World Keywords"), false, EditorUtilities.CallbackAnalyzeShaderCurvedWorldKeywords, material.shader); menu.AddItem(new GUIContent("Reimport Shader"), false, EditorUtilities.CallbackReimportShader, material.shader); menu.ShowAsContext(); } } bendID = EditorGUILayout.IntSlider("Bend ID", bendID, 1, EditorUtilities.MAX_SUPPORTED_BEND_IDS); if (EditorGUI.EndChangeCheck()) { prop.vectorValue = new Vector4((int)bendType, bendID, 0, 0); } if (bendType != shaderSupportedBendType || bendID != shaderSupportedBendID || File.Exists(EditorUtilities.GetBendFileLocation(bendType, bendID, EditorUtilities.EXTENSTION.cginc)) == false) { EditorGUILayout.HelpBox("Missing Keywords!", MessageType.Error); Rect helpBox = GUILayoutUtility.GetLastRect(); if (GUI.Button(new Rect(helpBox.xMax - 64 - 5, helpBox.yMin + 8, 64, 20), "Actions")) { updateBendType = bendType; updateBendID = bendID; updateMaterial = material; GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("Update Shader"), false, CallBackUpdateShader); menu.ShowAsContext(); } } #endregion }
void CallbackBendTypeMenu(object obj) { bendType = (CurvedWorld.BEND_TYPE)obj; }
public override void OnGUI(Rect position, MaterialProperty prop, GUIContent label, MaterialEditor editor) { Material material = (Material)editor.target; Init(prop.displayName); //Read settings CurvedWorld.BEND_TYPE bendType; int bendID; bool normalTransform; EditorUtilities.GetBendSettingsFromVector(prop.vectorValue, out bendType, out bendID, out normalTransform); //Make sure keywords are assinged correctly if ((material.IsKeywordEnabled(EditorUtilities.GetKeywordName(bendType)) == false || material.IsKeywordEnabled(EditorUtilities.GetKeywordName(bendID)) == false) && File.Exists(EditorUtilities.GetBendFileLocation(bendType, bendID, EditorUtilities.EXTENSTION.cginc))) { EditorUtilities.UpdateMaterialKeyWords(material, bendType, bendID, normalTransform); if (CurvedWorldEditorWindow.activeWindow != null && CurvedWorldEditorWindow.activeWindow.gTab == CurvedWorldEditorWindow.TAB.RenderersOverview) { CurvedWorldEditorWindow.activeWindow.RebuildSceneShadersOverview(); CurvedWorldEditorWindow.activeWindow.Repaint(); } } if (normalTransform != material.IsKeywordEnabled(EditorUtilities.shaderKeywordName_BendTransformNormal)) { if (material.IsKeywordEnabled(EditorUtilities.shaderKeywordName_BendTransformNormal)) { normalTransform = true; } else { normalTransform = false; } prop.vectorValue = new Vector4((int)bendType, bendID, (hasNormalTransform ? (normalTransform ? 1 : 0) : 0), 0); if (CurvedWorldEditorWindow.activeWindow != null && CurvedWorldEditorWindow.activeWindow.gTab == CurvedWorldEditorWindow.TAB.RenderersOverview) { CurvedWorldEditorWindow.activeWindow.RebuildSceneShadersOverview(); CurvedWorldEditorWindow.activeWindow.Repaint(); } } EditorGUI.BeginChangeCheck(); EditorGUI.showMixedValue = prop.hasMixedValue; position.height = 18; using (new AmazingAssets.EditorGUIUtility.EditorGUIUtilityLabelWidth(0)) { position.height = 18; bendType = (CurvedWorld.BEND_TYPE)EditorGUI.Popup(new Rect(position.xMin, position.yMin, position.width - 20, position.height), " ", (int)bendType, EditorUtilities.bendTypesNamesForMenu); EditorGUI.LabelField(new Rect(position.xMin, position.yMin, position.width - 20, position.height), "Bend Type", EditorUtilities.GetBendTypeNameInfo(bendType).forLable, EditorStyles.popup); if (GUI.Button(new Rect(position.xMax - 20, position.yMin, 20, position.height), "≡")) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("Find Controller"), false, EditorUtilities.CallbackFindController, (int)bendType + "_" + bendID); menu.AddItem(new GUIContent("Editor Window"), false, EditorUtilities.CallbackOpenCurvedWorldSettingsWindow, (int)bendType + "_" + bendID); menu.AddItem(new GUIContent("Curved World Keywords"), false, EditorUtilities.CallbackAnalyzeShaderCurvedWorldKeywords, material.shader); menu.AddItem(new GUIContent("Reimport Shader"), false, EditorUtilities.CallbackReimportShader, material.shader); menu.ShowAsContext(); } position.yMin += 20; position.height = 18; bendID = EditorGUI.IntSlider(position, "Bend ID", bendID, 1, EditorUtilities.MAX_SUPPORTED_BEND_IDS); if (hasNormalTransform) { position.yMin += 20; position.height = 18; normalTransform = EditorGUI.Toggle(position, "Normal Transform", normalTransform); } } EditorGUI.showMixedValue = false; if (EditorGUI.EndChangeCheck()) { if (bendID < 1) { bendID = 1; } // Set the new value if it has changed prop.vectorValue = new Vector4((int)bendType, bendID, (hasNormalTransform ? (normalTransform ? 1 : 0) : 0), 0); if (File.Exists(EditorUtilities.GetBendFileLocation(bendType, bendID, EditorUtilities.EXTENSTION.cginc))) { Undo.RecordObjects(editor.targets, "Change Keywords"); foreach (Material mat in editor.targets) { EditorUtilities.UpdateMaterialKeyWords(mat, bendType, bendID, normalTransform); } } else { //If file does not exist still adjust keyword for normal transformation foreach (Material mat in editor.targets) { if (normalTransform) { mat.EnableKeyword(EditorUtilities.shaderKeywordName_BendTransformNormal); } else { mat.DisableKeyword(EditorUtilities.shaderKeywordName_BendTransformNormal); } } } if (CurvedWorldEditorWindow.activeWindow != null && CurvedWorldEditorWindow.activeWindow.gTab == CurvedWorldEditorWindow.TAB.RenderersOverview) { CurvedWorldEditorWindow.activeWindow.RebuildSceneShadersOverview(); CurvedWorldEditorWindow.activeWindow.Repaint(); } } if (shaderSupportedBendTypes.Contains(bendType) == false || shaderSupportedBendIDs.Contains(bendID) == false || File.Exists(EditorUtilities.GetBendFileLocation(bendType, bendID, EditorUtilities.EXTENSTION.cginc)) == false) { position.yMin += 20; position.height = 36; EditorGUI.HelpBox(position, "Missing Keywords!", MessageType.Error); if (GUI.Button(new Rect(position.xMax - 64 - 5, position.yMin + 9, 64, 18), "Actions")) { updateBendType = bendType; updateBendID = bendID; updateNormalTransform = normalTransform; updateMaterial = material; updateMaterialEditor = editor; GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("Update Shader"), false, CallBackUpdateShader); menu.ShowAsContext(); } } }