Пример #1
0
        public static void Write(EndianBinaryWriter w, Metadata m)
        {
            if (m == null)
            {
                w.Write((byte)0x7F);
                return;
            }
            foreach (MetaField mf in m.Fields.Values)
            {
                w.Write((byte)((int)mf.Type << 5 | mf.ID));
                switch (mf.Type)
                {
                case MetaType.Byte:
                    w.Write(mf.Byte);
                    break;

                case MetaType.Short:
                    w.Write(mf.Short);
                    break;

                case MetaType.Int:
                    w.Write(mf.Int);
                    break;

                case MetaType.Float:
                    w.Write(mf.Float);
                    break;

                case MetaType.String:
                    Packet.WriteString8(w, mf.String);
                    break;

                case MetaType.Item:
                    //when this is true, we can remove that parameter
                    SlotItem.Write(w, mf.Item);
                    break;

                case MetaType.Vector:
                    w.Write(mf.Vector.X);
                    w.Write(mf.Vector.Y);
                    w.Write(mf.Vector.Z);
                    break;

                case MetaType.VectorF:
                    w.Write((float)mf.VectorF.X);
                    w.Write((float)mf.VectorF.Y);
                    w.Write((float)mf.VectorF.Z);
                    break;

                default:
                    throw new NotImplementedException();
                }
            }
            w.Write((byte)0x7F);
        }