using Cryville.Common.Math; using Cryville.Crtr.Event; using System; using System.Linq; using UnityEngine; namespace Cryville.Crtr { public class GroupHandler : ContainerHandler { public ChartHandler ch; SquareMatrix matFrame; ContainerState[] tracks; public GroupHandler(Chart.Group tg, ChartHandler ch) : base() { this.ch = ch; } public override string TypeName { get { return "group"; } } public override void PreInit() { base.PreInit(); tracks = ( from c in cs.Children where c.Value.Container is Chart.Track select c.Value ).ToArray(); matFrame = SquareMatrix.WithPolynomialCoefficients(tracks.Length); frame = new ColumnVector(tracks.Length); } ColumnVector frame; public ColumnVector GetCurrentFrame(Func func) { for (int i = 0; i < tracks.Length; i++) frame[i] = func(tracks[i]); return matFrame.Eliminate(frame, Vector3Operator.Instance); } } class Vector3Operator : IVectorOperator { public static Vector3Operator Instance = new Vector3Operator(); public Vector3 Add(Vector3 lhs, Vector3 rhs) { return lhs + rhs; } public Vector3 ScalarMultiply(float lhs, Vector3 rhs) { return lhs * rhs; } } }