示例#1
0
        public void Read(out Support.BitSet data)
        {
            System.Diagnostics.Debug.Assert(Reading);
            data = null;
            if (CoreObject.Pointer == IntPtr.Zero)
            {
                return;
            }

            unsafe
            {
                int bitCount = 0;
                XndSDK.XNDAttrib_Read(CoreObject, (IntPtr)(&bitCount), sizeof(int));
                data = new Support.BitSet();
                int byteCount = 0;
                XndSDK.XNDAttrib_Read(CoreObject, (IntPtr)(&byteCount), sizeof(int));
                byte[] bitData = new byte[byteCount];
                fixed(byte *p = &bitData[0])
                {
                    XndSDK.XNDAttrib_Read(CoreObject, (IntPtr)(p), sizeof(System.Byte) * byteCount);
                }

                data.Init((UInt32)bitCount, bitData);
            }
        }
示例#2
0
        protected static Support.BitSet ReadSaveFields(TypeDescGenerator.TypeDesc tDesc, IReader pkg)
        {
            var bitSet    = new Support.BitSet();
            var byteArray = TypeDescGenerator.Instance.GetSerializer(typeof(byte[]));

            byte[] bits = byteArray.ReadValue(pkg) as byte[];
            bitSet.Init((UInt32)tDesc.Members.Count, bits);
            return(bitSet);
        }
示例#3
0
 private int FindBitSetIndex(Support.BitSet bs)
 {
     for (int i = 0; i < mBitSets.Count; i++)
     {
         if (mBitSets[i] == bs)
         {
             return(i);
         }
     }
     return(-1);
 }
示例#4
0
        public bool TryCombine(PVSVoxel vx, int tolerance)
        {
            int flagNumber = 0;
            var combine    = Support.BitSet.BitOr(CombineBits, vx.Bits, ref flagNumber);

            if (flagNumber - OriFlagNumber < tolerance)
            {
                CombineBits = combine;
                return(true);
            }

            return(false);
        }
示例#5
0
 public void Write(Support.BitSet v)
 {
     unsafe
     {
         var bitCount = v.BitCount;
         WritePtr(&bitCount, sizeof(int));
         byte[] bitData   = v.Data;
         int    byteCount = bitData.Length;
         WritePtr(&byteCount, sizeof(int));
         fixed(byte *p = &bitData[0])
         {
             WritePtr(p, sizeof(System.Byte) * byteCount);
         }
     }
 }
示例#6
0
 public GActorBits()
 {
     BitSet = new Support.BitSet((UInt32)EBitDefine.Count);
     SetBit(EBitDefine.Visible, true);
     SetBit(EBitDefine.CastShadow, true);
     SetBit(EBitDefine.Navgation, false);
     SetBit(EBitDefine.NeedRefreshNavgation, true);
     SetBit(EBitDefine.NeedTick, true);
     SetBit(EBitDefine.Selected, false);
     SetBit(EBitDefine.InPVS, true);
     SetBit(EBitDefine.BoundVolume, true);
     SetBit(EBitDefine.HideInGame, false);
     SetBit(EBitDefine.OnlyForGame, false);
     SetBit(EBitDefine.AcceptLights, true);
     SetBit(EBitDefine.StaticObject, true);
 }
示例#7
0
        public void Read(out Support.BitSet v)
        {
            unsafe
            {
                int bitCount = 0;
                ReadPtr(&bitCount, sizeof(int));
                v = new Support.BitSet();
                int byteCount = 0;
                ReadPtr(&byteCount, sizeof(int));
                byte[] bitData = new byte[byteCount];
                fixed(byte *p = &bitData[0])
                {
                    ReadPtr(p, sizeof(System.Byte) * byteCount);
                }

                v.Init((UInt32)bitCount, bitData);
            }
        }
示例#8
0
        protected static Support.BitSet WriteSaveFields(ISerializer obj, TypeDescGenerator.TypeDesc tDesc, IWriter pkg)
        {
            var bitSet = new Support.BitSet();

            bitSet.Init((UInt16)tDesc.Members.Count);
            for (int i = 0; i < tDesc.Members.Count; i++)
            {
                bool cmp = tDesc.IsDefaultValue(obj, tDesc.Members[i].PropInfo);
                if (cmp == false)
                {
                    bitSet.SetBit((UInt32)i, true);
                }
            }
            var byteArray = TypeDescGenerator.Instance.GetSerializer(typeof(byte[]));

            byteArray.WriteValue(bitSet.Data, pkg);
            return(bitSet);
        }
示例#9
0
        public void Write(Support.BitSet data)
        {
            System.Diagnostics.Debug.Assert(Writing);
            if (CoreObject.Pointer == IntPtr.Zero)
            {
                return;
            }

            unsafe
            {
                var bitCount = data.BitCount;
                XndSDK.XNDAttrib_Write(CoreObject, (IntPtr)(&bitCount), sizeof(int));
                byte[] bitData   = data.Data;
                int    byteCount = bitData.Length;
                XndSDK.XNDAttrib_Write(CoreObject, (IntPtr)(&byteCount), sizeof(int));
                fixed(byte *p = &bitData[0])
                {
                    XndSDK.XNDAttrib_Write(CoreObject, (IntPtr)(p), sizeof(System.Byte) * byteCount);
                }
            }
        }
示例#10
0
        private int FindBitSet(Support.BitSet bs, UInt32 hash)
        {
            for (int i = 0; i < mBitSets.Count; i++)
            {
                if (hash != mBitSetExts[i].Hash)
                {
                    continue;
                }
                if (mBitSets[i].IsSame(bs))
                {
                    return(i);
                }
                //if (TryMerge(i, bs))
                //    return i;
            }
            mBitSets.Add(bs);
            var ext = new BitExtData();

            ext.Hash = hash;
            mBitSetExts.Add(ext);
            return(mBitSets.Count - 1);
        }
示例#11
0
        private bool TryMerge(Support.BitSet bs1, Support.BitSet bs2)
        {
            if (bs1.BitCount != bs2.BitCount)
            {
                return(false);
            }

            UInt32 actorNum = bs1.BitCount / 2;

            for (UInt32 i = 0; i < actorNum; i++)
            {
                int b1 = bs1.IsBit(i * 2) ? 1 : 0;
                int b2 = bs1.IsBit(i * 2 + 1) ? 1 : 0;
                int v1 = b1 | (b2 << 1);

                b1 = bs2.IsBit(i * 2) ? 1 : 0;
                b2 = bs2.IsBit(i * 2 + 1) ? 1 : 0;
                int v2 = b1 | (b2 << 1);

                if (v1 == 0 && v2 != 0)
                {
                    return(false);
                }
                if (v2 == 0 && v1 != 0)
                {
                    return(false);
                }
                if (v1 < v2)
                {
                    bs1.SetBit(i * 2, b1 == 0 ? false : true);
                    bs1.SetBit(i * 2 + 1, b2 == 0 ? false : true);
                }
            }

            return(true);
        }
示例#12
0
 public CombineVoxel(PVSVoxel vx)
 {
     OriFlagNumber = vx.Bits.FlagNumber;
     CombineBits   = new Support.BitSet();
     CombineBits.Init(vx.Bits.BitCount, vx.Bits.Data);
 }