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