Beispiel #1
0
        public static void UpdateCellsSkins()
        {
            var skinsMap = AssetEditorTools.GetAssets <CellItemsMapInfo>().FirstOrDefault();

            var cellSkins = AssetEditorTools.GetComponentAssets <CellItemView>();
            var graphs    = AssetEditorTools.GetAssets <UniStatesGraph>();

            var mapPath    = AssetDatabase.GetAssetPath(skinsMap);
            var skinPaths  = cellSkins.Select(x => AssetDatabase.GetAssetPath(x)).ToList();
            var skinTypes  = skinPaths.ToDictionary(x => x, x => Path.GetFileName(Path.GetDirectoryName(x).ToLowerInvariant()));
            var mapFolder  = Path.GetDirectoryName(mapPath);
            var skinFolder = mapFolder + "\\" + SkinsFolderPath + "\\";

            skinsMap.Clear();

            if (Directory.Exists(skinFolder))
            {
                Directory.Delete(skinFolder, true);
            }

            if (!Directory.Exists(skinFolder))
            {
                Directory.CreateDirectory(skinFolder);
            }

            var skins = new Dictionary <string, CellSkinsInfo>();

            for (var i = 0; i < cellSkins.Count; i++)
            {
                var cellItemView = cellSkins[i];
                var path         = skinPaths[i];
                var skinType     = skinTypes[path];

                var skinDirectory = skinFolder + skinType;

                if (!skins.TryGetValue(skinType, out var skinInfo))
                {
                    skinInfo = AssetEditorTools.
                               CreateAsset <CellSkinsInfo>("skin_type_" + skinType, skinFolder);

                    skins[skinType]        = skinInfo;
                    skinInfo.Name          = skinType;
                    skinInfo.CellItemInfos = new List <CellItemInfo>();

                    EditorUtility.SetDirty(skinInfo);
                }

                if (!Directory.Exists(skinDirectory))
                {
                    Directory.CreateDirectory(skinDirectory);
                }

                var skinItemInfo = AssetEditorTools.CreateAsset <CellItemInfo>(skinType + "_skin_" + i, skinDirectory);
                skinInfo.CellItemInfos.Add(skinItemInfo);

                var graph = Select(graphs, string.Format($"{skinType}_cell_actor"));
                if (graph == null)
                {
                    graph = Select(graphs, string.Format($"{DefaultCellBehaviour}_cell_actor"));
                }

                skinItemInfo.Initialize(skinType, graph, cellItemView);

                EditorUtility.SetDirty(skinItemInfo);
            }

            foreach (var skin in skins)
            {
                skinsMap.Add(skin.Value);
                EditorUtility.SetDirty(skin.Value);
                foreach (var itemInfo in skin.Value.CellItemInfos)
                {
                    EditorUtility.SetDirty(itemInfo);
                }
            }

            EditorUtility.SetDirty(skinsMap);

            AssetDatabase.SaveAssets();
        }