private void DrawMaterialMappingEntry(int index) { Rect containerPosition = EditorGUILayout.BeginHorizontal(GUILayout.Height(138f)); GUILayout.Label(GUIContent.none); EditorGUI.BeginChangeCheck(); Rect fromFieldPosition = containerPosition; fromFieldPosition.width = 114f; fromFieldPosition.height -= 6f; var newFromMaterial = this.DrawMaterialField(fromFieldPosition, this.mappings.MaterialMappingFrom[index]); if (Event.current.type == EventType.Repaint) { Rect arrowPosition = new Rect(containerPosition.x + 121f, containerPosition.y + 44f, 29f, 22f); GUI.DrawTexture(arrowPosition, RotorzEditorStyles.Skin.MappingArrow); } Rect toFieldPosition = containerPosition; toFieldPosition.x += 156f; toFieldPosition.width = 114f; toFieldPosition.height -= 6f; var newToMaterial = this.DrawMaterialField(toFieldPosition, this.mappings.MaterialMappingTo[index]); // Has material mapping changed? if (EditorGUI.EndChangeCheck()) { this.mappings.MaterialMappingFrom[index] = newFromMaterial; this.mappings.MaterialMappingTo[index] = newToMaterial; // Changes have been made! EditorUtility.SetDirty(this.brush); // Refresh brush preview. BrushUtility.RefreshPreviewIncludingDependencies(this.brush); } // Button to remove material mapping. Rect removeButtonPosition = new Rect(containerPosition.x + 300f, containerPosition.y + 3f, 112f, 33f); if (GUI.Button(removeButtonPosition, TileLang.ParticularText("Action", "Remove"))) { this.RemoveMaterialMapping(index); GUIUtility.ExitGUI(); } EditorGUILayout.EndHorizontal(); }
public void OnAddMaterialMapping() { Undo.RecordObject(this.brush, TileLang.ParticularText("Action", "Add Material Mapping")); Material[] from = this.mappings.MaterialMappingFrom; Material[] to = this.mappings.MaterialMappingTo; // Fetch nth material from default variation. Material def = this.brush.GetNthMaterial(from.Length) ?? s_DefaultDiffuseMaterial; ArrayUtility.Add <Material>(ref from, def); ArrayUtility.Add <Material>(ref to, def); this.mappings.MaterialMappingFrom = from; this.mappings.MaterialMappingTo = to; // Changes have been made! EditorUtility.SetDirty(this.brush); // Refresh brush preview. BrushUtility.RefreshPreviewIncludingDependencies(this.brush); }
/// <summary> /// Remove material mapping from brush. /// </summary> /// <param name="index"> /// Zero-based index of mapping to remove. /// </param> public void RemoveMaterialMapping(int index) { Undo.RecordObject(this.brush, TileLang.ParticularText("Action", "Remove Material Mapping")); Material[] from = this.mappings.MaterialMappingFrom; Material[] to = this.mappings.MaterialMappingTo; if (index < 0 || index >= from.Length) { return; } // Remove material mapping. ArrayUtility.RemoveAt <Material>(ref from, index); ArrayUtility.RemoveAt <Material>(ref to, index); this.mappings.MaterialMappingFrom = from; this.mappings.MaterialMappingTo = to; // Changes have been made! EditorUtility.SetDirty(this.brush); // Refresh brush preview. BrushUtility.RefreshPreviewIncludingDependencies(this.brush); }
private void _brushList_BrushContextMenu(Brush brush) { // Do not attempt to display context menu for "(Erase)" item. if (brush == null) { return; } var brushRecord = BrushDatabase.Instance.FindRecord(brush); var brushContextMenu = new EditorMenu(); brushContextMenu.AddCommand(TileLang.OpensWindow(TileLang.ParticularText("Action", "Show in Designer"))) .Enabled(!brushRecord.IsMaster) // Cannot edit a master brush :) .Action(() => { ToolUtility.ShowBrushInDesigner(brush); }); var selectedTilesetBrush = brush as TilesetBrush; if (selectedTilesetBrush != null) { brushContextMenu.AddCommand(TileLang.ParticularText("Action", "Goto Tileset")) .Action(() => { this.brushList.Model.View = BrushListView.Tileset; this.brushList.Model.SelectedTileset = selectedTilesetBrush.Tileset; var designerWindow = RotorzWindow.GetInstance <DesignerWindow>(); if (designerWindow != null && !designerWindow.IsLocked) { designerWindow.SelectedObject = selectedTilesetBrush.Tileset; } this.Repaint(); }); } brushContextMenu.AddCommand(TileLang.ParticularText("Action", "Reveal Asset")) .Action(() => { EditorGUIUtility.PingObject(brush); }); brushContextMenu.AddSeparator(); brushContextMenu.AddCommand(TileLang.ParticularText("Action", "Refresh Preview")) .Action(() => { BrushUtility.RefreshPreviewIncludingDependencies(brush); }); brushContextMenu.AddSeparator(); brushContextMenu.AddCommand(TileLang.OpensWindow(TileLang.ParticularText("Action", "Create Duplicate"))) .Action(() => { var window = CreateBrushWindow.ShowWindow <DuplicateBrushCreator>(); window.SharedProperties["targetBrush"] = brush; }); var brushDescriptor = BrushUtility.GetDescriptor(brush.GetType()); brushContextMenu.AddCommand(TileLang.OpensWindow(TileLang.ParticularText("Action", "Create Alias"))) .Enabled(brushDescriptor.SupportsAliases) .Action(() => { var window = CreateBrushWindow.ShowWindow <AliasBrushCreator>(); window.SharedProperties["targetBrush"] = brush; }); brushContextMenu.AddCommand(TileLang.OpensWindow(TileLang.ParticularText("Action", "Delete Brush"))) .Action(() => { TileSystemCommands.DeleteBrush(brush, ToolUtility.SharedBrushListModel.View == BrushListView.Tileset); }); brushContextMenu.ShowAsContext(); }