Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        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;
        }