public override void OnRebuild(VoidPtr address, int length, bool force) { base.OnRebuild(address, length, force); if (_name == "<null>") { return; } SCN0Camera *header = (SCN0Camera *)address; header->_projectionType = (int)_projType; header->_flags2 = (ushort)(2 + (int)_type); header->_userDataOffset = 0; int newFlags1 = 0; for (int i = 0; i < 15; i++) { _dataAddrs[0] += EncodeKeyframes( Keyframes[i], _dataAddrs[0], header->_position._x.Address + i * 4, ref newFlags1, (int)Ordered[i]); } header->_flags1 = (ushort)newFlags1; if (_userEntries.Count > 0) { _userEntries.Write(header->UserData = (VoidPtr)header + SCN0Camera.Size); } }
public override void OnRebuild(VoidPtr address, int length, bool force) { base.OnRebuild(address, length, force); SCN0Camera *header = (SCN0Camera *)address; header->_projType = (int)_projType; header->_flags2 = (ushort)(2 + (int)_type); header->_userDataOffset = 0; int newFlags1 = 0; bint *values = (bint *)&header->_position; for (int i = 0; i < 15; i++) { EncodeFrames(GetKeys(i), ref keyframeAddr, &values[i], ref newFlags1, (int)Ordered[i]); } if (_userEntries.Count > 0) { _userEntries.Write(header->UserData = (VoidPtr)header + SCN0Camera.Size); } header->_flags1 = (ushort)newFlags1; }
protected internal override void OnRebuild(VoidPtr address, int length, bool force) { base.OnRebuild(address, length, force); SCN0Camera *header = (SCN0Camera *)address; header->_pad1 = 0; header->_flags2 = (ushort)_flags2; header->_pad2 = 0; header->_camSettings = vec2; Bin16 flags = new Bin16(); flags[0] = Vec1Flags.HasFlag(SCN0CameraVectorFlags.Unknown); if (v1x.Count > 1) { *((bint *)header->_vec1._x.Address) = (int)keyframeAddr - (int)header->_vec1._x.Address; ((SCN0KeyframesHeader *)keyframeAddr)->_numFrames = (ushort)v1x.Count; SCN0KeyframeStruct *addr = ((SCN0KeyframesHeader *)keyframeAddr)->Data; for (int i = 0; i < v1x.Count; i++) { *addr++ = v1x[i]; } keyframeAddr += 4 + v1x.Count * 12; flags[1] = false; } else { flags[1] = true; if (v1x.Count == 1) { header->_vec1._x = v1x[0]._value; } else { header->_vec1._x = 0; } } if (v1y.Count > 1) { *((bint *)header->_vec1._y.Address) = (int)keyframeAddr - (int)header->_vec1._y.Address; ((SCN0KeyframesHeader *)keyframeAddr)->_numFrames = (ushort)v1y.Count; SCN0KeyframeStruct *addr = ((SCN0KeyframesHeader *)keyframeAddr)->Data; for (int i = 0; i < v1y.Count; i++) { *addr++ = v1y[i]; } keyframeAddr += 4 + v1y.Count * 12; flags[2] = false; } else { flags[2] = true; if (v1y.Count == 1) { header->_vec1._y = v1y[0]._value; } else { header->_vec1._y = 0; } } if (v1z.Count > 1) { *((bint *)header->_vec1._z.Address) = (int)keyframeAddr - (int)header->_vec1._z.Address; ((SCN0KeyframesHeader *)keyframeAddr)->_numFrames = (ushort)v1z.Count; SCN0KeyframeStruct *addr = ((SCN0KeyframesHeader *)keyframeAddr)->Data; for (int i = 0; i < v1z.Count; i++) { *addr++ = v1z[i]; } keyframeAddr += 4 + v1z.Count * 12; flags[3] = false; } else { flags[3] = true; if (v1z.Count == 1) { header->_vec1._z = v1z[0]._value; } else { header->_vec1._z = 0; } } flags[4] = Vec4Flags.HasFlag(SCN0CameraVectorFlags.Unknown); if (v4x.Count > 1) { *((bint *)header->_vec4._x.Address) = (int)keyframeAddr - (int)header->_vec4._x.Address; ((SCN0KeyframesHeader *)keyframeAddr)->_numFrames = (ushort)v4x.Count; SCN0KeyframeStruct *addr = ((SCN0KeyframesHeader *)keyframeAddr)->Data; for (int i = 0; i < v4x.Count; i++) { *addr++ = v4x[i]; } keyframeAddr += 4 + v4x.Count * 12; flags[5] = false; } else { flags[5] = true; if (v4x.Count == 1) { header->_vec4._x = v4x[0]._value; } else { header->_vec4._x = 0; } } if (v4y.Count > 1) { *((bint *)header->_vec4._y.Address) = (int)keyframeAddr - (int)header->_vec4._y.Address; ((SCN0KeyframesHeader *)keyframeAddr)->_numFrames = (ushort)v4y.Count; SCN0KeyframeStruct *addr = ((SCN0KeyframesHeader *)keyframeAddr)->Data; for (int i = 0; i < v4y.Count; i++) { *addr++ = v4y[i]; } keyframeAddr += 4 + v4y.Count * 12; flags[7] = false; } else { flags[7] = true; if (v4y.Count == 1) { header->_vec4._y = v4y[0]._value; } else { header->_vec4._y = 0; } } if (v4z.Count > 1) { *((bint *)header->_vec4._z.Address) = (int)keyframeAddr - (int)header->_vec4._z.Address; ((SCN0KeyframesHeader *)keyframeAddr)->_numFrames = (ushort)v4z.Count; SCN0KeyframeStruct *addr = ((SCN0KeyframesHeader *)keyframeAddr)->Data; for (int i = 0; i < v4z.Count; i++) { *addr++ = v4z[i]; } keyframeAddr += 4 + v4z.Count * 12; flags[6] = false; } else { flags[6] = true; if (v4z.Count == 1) { header->_vec4._z = v4z[0]._value; } else { header->_vec4._z = 0; } } flags[8] = Vec3Flags.HasFlag(SCN0CameraVectorFlags.Unknown); if (v3x.Count > 1) { *((bint *)header->_vec3._x.Address) = (int)keyframeAddr - (int)header->_vec3._x.Address; ((SCN0KeyframesHeader *)keyframeAddr)->_numFrames = (ushort)v3x.Count; SCN0KeyframeStruct *addr = ((SCN0KeyframesHeader *)keyframeAddr)->Data; for (int i = 0; i < v3x.Count; i++) { *addr++ = v3x[i]; } keyframeAddr += 4 + v3x.Count * 12; flags[9] = false; } else { flags[9] = true; if (v3x.Count == 1) { header->_vec3._x = v3x[0]._value; } else { header->_vec3._x = 0; } } if (v3y.Count > 1) { *((bint *)header->_vec3._y.Address) = (int)keyframeAddr - (int)header->_vec3._y.Address; ((SCN0KeyframesHeader *)keyframeAddr)->_numFrames = (ushort)v3y.Count; SCN0KeyframeStruct *addr = ((SCN0KeyframesHeader *)keyframeAddr)->Data; for (int i = 0; i < v3y.Count; i++) { *addr++ = v3y[i]; } keyframeAddr += 4 + v3y.Count * 12; flags[10] = false; } else { flags[10] = true; if (v3y.Count == 1) { header->_vec3._y = v3y[0]._value; } else { header->_vec3._y = 0; } } if (v3z.Count > 1) { *((bint *)header->_vec3._z.Address) = (int)keyframeAddr - (int)header->_vec3._z.Address; ((SCN0KeyframesHeader *)keyframeAddr)->_numFrames = (ushort)v3z.Count; SCN0KeyframeStruct *addr = ((SCN0KeyframesHeader *)keyframeAddr)->Data; for (int i = 0; i < v3z.Count; i++) { *addr++ = v3z[i]; } keyframeAddr += 4 + v3z.Count * 12; flags[11] = false; } else { flags[11] = true; if (v3z.Count == 1) { header->_vec3._z = v3z[0]._value; } else { header->_vec3._z = 0; } } flags[12] = Vec2Flags.HasFlag(SCN0CameraVectorFlags.Unknown); if (v2x.Count > 1) { *((bint *)header->_vec2._x.Address) = (int)keyframeAddr - (int)header->_vec2._x.Address; ((SCN0KeyframesHeader *)keyframeAddr)->_numFrames = (ushort)v2x.Count; SCN0KeyframeStruct *addr = ((SCN0KeyframesHeader *)keyframeAddr)->Data; for (int i = 0; i < v2x.Count; i++) { *addr++ = v2x[i]; } keyframeAddr += 4 + v2x.Count * 12; flags[13] = false; } else { flags[13] = true; if (v2x.Count == 1) { header->_vec2._x = v2x[0]._value; } else { header->_vec2._x = 0; } } if (v2y.Count > 1) { *((bint *)header->_vec2._y.Address) = (int)keyframeAddr - (int)header->_vec2._y.Address; ((SCN0KeyframesHeader *)keyframeAddr)->_numFrames = (ushort)v2y.Count; SCN0KeyframeStruct *addr = ((SCN0KeyframesHeader *)keyframeAddr)->Data; for (int i = 0; i < v2y.Count; i++) { *addr++ = v2y[i]; } keyframeAddr += 4 + v2y.Count * 12; flags[14] = false; } else { flags[14] = true; if (v2y.Count == 1) { header->_vec2._y = v2y[0]._value; } else { header->_vec2._y = 0; } } if (v2z.Count > 1) { *((bint *)header->_vec2._z.Address) = (int)keyframeAddr - (int)header->_vec2._z.Address; ((SCN0KeyframesHeader *)keyframeAddr)->_numFrames = (ushort)v2z.Count; SCN0KeyframeStruct *addr = ((SCN0KeyframesHeader *)keyframeAddr)->Data; for (int i = 0; i < v2z.Count; i++) { *addr++ = v2z[i]; } keyframeAddr += 4 + v2z.Count * 12; flags[15] = false; } else { flags[15] = true; if (v2z.Count == 1) { header->_vec2._z = v2z[0]._value; } else { header->_vec1._z = 0; } } header->_flags1 = flags.data; }