Exemple #1
0
        public void LoadData()
        {
            LookupTrack = new InterpLookupTrack();
            LookupTrack.Points = new List<InterpLookupTrack.Point>();

            BitConverter.IsLittleEndian = true;
            List<PropertyReader.Property> props = PropertyReader.getPropList(pcc, pcc.Exports[index].Data);
            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);
                    }
                }
            }
        }
Exemple #2
0
 public void LoadData()
 {
     BitConverter.IsLittleEndian = true;
     List<PropertyReader.Property> props = PropertyReader.getPropList(pcc, pcc.Exports[index].Data);
     foreach (PropertyReader.Property p in props)
     {
         if (pcc.getNameEntry(p.Name) == "VectorTrack")
             VectorTrack = GetCurveVector(p, pcc);
     }
 }
Exemple #3
0
 public static InterpCurveVector GetCurveVector(PropertyReader.Property p, PCCObject 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;
 }