public static InterpCurveVector GetCurveVector(PropertyReader.Property p, ME3Package pcc)
 {
     InterpCurveVector vec = new InterpCurveVector();
     vec.Points = new List<InterpCurvePointVector>();
     int pos = 60;
     int count = BitConverter.ToInt32(p.raw, 56);
     for (int j = 0; j < count; j++)
     {
         List<PropertyReader.Property> p2 = PropertyReader.ReadProp(pcc, p.raw, pos);
         InterpCurvePointVector point = new InterpCurvePointVector();
         for (int i = 0; i < p2.Count(); i++)
         {
             if (pcc.getNameEntry(p2[i].Name) == "InVal")
                 point.InVal = BitConverter.ToSingle(p2[i].raw, 24);
             else if (pcc.getNameEntry(p2[i].Name) == "OutVal")
             {
                 point.OutVal.x = BitConverter.ToSingle(p2[i].raw, 32);
                 point.OutVal.y = BitConverter.ToSingle(p2[i].raw, 36);
                 point.OutVal.z = BitConverter.ToSingle(p2[i].raw, 40);
             }
             else if (pcc.getNameEntry(p2[i].Name) == "ArriveTangent")
             {
                 point.ArriveTangent.x = BitConverter.ToSingle(p2[i].raw, 32);
                 point.ArriveTangent.y = BitConverter.ToSingle(p2[i].raw, 36);
                 point.ArriveTangent.z = BitConverter.ToSingle(p2[i].raw, 40);
             }
             else if (pcc.getNameEntry(p2[i].Name) == "LeaveTangent")
             {
                 point.LeaveTangent.x = BitConverter.ToSingle(p2[i].raw, 32);
                 point.LeaveTangent.y = BitConverter.ToSingle(p2[i].raw, 36);
                 point.LeaveTangent.z = BitConverter.ToSingle(p2[i].raw, 40);
             }
             else if (pcc.getNameEntry(p2[i].Name) == "InterpMode")
                 point.InterpMode = new byteprop(p2[i].raw, "EInterpCurveMode", new string[] { "CIM_Linear", "CIM_CurveAuto", "CIM_Constant", "CIM_CurveUser", "CIM_CurveBreak", "CIM_CurveAutoClamped"});
             pos += p2[i].raw.Length;
         }
         vec.Points.Add(point);
     }
     return vec;
 }
 public void LoadData()
 {
     
     List<PropertyReader.Property> props = PropertyReader.getPropList(pcc.Exports[index]);
     foreach (PropertyReader.Property p in props)
     {
         if (pcc.getNameEntry(p.Name) == "VectorTrack")
             VectorTrack = GetCurveVector(p, pcc);
     }
 }
 public void LoadData()
 {
     LookupTrack = new InterpLookupTrack();
     LookupTrack.Points = new List<InterpLookupTrack.Point>();
     
     
     List<PropertyReader.Property> props = PropertyReader.getPropList(pcc.Exports[index]);
     string name;
     foreach (PropertyReader.Property p in props)
     {
         name = pcc.getNameEntry(p.Name);
         if (name == "bUseQuatInterpolation")
             bUseQuatInterpolation = p.Value.IntValue != 0;
         if (name == "SFXCreatedBeforeStuntActorLocationChange")
             SFXCreatedBeforeStuntActorLocationChange = p.Value.IntValue != 0;
         if (name == "MoveFrame")
             MoveFrame.set(p.raw);
         if (name == "RotMode")
             RotMode.set(p.raw);
         if (name == "LookAtGroupName")
             LookAtGroupName = p.Value.IntValue;
         if (name == "AngCurveTension")
             AngCurveTension = BitConverter.ToSingle(p.raw, 24);
         if (name == "EulerTrack")
             EulerTrack = GetCurveVector(p, pcc);
         if (name == "PosTrack")
             PosTrack = GetCurveVector(p, pcc);
         if (name == "LookupTrack")
         {
             int pos = 60;
             int count = BitConverter.ToInt32(p.raw, 56);
             for (int j = 0; j < count; j++)
             {
                 List<PropertyReader.Property> p2 = PropertyReader.ReadProp(pcc, p.raw, pos);
                 InterpLookupTrack.Point point = new InterpLookupTrack.Point();
                 for (int i = 0; i < p2.Count(); i++)
                 {
                     if (pcc.getNameEntry(p2[i].Name) == "Time")
                         point.Time = BitConverter.ToSingle(p2[i].raw, 24);
                     else if (pcc.getNameEntry(p2[i].Name) == "GroupName")
                         point.GroupName = p2[i].Value.NameValue;
                     pos += p2[i].raw.Length;
                 }
                 LookupTrack.Points.Add(point);
             }
         }
     }
 }