Esempio n. 1
0
        public override void OnInspectorGUI()
        {
            EditorGUI.BeginChangeCheck();
            if (Event.current.commandName == "ObjectSelectorUpdated")
            {
                var texturePath = AssetDatabase.GetAssetPath(tile.m_Tileset);
                var oldSprites  = AssetDatabase.LoadAllAssetsAtPath(texturePath).OfType <Sprite>().ToArray();

                var selectedObject = EditorGUIUtility.GetObjectPickerObject() as Texture2D;
                var newPath        = AssetDatabase.GetAssetPath(selectedObject);
                var newSprites     = AssetDatabase.LoadAllAssetsAtPath(newPath).OfType <Sprite>().ToArray();

                Array.Sort(oldSprites, (a, b) => a.name.CompareTo(b.name));
                Array.Sort(newSprites, (a, b) => a.name.CompareTo(b.name));

                try
                {
                    foreach (var p in tile.m_TilingRules)
                    {
                        if (p.m_Sprites.Length > 0)
                        {
                            for (int i = 0; i < p.m_Sprites.Length; i++)
                            {
                                if (p.m_Sprites[i] != null)
                                {
                                    var oldName = p.m_Sprites[i].name;
                                    var index   = Array.FindIndex(oldSprites, t => t.name.Equals(oldName));
                                    if (index < 0)
                                    {
                                        Debug.LogError($"Can't finde {oldName} in old array.");
                                    }
                                    else
                                    {
                                        p.m_Sprites[i] = newSprites[index];
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Debug.LogError(ex);
                }
            }

            tile.m_Tileset             = EditorGUILayout.ObjectField("Texture 2D ", tile.m_Tileset, typeof(Texture2D), false) as Texture2D;
            tile.m_DefaultSprite       = EditorGUILayout.ObjectField("Default Sprite", tile.m_DefaultSprite, typeof(Sprite), false) as Sprite;
            tile.m_DefaultGameObject   = EditorGUILayout.ObjectField("Default Game Object", tile.m_DefaultGameObject, typeof(GameObject), false) as GameObject;
            tile.m_DefaultColliderType = (Tile.ColliderType)EditorGUILayout.EnumPopup("Default Collider", tile.m_DefaultColliderType);

            DrawCustomFields(false);

            EditorGUILayout.Space();

            if (m_ReorderableList != null)
            {
                m_ReorderableList.DoLayoutList();
            }

            if (EditorGUI.EndChangeCheck())
            {
                SaveTile();
            }
        }