95 lines
1.6 KiB
C#
95 lines
1.6 KiB
C#
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<Water>();
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
}
|