Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }