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); }
/// <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); }
/// <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(); } }
/// <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); }
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); }