Esempio n. 1
0
 private IEnumerable <MCNK_Flags> GetLiquidFlags()
 {
     for (int i = 0; i < 4; i++)
     {
         MCNK_Flags flag = (MCNK_Flags)(1 << (2 + i));
         if (Flags.HasFlag(flag))
         {
             yield return(flag);
         }
     }
 }
Esempio n. 2
0
        public MCNK(BinaryReader br, uint build, int size)
        {
            long endPos        = br.BaseStream.Position + size;
            long relativeStart = br.BaseStream.Position;
            long relativeEnd   = endPos - relativeStart;
            bool isAlpha       = build < 3592;

            Flags  = br.ReadEnum <MCNK_Flags>();
            IndexX = br.ReadUInt32();
            IndexY = br.ReadUInt32();
            if (isAlpha)
            {
                Radius = br.ReadSingle();
            }
            NLayers                 = br.ReadInt32();
            NDoodadRefs             = br.ReadInt32();
            OffsHeight              = br.ReadUInt32();
            OffsNormal              = br.ReadUInt32();
            OffsLayer               = br.ReadUInt32();
            OffsRefs                = br.ReadUInt32();
            OffsAlpha               = br.ReadUInt32();
            SizeAlpha               = br.ReadInt32();
            OffsShadow              = br.ReadUInt32();
            SizeShadow              = br.ReadInt32();
            Areaid                  = br.ReadUInt32();
            NMapObjRefs             = br.ReadInt32();
            Holes                   = br.ReadUInt16();
            Unk_0x12                = br.ReadUInt16();
            PredTex                 = br.ReadStructArray <ushort>(8);
            NoEffectDoodad          = br.ReadBytes(8);
            OffsSndEmitters         = br.ReadUInt32();
            NSndEmitters            = br.ReadInt32();
            OffsLiquid              = br.ReadUInt32();
            SizeLiquid              = br.ReadUInt32();
            br.BaseStream.Position += 20; // padding

            if (build <= 3368)
            {
                SizeLiquid = null;
            }

            // alpha build's offsets are exclusive of header data
            if (isAlpha)
            {
                relativeStart = br.BaseStream.Position;
                relativeEnd   = endPos - relativeStart;
            }

            Read(br, build, relativeStart, relativeEnd);
        }
Esempio n. 3
0
        public MCLQ(BinaryReader br, MCNK_Flags flag)
        {
            Height = br.ReadStruct <CRange>();

            switch (flag)
            {
            case MCNK_Flags.IsOcean:
                Verts = br.ReadJaggedArray(9, 9, () => (object)br.ReadStruct <SOVert>());
                break;

            case MCNK_Flags.IsMagma:
                Verts = br.ReadJaggedArray(9, 9, () => (object)br.ReadStruct <SMVert>());
                break;

            default:
                Verts = br.ReadJaggedArray(9, 9, () => (object)br.ReadStruct <SWVert>());
                break;
            }

            Tiles   = br.ReadJaggedArray(8, 8, () => br.ReadByte());
            NFlowvs = br.ReadUInt32();
            Flowvs  = br.ReadStructArray <SWFlowv>(2);
        }