protected override void PreviewInSceneInternal(WorldStampCreator parent) { var bounds = parent.Template.Bounds; if (_maskPainter == null) { _maskPainter = new Painter(Mask, GridManager); _maskPainter.Ramp = new Gradient() { colorKeys = new[] { new GradientColorKey(Color.red, 0), new GradientColorKey(Color.black, 0.001f), new GradientColorKey(Color.black, 1), }, alphaKeys = new[] { new GradientAlphaKey(1, 0), new GradientAlphaKey(0, 1), } }; _maskPainter.Rect = new Rect(bounds.min.xz(), bounds.size.xz()); } else { GridSize = WorldStampCreator.GetMinGridSize(bounds, parent.Template.Terrain); _maskPainter.GridManager = GridManager; _maskPainter.Canvas = Mask; _maskPainter.MaxValue = 1; _maskPainter.MinValue = 0; _maskPainter.Rect = new Rect(Vector2.zero, bounds.size.xz()); _maskPainter.TRS = Matrix4x4.TRS(bounds.min, Quaternion.identity, Vector3.one); //_maskPainter.Repaint(); _maskPainter.PaintingEnabled = true; _maskPainter.OnSceneGUI(); } }
public override void Dispose() { if (_maskPainter != null) { _maskPainter.Destroy(); _maskPainter = null; } }
public override void DrawGUI(WorldStampCreator parent) { if (parent.SceneGUIOwner != this && _maskPainter != null) { _maskPainter.Canvas = null; } if (_maskPainter != null && _maskPainter.Canvas != null && _maskPainter.Canvas != Mask) { _maskPainter.Canvas = null; parent.SceneGUIOwner = null; } if (Mask.Count == 0 || LastBounds != parent.Template.Bounds) { ResetMask(parent.Template.Bounds, parent.Template.Terrain); } EditorExtensions.Seperator(); EditorGUILayout.BeginHorizontal(); GUIExpanded = EditorGUILayout.Foldout(GUIExpanded, Label); var previewContent = new GUIContent("Edit"); previewContent.tooltip = "Edit the mask for this stamp."; GUI.color = parent.SceneGUIOwner == this ? Color.green : Color.white; if (GUILayout.Button(previewContent, EditorStyles.miniButton, GUILayout.Width(60), GUILayout.Height(16))) { if (parent.SceneGUIOwner == this && _maskPainter != null) { _maskPainter.Destroy(); _maskPainter = null; } parent.SceneGUIOwner = parent.SceneGUIOwner == this ? null : this; if ((parent.Template.Bounds.size - LastBounds.size).magnitude > 1) { ResetMask(parent.Template.Bounds, parent.Template.Terrain); } GUIUtility.ExitGUI(); return; } GUI.color = Color.white; EditorGUILayout.EndHorizontal(); if (GUIExpanded) { GUI.enabled = Enabled; EditorGUI.indentLevel++; EditorGUI.BeginChangeCheck(); OnExpandedGUI(parent); if (EditorGUI.EndChangeCheck()) { NeedsRecapture = true; } EditorGUI.indentLevel--; GUI.enabled = true; } }