Example #1
0
        public override Stream UnParse()
        {
            MemoryStream s  = new MemoryStream();
            BinaryWriter bw = new BinaryWriter(s);

            bw.Write((UInt32)FOURCC(Tag));
            if (mExtraBounds == null)
            {
                mExtraBounds = new BoundingBoxList(handler);
            }
            if (mEntries == null)
            {
                mEntries = new LODEntryList(handler);
            }
            if (mBounds == null)
            {
                mBounds = new BoundingBox(0, handler);
            }
            if (mVersion < 258 && mExtraBounds.Count > 0)
            {
                mVersion = 258;
            }
            bw.Write(mVersion);
            bw.Write(mEntries.Count);
            mBounds.UnParse(s);
            if (mVersion >= 258)
            {
                mExtraBounds.UnParse(s);
                bw.Write(mFadeType);
                bw.Write(mCustomFadeDistance);
            }
            mEntries.UnParse(s);
            return(s);
        }
Example #2
0
        protected override void Parse(Stream s)
        {
            BinaryReader br  = new BinaryReader(s);
            string       tag = FOURCC(br.ReadUInt32());

            if (Settings.Checking && tag != Tag)
            {
                throw new InvalidDataException(string.Format("Invalid Tag read: '{0}'; expected: '{1}'; at 0x{1:X8}", tag, Tag, s.Position));
            }
            mVersion = br.ReadUInt32();
            int count = br.ReadInt32();

            mBounds = new BoundingBox(0, handler, s);
            if (mVersion >= 258)
            {
                mExtraBounds        = new BoundingBoxList(handler, s);
                mFadeType           = br.ReadUInt32();
                mCustomFadeDistance = br.ReadSingle();
            }
            else
            {
                mExtraBounds = new BoundingBoxList(handler);
            }
            mEntries = new LODEntryList(handler, s, count);
        }
Example #3
0
 public MODL(int APIversion, EventHandler handler, uint version, BoundingBox bounds, BoundingBoxList extraBounds, uint fadeType, float customFadeDistance, LODEntryList entries)
     : base(APIversion, handler, null)
 {
     mVersion            = version;
     mBounds             = bounds;
     mExtraBounds        = extraBounds == null ? null : extraBounds;
     mFadeType           = fadeType;
     mCustomFadeDistance = customFadeDistance;
     mEntries            = entries == null ? null : entries;
 }
Example #4
0
        public Coct CreateCoct()
        {
            var coct = new Coct();

            coct.CollisionMeshGroupList.AddRange(
                CollisionMeshGroupList
                .Select(
                    collision1 =>
            {
                var newCollision1 = Ummap1(collision1);

                newCollision1.CollisionMeshStart = Convert.ToUInt16(
                    coct.CollisionMeshList.Count
                    );

                coct.CollisionMeshList.AddRange(
                    collision1.Meshes
                    .Select(
                        collision2 =>
                {
                    var newCollision2 = Unmap2(collision2);

                    newCollision2.CollisionStart = Convert.ToUInt16(
                        coct.CollisionList.Count
                        );

                    coct.CollisionList.AddRange(
                        collision2.Items
                        .Select(
                            collision3 =>
                    {
                        var newCollision3 = Unmap3(collision3);

                        return(newCollision3);
                    }
                            )
                        );

                    newCollision2.CollisionEnd = Convert.ToUInt16(
                        coct.CollisionList.Count
                        );

                    return(newCollision2);
                }
                        )
                    );

                newCollision1.CollisionMeshEnd = Convert.ToUInt16(
                    coct.CollisionMeshList.Count
                    );

                return(newCollision1);
            }
                    )
                );

            coct.VertexList.AddRange(
                VertexList
                .Select(Unmap4)
                );

            coct.PlaneList.AddRange(
                PlaneList
                .Select(Unmap5)
                );

            coct.BoundingBoxList.AddRange(
                BoundingBoxList
                .Select(Unmap6)
                );

            coct.SurfaceFlagsList.AddRange(
                SurfaceFlagsList
                .Select(Unmap7)
                );

            return(coct);
        }