OverviewFilesCommitsIssuesDocsReleasesPeers

ifsrenderer-linux / IFSEngine / Model / IParamSource.cs

50 lines · csharp ref:
using System.Collections.Generic;
using System.Numerics;

namespace IFSEngine.Model;

/// <summary>
/// Common interface for objects that hold user-editable plugin parameters (transform/postfx).
/// </summary>
public interface IParamSource
{
    /// <summary>
    /// Unique identifier of the parameter holder (such as an iterator or post-effect instance), used for animation channel paths.
    /// </summary>
    int Id { get; }

    /// <summary>
    /// The first segment of the animation path used to locate this source on the IFS root object.
    /// Iterators return "Node[{Id}]", EffectLayers return "PostFx[{Id}]".
    /// </summary>
    string ParamPathPrefix { get; }

    /// <summary>
    /// Parameter map for real-typed parameters.
    /// For example: "Strength" -> 0.5
    /// </summary>
    Dictionary<string, double> RealParams { get; }

    /// <summary>
    /// Parameter map for vector3-typed parameters.
    /// For example: "Offset" -> Vector3(0, 0, 0)
    /// </summary>
    Dictionary<string, Vector3> Vec3Params { get; }

    /// <summary>
    /// Default values for real-typed parameters. Each real param has a default value.
    /// </summary>
    IReadOnlyDictionary<string, double> RealParamDefaults { get; }

    /// <summary>
    /// Default values for vector3-typed parameters. Each vector3 param has a default value.
    /// </summary>
    IReadOnlyDictionary<string, Vector3> Vec3ParamDefaults { get; }

    /// <summary>
    /// Whether changing a parameter on this source requires a full params buffer invalidation (compute shader restart).
    /// Transform plugins (Iterators) return true; post-effect plugins (EffectLayers) return false.
    /// </summary>
    bool RequiresParamsBufferInvalidation { get; }
}