OverviewFilesCommitsIssuesDocsReleasesPeers

ifsrenderer-linux / IFSEngine / Utility / ModelExtensions.cs

32 lines · csharp ref:
using System;
using System.Linq;

using IFSEngine.Model;
using IFSEngine.Serialization;

using Newtonsoft.Json;

namespace IFSEngine.Utility;

public static class ModelExtensions
{
    /// <summary>
    /// Extension method on <see cref="IFS"/> to <see cref="SaveJsonFile(IFS, string)"/>
    /// </summary>
    public static void Save(this IFS ifs, string path) => IfsSerializer.SaveJsonFile(ifs, path);

    /// <summary>
    /// Lazy, slow, but maintainable deep clone method that uses serialization.
    /// </summary>
    /// <param name="ifs">The IFS object to be cloned.</param>
    /// <returns>A new deep cloned instance.</returns>
    public static IFS DeepClone(this IFS ifs)
    {
        var transforms = ifs.Iterators.Select(i => i.Transform);
        var postFxs = ifs.PostEffects.Select(i => i.Effect);
        var settings = IfsSerializer.GetJsonSerializerSettings(transforms, postFxs, false);
        string serializedContent = JsonConvert.SerializeObject(ifs, settings);
        return JsonConvert.DeserializeObject<IFS>(serializedContent, settings);
    }
}