Animator/AnimationValueSetter.cs
using CrosshairMaker.Animator;
using CrosshairMaker.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Intrinsics.X86;
using System.Text;
using System.Threading.Tasks;

namespace CrosshairMaker.Animator
{
	public sealed class AnimationValueSetter
	{
		//Properties
		//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-//
		/// <summary>
		/// with CrosshairAnimation, links the floats values with the corresponding setter
		/// </summary>
		public readonly List<Action<IAnimatableCrosshair,float>> FloatSetters ;
		/// <summary>
		/// with CrosshairAnimation, links the ints values with the corresponding setter
		/// </summary>
		public readonly List<Action<IAnimatableCrosshair, int>> IntSetters ;
		/// <summary>
		/// with CrosshairAnimation, links the color values with the corresponding setter
		/// </summary>
		public readonly List<Action<IAnimatableCrosshair, Color>> ColorSetters;

		public readonly List<Func<IAnimatableCrosshair, float>> FloatGetters;
		public readonly List<Func<IAnimatableCrosshair,int>> IntGetters;
		public readonly List<Func<IAnimatableCrosshair,Color>> ColorGetters;
		//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-//
		//Properties
		private AnimationValueSetter(
			IEnumerable<Action<IAnimatableCrosshair, float>>? fas = null ,
			IEnumerable<Action<IAnimatableCrosshair, int>>? ias = null ,
			IEnumerable<Action<IAnimatableCrosshair, Color>>? cas = null,
			List<Func<IAnimatableCrosshair, float>>? fgf = null ,
			List<Func<IAnimatableCrosshair,int>> igf = null ,
			List<Func<IAnimatableCrosshair,Color>> cgf = null
			)
		{
			FloatSetters = fas?.ToList() ?? new(0);
			IntSetters = ias?.ToList() ?? new( 0 );
			ColorSetters = cas?.ToList() ?? new( 0 );
			FloatGetters = fgf?.ToList() ?? new( 0 );
			IntGetters = igf?.ToList() ?? new( 0 );
			ColorGetters = cgf?.ToList() ?? new( 0 );
		}
		public static AnimationValueSetter Empty => new();
		public static AnimationValueSetter FromActions ( 
			IEnumerable<Action<IAnimatableCrosshair, float>>? floatSetters = null,
			IEnumerable<Action<IAnimatableCrosshair, int>>? intSetters = null,
			IEnumerable<Action<IAnimatableCrosshair, Color>>? colorSetters = null ,
			List<Func<IAnimatableCrosshair, float>>? floatGetters = null,
			List<Func<IAnimatableCrosshair,int>> intGetters = null,
			List<Func<IAnimatableCrosshair,Color>> colorGetters = null 
			)
			=> new(floatSetters,intSetters,colorSetters,floatGetters,intGetters,colorGetters);
		public int[] Sizes => new int[] { FloatSetters.Count , IntSetters.Count , ColorSetters.Count };

		public override string ToString()
		{
			return $"[AnimationValueSetter] [{(FloatSetters.Count, IntSetters.Count, ColorSetters.Count)}][{(FloatGetters.Count, IntGetters.Count, ColorGetters.Count)}]";
		}
	}
}