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