bool SerializeStaticField(StaticSnapshotField field, NetBuffer buffer, DeltaSnapshot prev) { // Attempt to delta compress if (prev != null && !field.NeverCompress) { if (field.Type == SnapshotFieldType.Primitive) { // If the field in the last acknowledged snapshot is the same as // what were sending, skip it object prevField; if (prev.StaticFields.TryGetValue(field.Id, out prevField)) { if (field.Value.Equals(prevField)) { return(false); } } } else if (field.Type == SnapshotFieldType.Trigger) { // If the trigger was never activated, dont send. // Receiving end assumes that the trigger is zero when not received. Trigger ct = (Trigger)field.Value; if (ct.Iterations == 0) { return(false); } } } // Write field id buffer.Write(field.Id); return(SerializeField(field, buffer, prev)); }
protected StaticSnapshotField AddCustomField(CustomSnapshot child) { if (IsReady) { throw new InvalidOperationException("Cannot add static snapshot field after initialization!"); } ushort id = currentFieldId++; StaticSnapshotField field = new StaticSnapshotField(this, id, SnapshotFieldType.Custom, child); staticFields.Add(id, field); return(field); }
protected StaticSnapshotField AddPrimitiveField <T>(T defaultValue = default(T)) where T : struct { if (IsReady) { throw new InvalidOperationException("Cannot add static snapshot field after initialization!"); } ushort id = currentFieldId++; SnapshotPrimitiveType primType = GetPrimitiveType(defaultValue.GetType()); StaticSnapshotField field = new StaticSnapshotField(this, id, SnapshotFieldType.Primitive, defaultValue, primType); staticFields.Add(id, field); return(field); }