Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        /// <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();
        }