Beispiel #1
0
        public CollisionObject(CollisionNode parent, ColObject *entry)
        {
            _modelName = entry->ModelName;
            _boneName  = entry->BoneName;
            _unk1      = entry->_unk1;
            _unk2      = entry->_unk2;
            _unk3      = entry->_unk3;
            _flags     = (ushort)entry->_flags;
            _unk5      = entry->_unk5;
            _unk6      = entry->_unk6;
            _boneIndex = entry->_boneIndex;
            _boxMax    = entry->_boxMax;
            _boxMin    = entry->_boxMin;

            int pointCount  = entry->_pointCount;
            int pointOffset = entry->_pointOffset;
            int planeCount  = entry->_planeCount;
            int planeOffset = entry->_planeIndex;

            ColPlane *pPlane = &parent.Header->Planes[planeOffset];

            //Decode points
            BVec2 *pPtr = &parent.Header->Points[pointOffset];

            for (int i = 0; i < pointCount; i++)
            {
                new CollisionLink(this, *pPtr++);
            }

            //CollisionPlane plane;
            for (int i = 0; i < planeCount; i++)
            {
                if (pPlane->_point1 != pPlane->_point2)
                {
                    new CollisionPlane(this, pPlane++, pointOffset);
                }
            }
        }
 public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
 {
     return(Bin16.FromString(value?.ToString() ?? ""));
 }
        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;
        }
Beispiel #4
0
        public override bool OnInitialize()
        {
            //Read common header
            base.OnInitialize();

            //Initialize defaults
            _numEntries  = new int[] { 0, 0 };
            _solidColors = new RGBAPixel[2];
            _constants   = new bool[] { true, true };

            //Read header values
            _nonSpecLightId = Data->_nonSpecLightId;
            _fixedFlags     = (FixedFlags)(ushort)Data->_fixedFlags;
            _typeUsageFlags = (ushort)Data->_usageFlags;
            _distFunc       = Data->_distFunc;
            _spotFunc       = Data->_spotFunc;

            //Read user data
            (_userEntries = new UserDataCollection()).Read(Data->UserData);

            //Don't bother reading data if the entry is null
            if (Name == "<null>")
            {
                return(false);
            }

            //Read light visibility array
            if (!_fixedFlags.HasFlag(FixedFlags.EnabledConstant) && !_replaced)
            {
                _entryCount = Scene.FrameCount;
                int numBytes = _entryCount.Align(32) / 8;

                _data = new byte[numBytes];
                Marshal.Copy((IntPtr)Data->VisBitEntries, _data, 0, numBytes);
            }
            else
            {
                _entryCount = 0;
                _data       = new byte[0];
            }

            //Read light color
            ReadColors(
                (uint)_fixedFlags,
                (uint)FixedFlags.ColorConstant,
                ref _solidColors[0],
                ref _lightColor,
                Scene.FrameCount,
                Data->_lightColor.Address,
                ref _constants[0],
                ref _numEntries[0]);

            if (!SpecularEnabled)
            {
                _constants[1] = (_fixedFlags & FixedFlags.SpecColorConstant) != 0;
                return(false);
            }

            //Read light specular color
            ReadColors(
                (uint)_fixedFlags,
                (uint)FixedFlags.SpecColorConstant,
                ref _solidColors[1],
                ref _specColor,
                Scene.FrameCount,
                Data->_specularColor.Address,
                ref _constants[1],
                ref _numEntries[1]);

            return(false);
        }
Beispiel #5
0
        public void Load()
        {
            #region Load Bins
            BinProduct binProduct = new BinProduct();

            binProduct        = BaseDAL.GetInventorybyBin(16);
            Bin16.Text        = binProduct.Quantity.ToString();
            Bin16Type.Content = GetProductType(binProduct.ProductID);
            if (!binProduct.Enabled)
            {
                Bin16.Foreground = Brushes.Red;
            }

            binProduct        = BaseDAL.GetInventorybyBin(17);
            Bin17.Text        = binProduct.Quantity.ToString();
            Bin17Type.Content = GetProductType(binProduct.ProductID);
            if (!binProduct.Enabled)
            {
                Bin17.Foreground = Brushes.Red;
            }

            binProduct        = BaseDAL.GetInventorybyBin(18);
            Bin18.Text        = binProduct.Quantity.ToString();
            Bin18Type.Content = GetProductType(binProduct.ProductID);
            if (!binProduct.Enabled)
            {
                Bin18.Foreground = Brushes.Red;
            }

            binProduct        = BaseDAL.GetInventorybyBin(20);
            Bin20.Text        = binProduct.Quantity.ToString();
            Bin20Type.Content = GetProductType(binProduct.ProductID);
            if (!binProduct.Enabled)
            {
                Bin20.Foreground = Brushes.Red;
            }

            binProduct        = BaseDAL.GetInventorybyBin(21);
            Bin21.Text        = binProduct.Quantity.ToString();
            Bin21Type.Content = GetProductType(binProduct.ProductID);
            if (!binProduct.Enabled)
            {
                Bin21.Foreground = Brushes.Red;
            }

            binProduct        = BaseDAL.GetInventorybyBin(22);
            Bin22.Text        = binProduct.Quantity.ToString();
            Bin22Type.Content = GetProductType(binProduct.ProductID);
            if (!binProduct.Enabled)
            {
                Bin22.Foreground = Brushes.Red;
            }

            binProduct        = BaseDAL.GetInventorybyBin(23);
            Bin23.Text        = binProduct.Quantity.ToString();
            Bin23Type.Content = GetProductType(binProduct.ProductID);
            if (!binProduct.Enabled)
            {
                Bin23.Foreground = Brushes.Red;
            }

            binProduct        = BaseDAL.GetInventorybyBin(24);
            Bin24.Text        = binProduct.Quantity.ToString();
            Bin24Type.Content = GetProductType(binProduct.ProductID);
            if (!binProduct.Enabled)
            {
                Bin24.Foreground = Brushes.Red;
            }

            binProduct        = BaseDAL.GetInventorybyBin(25);
            Bin25.Text        = binProduct.Quantity.ToString();
            Bin25Type.Content = GetProductType(binProduct.ProductID);
            if (!binProduct.Enabled)
            {
                Bin25.Foreground = Brushes.Red;
            }

            binProduct        = BaseDAL.GetInventorybyBin(26);
            Bin26.Text        = binProduct.Quantity.ToString();
            Bin26Type.Content = GetProductType(binProduct.ProductID);
            if (!binProduct.Enabled)
            {
                Bin26.Foreground = Brushes.Red;
            }

            binProduct        = BaseDAL.GetInventorybyBin(27);
            Bin27.Text        = binProduct.Quantity.ToString();
            Bin27Type.Content = GetProductType(binProduct.ProductID);
            if (!binProduct.Enabled)
            {
                Bin27.Foreground = Brushes.Red;
            }

            binProduct        = BaseDAL.GetInventorybyBin(28);
            Bin28.Text        = binProduct.Quantity.ToString();
            Bin28Type.Content = GetProductType(binProduct.ProductID);
            if (!binProduct.Enabled)
            {
                Bin28.Foreground = Brushes.Red;
            }

            #endregion

            Bin16.DelayedFocus();
        }
        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);
        }