Esempio n. 1
0
        private BrushAssetRecord AddBrushRecord(Object mainAsset, Brush brush, string assetPath, bool master)
        {
            BrushAssetRecord record;

            int recordIndex = this.FindRecordIndexWithNullChecks(brush);

            if (recordIndex != -1)
            {
                record = this.brushRecords[recordIndex];

                // Master and asset path may have changed.
                record.AssetPath = assetPath;
                record.isMaster  = master;

                // Remove record from old list since we want to recycle it!
                this.brushRecords[recordIndex] = null;
            }
            else
            {
                // Create new record.
                record = new BrushAssetRecord(assetPath, mainAsset, brush, master);
            }

            // Make sure that brush is awake!
            if (!brush._ready)
            {
                brush._ready = true;
                brush.Awake();
            }

            return(record);
        }
Esempio n. 2
0
        /// <inheritdoc/>
        protected internal override bool DrawPreview(Rect output, BrushAssetRecord record, bool selected)
        {
            var brush = record.Brush as OrientedBrush;

            if (brush == null)
            {
                return(false);
            }

            var orientation = brush.FindClosestOrientation(0);

            if (orientation == null || orientation.VariationCount == 0)
            {
                return(false);
            }

            var firstVariation = orientation.GetVariation(0);

            var nestedRecord = BrushDatabase.Instance.FindRecord(firstVariation as Brush);

            if (nestedRecord == null)
            {
                return(false);
            }

            // Use preview from nested brush.
            return(RotorzEditorGUI.DrawBrushPreviewHelper(output, nestedRecord, selected));
        }
        /// <inheritdoc/>
        protected internal override bool DrawPreview(Rect output, BrushAssetRecord record, bool selected)
        {
            var brush = record.Brush as TilesetBrush;

            if (brush == null)
            {
                return(false);
            }

            var tileset = brush.Tileset;

            if (tileset == null || tileset.AtlasTexture == null)
            {
                return(false);
            }

            if (tileset.TileWidth == 0 || tileset.TileHeight == 0 || tileset.Columns == 0)
            {
                return(false);
            }

            if (Event.current.type == EventType.Repaint)
            {
                GUI.DrawTextureWithTexCoords(output, tileset.AtlasTexture, tileset.CalculateTexCoords(brush.tileIndex), true);
            }

            return(true);
        }
 /// <summary>
 /// Delete a brush that is described by this descriptor.
 /// </summary>
 /// <param name="record">Record for brush that is to be deleted.</param>
 /// <returns>
 /// A value of <c>true</c> if brush was deleted; otherwise <c>false</c>.
 /// </returns>
 public virtual bool DeleteBrush(BrushAssetRecord record)
 {
     // Delete entire asset if brush IS the main asset.
     if (record.MainAsset == record.Brush)
     {
         if (AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(record.MainAsset)))
         {
             BrushDatabase.Instance.ClearMissingRecords();
             return(true);
         }
         return(false);
     }
     return(true);
 }
Esempio n. 5
0
        /// <summary>
        /// Refresh preview image for specified brush and also refresh preview image
        /// for brushes which depend upon the specified brush.
        /// </summary>
        /// <remarks>
        /// <para>At the moment this only includes alias brushes which target the
        /// specified brush. In the future this may be updated to include oriented
        /// brushes which nest the specified brush.</para>
        /// </remarks>
        /// <param name="brush">The brush.</param>
        internal static void RefreshPreviewIncludingDependencies(Brush brush)
        {
            BrushAssetRecord record = BrushDatabase.Instance.FindRecord(brush);

            if (record != null)
            {
                AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(brush));

                // Refresh preview any alias brushes which target this brush.
                foreach (var dependencyRecord in FindDependencyBrushes(record.Brush))
                {
                    RefreshPreview(dependencyRecord.Brush);
                }

                ToolUtility.RepaintBrushPalette();
            }
        }
