using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.Networking; namespace UltimateWater { [RequireComponent(typeof(Water))] [AddComponentMenu("Ultimate Water/Network Synchronization", 2)] public class NetworkWater : NetworkBehaviour { [SyncVar] private float _Time; private Water _Water; public float Network_Time { get { return _Time; } [param: In] set { SetSyncVar(value, ref _Time, 1u); } } private void Awake() { _Water = GetComponent(); if (_Water == null) { base.enabled = false; Debug.LogWarning("[Water] component not assigned to [Network Water]"); } } private void Update() { if (base.isServer) { Network_Time = Time.time; } else { Network_Time = _Time + Time.deltaTime; } _Water.Time = _Time; } private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { if (forceAll) { writer.Write(_Time); return true; } bool flag = false; if ((base.syncVarDirtyBits & 1) != 0) { if (!flag) { writer.WritePackedUInt32(base.syncVarDirtyBits); flag = true; } writer.Write(_Time); } if (!flag) { writer.WritePackedUInt32(base.syncVarDirtyBits); } return flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { if (initialState) { _Time = reader.ReadSingle(); return; } int num = (int)reader.ReadPackedUInt32(); if ((num & 1) != 0) { _Time = reader.ReadSingle(); } } } }