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); } } } }
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); } }
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; }