コード例 #1
0
            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);
            }
コード例 #2
0
            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];
                }
            }
コード例 #3
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
            }
コード例 #4
0
 void CallbackBendTypeMenu(object obj)
 {
     bendType = (CurvedWorld.BEND_TYPE)obj;
 }
コード例 #5
0
            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();
                    }
                }
            }