public static GameObjectHeader GameObjectHeaderReader(this BinaryReader reader) { GameObjectHeader header = new GameObjectHeader(); header.version = reader.ReadInt32(); if (header.version != 0x77) { throw new InvalidDataException("Unknown object file version: " + header.version); } header.ProtoId = reader.ReadObjectGuid_(true); header.ObjectId = reader.ReadObjectGuid_(true); header.GameObjectType = (ObjectType)reader.ReadUInt32(); if (!header.ProtoId.IsProto()) { header.propCollectionItems = reader.ReadInt16(); // Actually not really used anymore } int bitmapLength = (int)Enum.Parse(typeof(Bitmap), header.GameObjectType.ToString()); header.bitmap = new BitArray(reader.ReadBytes(bitmapLength)); return(header); }
public static void GameObjectHeaderWriter(this BinaryWriter writer, GameObjectHeader header) { writer.Write(0x77); //header.version writer.WriteObjectGuid_(header.ProtoId, true); writer.WriteObjectGuid_(header.ObjectId, true); writer.Write((Int32)header.GameObjectType); if (!header.ProtoId.IsProto()) //TODO: ARGS & save as proto ? { writer.Write(header.propCollectionItems); } var bytes = new byte[header.bitmap.Length / 8]; header.bitmap.CopyTo(bytes, 0); writer.Write(bytes); }