Exemple #1
0
        void ReadField(NetBuffer buffer, SnapshotField field)
        {
            // Read field type
            SnapshotFieldType fieldType = (SnapshotFieldType)buffer.ReadByte();

            // Read field data
            if (fieldType == SnapshotFieldType.Primitive)
            {
                // Read primitive
                SnapshotPrimitiveType primType = (SnapshotPrimitiveType)buffer.ReadByte();
                object v = ReadPrimitive(buffer, primType);

                if (field != null)
                {
                    field.Value = v;
                }
            }
            else if (fieldType == SnapshotFieldType.Trigger)
            {
                // Read trigger
                byte it = buffer.ReadByte();

                if (field != null)
                {
                    Trigger t = (Trigger)field.Value;
                    t.Iterations = it;
                }
            }
            else if (fieldType == SnapshotFieldType.Snapshot)
            {
                // Read nested snapshot
                Snapshot ns;
                if (field != null)
                {
                    ns = (Snapshot)field.Value;
                }
                else
                {
                    // Make temp snapshot to just read ns
                    ns = new TempSnapshot(snapshotSystem);
                }

                ns.Deserialize(buffer);
            }
            else if (fieldType == SnapshotFieldType.Custom)
            {
                // Read custom snapshot
                // Read snapshot size
                ushort bufferSize = buffer.ReadUInt16();

                if (field != null)
                {
                    // Read custom snapshot
                    CustomSnapshot cs = (CustomSnapshot)field.Value;
                    cs.Deserialize(buffer);
                }
                else
                {
                    // Skip buffer
                    buffer.Position += bufferSize;
                }
            }
        }