/// <summary> /// Writes the fields to be sync on an outgoing message. /// </summary> /// <param name="message">The outgoing message</param> /// <param name="forceAllFields">Indicates if all fields must be forced to sync</param> internal void WriteSyncMessage(OutgoingMessage message, bool forceAllFields = false) { if (forceAllFields) { this.pendingSyncFields = RoomFieldsFlags.All; } else if (this.CustomProperties.NeedSync) { this.pendingSyncFields |= RoomFieldsFlags.CustomProperties; } this.WriteToMessage(message, this.pendingSyncFields); this.pendingSyncFields = RoomFieldsFlags.None; }
/// <summary> /// Writes the specified fields to an outgoing message. /// </summary> /// <param name="message">The outgoing message</param> /// <param name="includedFields">Indicates the fields that must synchronized</param> protected void WriteToMessage(OutgoingMessage message, RoomFieldsFlags includedFields) { message.Write((byte)includedFields); if (includedFields.HasFlag(RoomFieldsFlags.IsVisible)) { message.Write(this.IsVisible); } if (includedFields.HasFlag(RoomFieldsFlags.MaxPlayers)) { message.Write(this.MaxPlayers); } if (includedFields.HasFlag(RoomFieldsFlags.CustomProperties)) { this.CustomProperties.WriteToMessage(message); } }
/// <summary> /// Called when one or more properties are refreshed. /// </summary> /// <param name="changedFields">Flag indicating what fields have been changed</param> protected virtual void OnChange(RoomFieldsFlags changedFields) { }