private void DrawProceduralField(TilesetBrush brush, Tileset tileset) { using (var content = ControlContent.WithTrailableTip( TileLang.ParticularText("Property", "Procedural"), TileLang.Text("Allows individual atlas brushes to override property of tileset.") )) { // Need to make width of "Procedural" popup shorter. GUILayout.BeginHorizontal(GUILayout.Width(200)); InheritYesNo newProcedural = (InheritYesNo)EditorGUILayout.EnumPopup(content, brush.procedural); if (newProcedural != brush.procedural) { brush.procedural = newProcedural; if (!brush.IsProcedural) { // Ensure that required procedural mesh exists! if (BrushUtility.EnsureTilesetMeshExists(tileset, brush.tileIndex)) { AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(tileset.tileMeshAsset)); } } } Rect position = GUILayoutUtility.GetLastRect(); GUI.Label(new Rect(position.x + position.width, position.y, 100, position.height), "= " + (brush.IsProcedural ? TileLang.Text("Procedural") : TileLang.Text("Non-Procedural")), EditorStyles.miniLabel); GUILayout.EndHorizontal(); ExtraEditorGUI.TrailingTip(content); } }
/// <summary> /// Creates new tileset brush asset. /// </summary> /// <remarks> /// <para>Brush asset should be marked as dirty once you have finished making /// modifications using <see cref="M:UnityEditor.EditorUtility.SetDirty">UnityEditor.EditorUtility.SetDirty</see>.</para> /// </remarks> /// <param name="name">Name of brush.</param> /// <param name="tileset">The tileset.</param> /// <param name="tileIndex">Zero-based index of tile in tileset.</param> /// <param name="procedural">Indicates if tileset brush should be procedural.</param> /// <returns> /// The brush; or <c>null</c> if an error has occurred. /// </returns> public static TilesetBrush CreateTilesetBrush(string name, Tileset tileset, int tileIndex, InheritYesNo procedural) { s_DirtyMesh = false; if (string.IsNullOrEmpty(name)) { Debug.LogError("No name specified."); return(null); } // Create new brush. var tilesetBrush = ScriptableObject.CreateInstance <TilesetBrush>(); tilesetBrush.Initialize(tileset); tilesetBrush.name = name; tilesetBrush.tileIndex = tileIndex; tilesetBrush.procedural = procedural; tilesetBrush.forceLegacySideways = false; // Set collider type based upon editor behavior mode. switch (EditorSettings.defaultBehaviorMode) { case EditorBehaviorMode.Mode2D: tilesetBrush.colliderType = ColliderType.BoxCollider2D; break; case EditorBehaviorMode.Mode3D: tilesetBrush.colliderType = ColliderType.BoxCollider3D; break; } if (procedural == InheritYesNo.No || (procedural == InheritYesNo.Inherit && !tileset.procedural)) { if (EnsureTilesetMeshExists(tileset, tileIndex)) { s_DirtyMesh = true; } } AssetDatabase.AddObjectToAsset(tilesetBrush, tileset); EditorUtility.SetDirty(tilesetBrush); EditorUtility.SetDirty(tileset); return(tilesetBrush); }