private void OnSerializeSparkView(SparkStream stream, SparkMessageInfo info) { if (stream.IsWriting) { if ((sparkView.IsLocalPlayer && syncer == Syncer.LocalPlayer) || (SparkManager.instance.IsMasterPlayer && syncer == Syncer.MasterPlayer)) { stream.SendNext(transform.position); stream.SendNext(transform.localScale); stream.SendNext(transform.eulerAngles); } } else { previousPosition = transform.position; nextPosition = stream.ReceiveNext <Vector3>(); previousScale = transform.localScale; nextScale = stream.ReceiveNext <Vector3>(); previousRotation = transform.eulerAngles; nextRotation = stream.ReceiveNext <Vector3>(); syncTime = 0f; syncDelay = Time.time - lastSynchronizationTime; lastSynchronizationTime = Time.time; } }
private void Update() { if (!SparkManager.instance.isAvailable) { return; } sendTime += Time.deltaTime; if (sendTime >= 1f / sendRate) { sendTime = 0; foreach (SparkBehaviour behaviour in ObservedBehaviours) { if (behaviour.netGuid == Guid.Empty) { continue; } SparkStream stream; if (!streams.TryGetValue(behaviour.netGuid, out stream)) { stream = new SparkStream(behaviour.netGuid, observeMethod, true); streams[behaviour.netGuid] = stream; } SendEvent_OnSerializeSparkView(behaviour, stream, info); stream.Call("Finish", info); } } }
/// <summary> /// Raises the packet event. /// </summary> /// <param name="packet">Packet.</param> public void OnPacket(RTPacket packet) { switch ((SparkManager.OpCode)Enum.ToObject(typeof(SparkManager.OpCode), packet.OpCode)) { case SparkManager.OpCode.Sync: SparkStream stream = SparkExtensions.Deserialize <SparkStream>(packet.Data.GetString(1)); SparkMessageInfo info = SparkExtensions.Deserialize <SparkMessageInfo>(packet.Data.GetString(2)); foreach (SparkBehaviour behaviour in ObservedBehaviours) { if (stream.NetGuid == behaviour.netGuid) { SendEvent_OnSerializeSparkView(behaviour, stream, info); } } break; case SparkManager.OpCode.SparkView_RPC: // RPC handling SparkRPC rpc = SparkExtensions.Deserialize <SparkRPC>(packet.Data.GetString(1)); foreach (SparkBehaviour behaviour in ObservedBehaviours) { if (behaviour.netGuid == rpc.NetGuid) { behaviour.Call(rpc.MethodName, rpc.Parameters); } } break; case SparkManager.OpCode.SparkView_LocalRPC: SparkRPC localRpc = SparkExtensions.Deserialize <SparkRPC>(packet.Data.GetString(1)); if (localRpc.NetGuid == netGuid) { this.Call(localRpc.MethodName, localRpc.Parameters); } break; } }
// Serialize private void OnSerializeSparkView(SparkStream stream, SparkMessageInfo info) { }
/// <summary> /// Sends the event on serialize spark view. /// </summary> /// <param name="behaviour">Behaviour.</param> /// <param name="stream">Stream.</param> /// <param name="info">Info.</param> private void SendEvent_OnSerializeSparkView(SparkBehaviour behaviour, SparkStream stream, SparkMessageInfo info) { behaviour.Call("OnSerializeSparkView", stream, info); }