// static MapPreview mapPrev = null; public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label) { Event guiEvent = Event.current; MaterialGradient grad = (MaterialGradient)fieldInfo.GetValue(prop.serializedObject.targetObject); float labelWidth = GUI.skin.label.CalcSize(label).x + 5; Rect textRect = new Rect(pos.x + labelWidth, pos.y, pos.width - labelWidth, pos.height); // if (!mapPrev) mapPrev = GameObject.Find("MapPreview").GetComponent<MapPreview>(); if (guiEvent.type == EventType.Repaint) { GUIStyle gradStyle = new GUIStyle(); GUI.Label(pos, label); // There is an issue with printing the texture gradStyle.normal.background = grad.GetTexture((int)pos.width); GUI.Label(textRect, GUIContent.none, gradStyle); // if (mapPrev && mapPrev.autoUpdate) mapPrev.DrawMapInEditorGrad(); } else if (guiEvent.type == EventType.MouseDown && guiEvent.button == 0 && textRect.Contains(guiEvent.mousePosition)) { // Open the window when clicked on MaterialGradientEditor window = EditorWindow.GetWindow <MaterialGradientEditor>(); window.Gradient = grad; } }
// Need a way to update both the min and max height through keys private void Draw() { gradPrevRect = new Rect(borderSize, borderSize, position.width - borderSize * 2, 25); GUI.DrawTexture(gradPrevRect, gradient.GetTexture((int)gradPrevRect.width)); matRects = new Rect[gradient.NumMats * 2]; for (int i = 0; i < gradient.NumMats * 2; i++) { MaterialGradient.MaterialLevel mat = gradient.GetMatLevel(Mathf.FloorToInt(i * 0.5f)); Rect matRect = new Rect(gradPrevRect.x + gradPrevRect.width * ((i % 2 == 0) ? mat.MinHeight : mat.MaxHeight) - keyWidth / 2.0f, gradPrevRect.yMax + borderSize, keyWidth, keyHeight); if (i == selectedKeyIndex) { EditorGUI.DrawRect(new Rect(matRect.x - 2, matRect.y - 2, matRect.width + 4, matRect.height + 4), Color.black); } EditorGUI.DrawRect(matRect, mat.Tint); matRects[i] = matRect; } Rect settingsRect = new Rect(borderSize, matRects[0].yMax + borderSize, position.width - borderSize * 2, position.height - borderSize); GUILayout.BeginArea(settingsRect); EditorGUI.BeginChangeCheck(); Texture2D newText = (Texture2D)EditorGUILayout.ObjectField("Texture", gradient.GetMatLevel(MatIndex).Texture, typeof(Texture2D), false); Color newTint = EditorGUILayout.ColorField(gradient.GetMatLevel(MatIndex).Tint); float newTintStrength = EditorGUILayout.Slider("Tint Strength", gradient.GetMatLevel(MatIndex).TintStrength, 0.0f, 1.0f); float newMinSlope = EditorGUILayout.Slider("Min Slope", gradient.GetMatLevel(MatIndex).MinSlope, 0.0f, 90.0f); float newMaxSlope = EditorGUILayout.Slider("Max Slope", gradient.GetMatLevel(MatIndex).MaxSlope, 0.0f, 90.0f); float newBlendStrength = EditorGUILayout.Slider("Blend Strength", gradient.GetMatLevel(MatIndex).BlendStrength, 0.0f, 1.0f); Vector2 newTileOffset = EditorGUILayout.Vector2Field("Tex Offset", gradient.GetMatLevel(MatIndex).TileOffset); Vector2 newTileScale = EditorGUILayout.Vector2Field("Tex Scale", gradient.GetMatLevel(MatIndex).TileScale); Vector2 newSplatNoiseVScale = EditorGUILayout.Vector2Field("Blend Noise Vector Scale", gradient.GetMatLevel(MatIndex).SplatNoiseVScale); float newSplatNoiseScaler = EditorGUILayout.FloatField("Blend Noise Scaler", gradient.GetMatLevel(MatIndex).SplatNoiseScaler); if (EditorGUI.EndChangeCheck()) { gradient.UpdateMatTexture(MatIndex, newText); gradient.UpdateMatTint(MatIndex, newTint); gradient.UpdateMatTintStrength(MatIndex, newTintStrength); gradient.UpdateMatMinSlope(MatIndex, newMinSlope); gradient.UpdateMatMaxSlope(MatIndex, newMaxSlope); gradient.UpdateMatBlendStrength(MatIndex, newBlendStrength); gradient.UpdateMatTileOffset(MatIndex, newTileOffset); gradient.UpdateMatTileScale(MatIndex, newTileScale); gradient.UpdateMatSplatNoiseVScale(MatIndex, newSplatNoiseVScale); gradient.UpdateMatSplatNoiseScaler(MatIndex, newSplatNoiseScaler); } gradient.bRandomizeTint = EditorGUILayout.Toggle("Randomize Tint", gradient.bRandomizeTint); GUILayout.EndArea(); }