Esempio n. 6
0
        /// <inheritdoc/>
        protected internal override bool DrawPreview(Rect output, BrushAssetRecord record, bool selected)
        {
            var brush = record.Brush as AliasBrush;

            if (brush == null)
            {
                return(false);
            }
            var targetRecord = BrushDatabase.Instance.FindRecord(brush.target);

            if (targetRecord == null)
            {
                return(false);
            }

            return(RotorzEditorGUI.DrawBrushPreviewHelper(output, targetRecord, selected));
        }
        /// <summary>
        /// Duplicate a brush that is described by this descriptor.
        /// </summary>
        /// <param name="name">Name for new brush.</param>
        /// <param name="record">Record for brush that is to be duplicated.</param>
        public virtual Brush DuplicateBrush(string name, BrushAssetRecord record)
        {
            // Duplicate entire asset because brush IS the main asset.
            if (record.MainAsset == record.Brush)
            {
                string newAssetPath = AssetDatabase.GenerateUniqueAssetPath(BrushUtility.GetBrushAssetPath() + name + ".asset");
                if (!AssetDatabase.CopyAsset(AssetDatabase.GetAssetPath(record.MainAsset), newAssetPath))
                {
                    return(null);
                }

                // Load the new asset.
                AssetDatabase.ImportAsset(newAssetPath);
                return(AssetDatabase.LoadMainAssetAtPath(newAssetPath) as Brush);
            }

            return(null);
        }
        /// <inheritdoc/>
        public override bool DeleteBrush(BrushAssetRecord record)
        {
            // Assume default implementation?
            if (record.MainAsset == record.Brush)
            {
                return(base.DeleteBrush(record));
            }

            // Is main asset a tileset?
            if (record.MainAsset is Tileset)
            {
                // Just destroy brush object.
                Object.DestroyImmediate(record.Brush, true);
                BrushDatabase.Instance.ClearMissingRecords();
                return(true);
            }

            return(false);
        }
Esempio n. 9
0
        private void DrawLargeTilePreview()
        {
            Rect previewPosition = GUILayoutUtility.GetRect(160, 160, 150, 150, RotorzEditorStyles.Instance.Box);

            // Draw background box for larger tile preview.
            previewPosition.width -= 10;
            if (Event.current.type == EventType.Repaint)
            {
                RotorzEditorStyles.Instance.Box.Draw(previewPosition, GUIContent.none, 0);
            }

            // Draw tile preview.
            previewPosition.x      += 2;
            previewPosition.y      += 2;
            previewPosition.width  -= 4;
            previewPosition.height -= 4;

            BrushAssetRecord record = BrushDatabase.Instance.FindRecord(this.Brush);

            RotorzEditorGUI.DrawBrushPreview(previewPosition, record);
        }
        /// <inheritdoc/>
        public override Brush DuplicateBrush(string name, BrushAssetRecord record)
        {
            // Assume default implementation?
            if (record.MainAsset == record.Brush)
            {
                return(base.DuplicateBrush(name, record));
            }

            // Is main asset a tileset?
            if (record.MainAsset is Tileset)
            {
                var duplicateBrush = Object.Instantiate(record.Brush) as Brush;
                duplicateBrush.name = name;

                AssetDatabase.AddObjectToAsset(duplicateBrush, record.MainAsset);

                return(duplicateBrush);
            }

            return(null);
        }
        /// <inheritdoc/>
        protected internal override bool DrawPreview(Rect output, BrushAssetRecord record, bool selected)
        {
            var brush = record.Brush as AutotileBrush;

            if (brush == null)
            {
                return(false);
            }

            var tileset = brush.Tileset;

            if (tileset == null || tileset.AtlasTexture == null)
            {
                return(false);
            }

            // Use autotile artwork to render preview when no inner joins are
            // specified for better preview.
            if (!tileset.HasInnerJoins && tileset.rawTexture != null)
            {
                if (Event.current.type == EventType.Repaint)
                {
                    GUI.DrawTexture(output, tileset.rawTexture, UnityEngine.ScaleMode.StretchToFill, true);
                }
                return(true);
            }

            if (tileset.TileWidth == 0 || tileset.TileHeight == 0 || tileset.Columns == 0)
            {
                return(false);
            }

            if (Event.current.type == EventType.Repaint)
            {
                GUI.DrawTextureWithTexCoords(output, tileset.AtlasTexture, tileset.CalculateTexCoords(15), true);
            }

            return(true);
        }
 /// <summary>
 /// Draw brush preview to GUI.
 /// </summary>
 /// <param name="output">Output position of brush preview.</param>
 /// <param name="record">The brush record.</param>
 /// <param name="selected">Indicates if preview is highlighted.</param>
 /// <returns>
 /// A value of <c>true</c> indicates if preview was drawn; otherwise <c>false</c>
 /// indicates that caller should assume default.
 /// </returns>
 protected internal virtual bool DrawPreview(Rect output, BrushAssetRecord record, bool selected)
 {
     return(false);
 }
 /// <inheritdoc/>
 protected internal override bool DrawPreview(Rect output, BrushAssetRecord record, bool selected)
 {
     GUI.DrawTexture(output, RotorzEditorStyles.Skin.EmptyPreview);
     return(true);
 }