using VRCFaceTracking.Core.Params;
using VRCFaceTracking.Core.Params.Data;
using VRCFaceTracking.Core.Params.Expressions;
using VRCFaceTracking.Core.Params.Expressions.Legacy.Eye;
using VRCFaceTracking.Core.Params.Expressions.Legacy.Lip;
using VRCFaceTracking.Core.Types;
namespace VRCFaceTracking
{
///
/// Class that contains all relevant data
///
public class UnifiedTracking
{
///
/// Eye image data sent from the loaded eye module.
///
public static Image EyeImageData = new Image();
///
/// Lip / Expression image data sent from the loaded expressions module.
///
public static Image LipImageData = new Image();
///
/// Latest Expression Data accessible and sent by all VRCFaceTracking modules.
///
public static UnifiedTrackingData Data = new();
///
/// Container of all features and functions that mutates the incoming expression data into output data suitable for driving Unified Expressions.
///
/// Mutates data on update.
public static UnifiedTrackingMutator Mutator;
#pragma warning disable CS0618
///
/// Version 1 (VRCFaceTracking SRanipal) of all accessible output parameters.
///
/// These parameters are going to be undocumented in the near future and are directly emulated by Version 2 (Unified Expressions) parameters.
public static readonly Parameter[] AllParameters_v1 = LipShapeMerger.AllLipParameters.Union(EyeTrackingParams.ParameterList).ToArray();
///
/// Version 2 (Unified Expressions) of all accessible output parameters.
///
public static readonly Parameter[] AllParameters_v2 = UnifiedExpressionsParameters.ExpressionParameters;
///
/// Head tracking parameters
///
public static readonly Parameter[] HeadParameters = UnifiedHeadParameters.HeadParameters;
///
/// The collection of EVERY possible output parameter
///
public static readonly Parameter[] AllParameters = AllParameters_v2.Concat(AllParameters_v1).Concat(HeadParameters).ToArray();
#pragma warning restore CS0618
///
/// Central update action for all expression data to subscribe to.
///
public static Action OnUnifiedDataUpdated = OnUnifiedDataUpdated + (_ => { }) ?? (_ => {});
///
/// Central update function that updates all output parameter data and pushes the latest expressions from VRCFaceTracking modules into the internal expressions buffer.
///
public static async Task UpdateData(CancellationToken ct) => OnUnifiedDataUpdated.Invoke(await Task.Run(() => Mutator.MutateData(Data), ct));
}
}