/// <summary> /// Reads keyframes at an address, starting with the keyframe array header. /// </summary> /// <param name="kf">The array to set decoded frames to.</param> /// <param name="dataAddr">The address of the keyframe array header.</param> public static void DecodeKeyframes(KeyframeArray kf, VoidPtr dataAddr) { SCN0KeyframesHeader *header = (SCN0KeyframesHeader *)dataAddr; SCN0KeyframeStruct * entry = header->Data; for (int i = 0; i < header->_numFrames; i++, entry++) { kf.SetFrameValue((int)entry->_index, entry->_value, true)._tangent = entry->_tangent; } }
public static void EncodeFrames(KeyframeArray kf, ref VoidPtr dataAddr) { SCN0KeyframesHeader *header = (SCN0KeyframesHeader *)dataAddr; *header = new SCN0KeyframesHeader(kf._keyCount); KeyframeEntry frame, root = kf._keyRoot; SCN0KeyframeStruct *entry = header->Data; for (frame = root._next; frame._index != -1; frame = frame._next) { *entry++ = new SCN0KeyframeStruct(frame._tangent, frame._index, frame._value); } *(bint *)entry = 0; dataAddr = ((VoidPtr)entry) + 4; }
//[Category("Camera Vector 1"), TypeConverter(typeof(Vector3StringConverter))] //public Vector3 Vec1 { get { return vec1; } set { vec1 = value; SignalPropertyChange(); } } //[Category("Camera Vector 2"), TypeConverter(typeof(Vector3StringConverter))] //public Vector3 Vec2 { get { return vec3; } set { vec3 = value; SignalPropertyChange(); } } //[Category("Camera Vector 3"), TypeConverter(typeof(Vector3StringConverter))] //public Vector3 Vec3 { get { return vec4; } set { vec4 = value; SignalPropertyChange(); } } //[Category("Camera Vector 4"), TypeConverter(typeof(Vector3StringConverter))] //public Vector3 Vec4 { get { return vec5; } set { vec5 = value; SignalPropertyChange(); } } protected override bool OnInitialize() { base.OnInitialize(); _flags1 = Data->_flags1; _flags2 = Data->_flags2; vec1 = Data->_vec1; vec2 = Data->_camSettings; vec3 = Data->_vec2; vec4 = Data->_vec3; vec5 = Data->_vec4; v1x = new List <SCN0Keyframe>(); v1y = new List <SCN0Keyframe>(); v1z = new List <SCN0Keyframe>(); v2x = new List <SCN0Keyframe>(); v2y = new List <SCN0Keyframe>(); v2z = new List <SCN0Keyframe>(); v3x = new List <SCN0Keyframe>(); v3y = new List <SCN0Keyframe>(); v3z = new List <SCN0Keyframe>(); v4x = new List <SCN0Keyframe>(); v4y = new List <SCN0Keyframe>(); v4z = new List <SCN0Keyframe>(); if (Vec1Flags.HasFlag(SCN0CameraVectorFlags.FixedX)) { v1x.Add(new Vector3(0, 0, Data->_vec1._x)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->v1xKfs; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { v1x.Add(*addr++); } } } if (Vec1Flags.HasFlag(SCN0CameraVectorFlags.FixedY)) { v1y.Add(new Vector3(0, 0, Data->_vec1._y)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->v1yKfs; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { v1y.Add(*addr++); } } } if (Vec1Flags.HasFlag(SCN0CameraVectorFlags.FixedZ)) { v1z.Add(new Vector3(0, 0, Data->_vec1._z)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->v1zKfs; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { v1z.Add(*addr++); } } } if (Vec2Flags.HasFlag(SCN0CameraVectorFlags.FixedX)) { v2x.Add(new Vector3(0, 0, Data->_vec2._x)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->v2xKfs; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { v2x.Add(*addr++); } } } if (Vec2Flags.HasFlag(SCN0CameraVectorFlags.FixedY)) { v2y.Add(new Vector3(0, 0, Data->_vec2._y)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->v2yKfs; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { v2y.Add(*addr++); } } } if (Vec2Flags.HasFlag(SCN0CameraVectorFlags.FixedZ)) { v2z.Add(new Vector3(0, 0, Data->_vec2._z)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->v2zKfs; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { v2z.Add(*addr++); } } } if (Vec3Flags.HasFlag(SCN0CameraVectorFlags.FixedX)) { v3x.Add(new Vector3(0, 0, Data->_vec3._x)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->v3xKfs; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { v3x.Add(*addr++); } } } if (Vec3Flags.HasFlag(SCN0CameraVectorFlags.FixedY)) { v3y.Add(new Vector3(0, 0, Data->_vec3._y)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->v3yKfs; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { v3y.Add(*addr++); } } } if (Vec3Flags.HasFlag(SCN0CameraVectorFlags.FixedZ)) { v3z.Add(new Vector3(0, 0, Data->_vec3._z)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->v3zKfs; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { v3z.Add(*addr++); } } } if (Vec4Flags.HasFlag(SCN0CameraVectorFlags.FixedX)) { v4x.Add(new Vector3(0, 0, Data->_vec4._x)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->v4xKfs; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { v4x.Add(*addr++); } } } if (Vec4Flags.HasFlag(SCN0CameraVectorFlags.FixedZ)) //Z for Y? { v4y.Add(new Vector3(0, 0, Data->_vec4._y)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->v4yKfs; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { v4y.Add(*addr++); } } } if (Vec4Flags.HasFlag(SCN0CameraVectorFlags.FixedY)) //Y for Z? { v4z.Add(new Vector3(0, 0, Data->_vec4._z)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->v4zKfs; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { v4z.Add(*addr++); } } } return(false); }
protected override bool OnInitialize() { base.OnInitialize(); _unk1 = Data->_unk1; _unk2 = Data->_unk2; _flags1 = new Bin16(Data->_flags1); _flags2 = new Bin16(Data->_flags2); _unk5 = Data->_unk5; _unk6 = Data->_unk6; _unk7 = Data->_unk7; _unk8 = Data->_unk8; _unk9 = Data->_unk9; _unk10 = Data->_unk10; _unk12 = Data->_unk12; _lighting1 = new List <RGBAPixel>(); _lighting2 = new List <RGBAPixel>(); xEnds = new List <SCN0Keyframe>(); yEnds = new List <SCN0Keyframe>(); zEnds = new List <SCN0Keyframe>(); xStarts = new List <SCN0Keyframe>(); yStarts = new List <SCN0Keyframe>(); zStarts = new List <SCN0Keyframe>(); if (Flags1[3]) { xEnds.Add(new Vector3(0, 0, Data->_vec1._x)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->xEndKeyframes; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { xEnds.Add(*addr++); } } } if (Flags1[4]) { yEnds.Add(new Vector3(0, 0, Data->_vec1._y)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->yEndKeyframes; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { yEnds.Add(*addr++); } } } if (Flags1[5]) { zEnds.Add(new Vector3(0, 0, Data->_vec1._z)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->zEndKeyframes; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { zEnds.Add(*addr++); } } } if (Flags1[6]) { _lighting1.Add(Data->_lighting1); } else { if (Name != "<null>") { RGBAPixel *addr = Data->light1Entries; for (int i = 0; i <= ((SCN0Node)Parent.Parent).FrameCount; i++) { _lighting1.Add(*addr++); } } } if (Flags1[7]) { xStarts.Add(new Vector3(0, 0, Data->_vec2._x)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->xStartKeyframes; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { xStarts.Add(*addr++); } } } if (Flags1[8]) { yStarts.Add(new Vector3(0, 0, Data->_vec2._y)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->yStartKeyframes; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { yStarts.Add(*addr++); } } } if (Flags1[9]) { zStarts.Add(new Vector3(0, 0, Data->_vec2._z)); } else { if (Name != "<null>") { SCN0KeyframesHeader *keysHeader = Data->zStartKeyframes; SCN0KeyframeStruct * addr = keysHeader->Data; for (int i = 0; i < keysHeader->_numFrames; i++) { zStarts.Add(*addr++); } } } if (Flags1[14]) { _lighting2.Add(Data->_lighting2); } else { if (Name != "<null>") { RGBAPixel *addr = Data->light2Entries; for (int i = 0; i <= ((SCN0Node)Parent.Parent).FrameCount; i++) { _lighting2.Add(*addr++); } } } return(false); }