/// <summary> /// Gets unique asset path for a migrated asset. /// </summary> /// <remarks> /// <para>Creates the path "Assets/TileBrushes/Migrated" if it does not already /// exist. The resulting asset path can be used to save assets that are generated /// during the upgrade process.</para> /// <para>For example, previously additional components could be added to basic /// brush prefabs which would later be added to tiles as they are painted. In v2.x /// this is now achieved by attaching a prefab to the brush. So, attachment prefabs /// must be created and attached to the upgraded brushes.</para> /// </remarks> /// <param name="assetName">Name for asset.</param> /// <returns> /// The unique asset path. /// </returns> private static string GetUniqueMigratedPath(string assetName) { BrushUtility.GetBrushAssetPath(); // First make sure that the "Migrated" folder exists! if (!Directory.Exists(Directory.GetCurrentDirectory() + "/Assets/TileBrushes/Migrated")) { AssetDatabase.CreateFolder("Assets/TileBrushes", "Migrated"); } return(AssetDatabase.GenerateUniqueAssetPath("Assets/TileBrushes/Migrated/" + assetName)); }
/// <summary> /// Copies the data asset that stores the list of user defined brush categories. /// </summary> private void CopyBrushCategoryData() { if (File.Exists(Directory.GetCurrentDirectory() + "/Assets/TilePrefabs/brush.cats")) { string brushAssetPath = BrushUtility.GetBrushAssetPath(); // Do not copy categories data file if one already exists. // i.e. If categories have been defined using the v2.x user interface. if (!File.Exists(Directory.GetCurrentDirectory() + "/" + brushAssetPath + "Assets/TilePrefabs/categories.data")) { AssetDatabase.CopyAsset("Assets/TilePrefabs/brush.cats", brushAssetPath + "categories.data"); } } }
/// <summary> /// Finalize a newly created standalone brush asset. /// </summary> /// <remarks> /// <para>Also moves asset into "Master" folder if needed.</para> /// </remarks> /// <param name="record">Record for v1.x brush.</param> /// <param name="newBrush">The new brush.</param> private void FinalizeStandaloneBrush(RtsBrushAssetRecordWrapper record, Brush newBrush) { CopyCommonBrushProperties(newBrush, record.brush); RtsUpgradedBrushMap.BrushMappings.SetMapping(record.brush, newBrush); // Was previous brush a master? if (record.master) { string newAssetPath = AssetDatabase.GetAssetPath(newBrush); string masterAssetPath = newAssetPath.Replace(BrushUtility.GetBrushAssetPath(), BrushUtility.GetMasterBrushAssetPath()); AssetDatabase.MoveAsset(newAssetPath, masterAssetPath); } EditorUtility.SetDirty(newBrush); }
/// <summary> /// Generate tileset using an atlas brush. /// </summary> /// <remarks> /// <para>One tileset asset is generated for each unique atlas material that /// exists amongst all defined atlas brushes.</para> /// </remarks> /// <param name="brush">Existing atlas brush.</param> /// <returns> /// The tileset. /// </returns> private Tileset GenerateTilesetFromAtlasBrush(MonoBehaviour brush) { MeshRenderer renderer = brush.GetComponent <MeshRenderer>(); if (renderer == null) { return(null); } Material mat = renderer.sharedMaterial; if (mat == null) { return(null); } Texture2D atlasTexture = _fiAtlasTileBrush_atlasTexture.GetValue(brush) as Texture2D; if (atlasTexture == null) { return(null); } RtsUpgradedBrushMap map = RtsUpgradedBrushMap.BrushMappings; Tileset tileset = map.Lookup(mat); if (tileset != null) { return(tileset); } // Create folder for atlas assets string atlasFolder = AssetDatabase.GenerateUniqueAssetPath(BrushUtility.GetBrushAssetPath() + atlasTexture.name); Directory.CreateDirectory(Directory.GetCurrentDirectory() + "/" + atlasFolder); // Create material for tileset Material material = Object.Instantiate(mat) as Material; material.mainTexture = atlasTexture; AssetDatabase.CreateAsset(material, atlasFolder + "/atlas.mat"); AssetDatabase.ImportAsset(atlasFolder + "/atlas.mat"); int atlasTileWidth = (int)_fiAtlasTileBrush_atlasTileWidth.GetValue(brush); int atlasTileHeight = (int)_fiAtlasTileBrush_atlasTileHeight.GetValue(brush); // Calculate metrics for tileset TilesetMetrics metrics = new TilesetMetrics(atlasTexture, atlasTileWidth, atlasTileHeight, 0, 0.5f); // Create new tileset asset. tileset = ScriptableObject.CreateInstance <Tileset>(); tileset.Initialize(material, atlasTexture, metrics); tileset.procedural = useProceduralTilesets; // Save tileset asset. string assetPath = atlasFolder + "/" + atlasTexture.name + ".set.asset"; AssetDatabase.CreateAsset(tileset, assetPath); AssetDatabase.ImportAsset(assetPath); map.SetMapping(mat, tileset); return(tileset); }