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); }
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); }
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; }
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); }