private static void _BindTransform(ref NetworkObserved observed) { var transform = (Transform)observed.component; Serializer serializer = delegate(BitStream stream, NetworkMessageInfo info) { if (stream.isReading) { transform.localPosition = stream.ReadVector3(); transform.localRotation = stream.ReadQuaternion(); transform.localScale = stream.ReadVector3(); } else { stream.WriteVector3(transform.localPosition); stream.WriteQuaternion(transform.localRotation); stream.WriteVector3(transform.localScale); } }; observed.serializeProxy = serializer; observed.serializeOwner = serializer; observed.serializeHandover = serializer; observed.serializeCellProxy = serializer; }
public static void DefaultBinder(ref NetworkObserved observed) { Type type = observed.component.GetType(); observed.serializeProxy = CreateSerializer(observed.component, type, EVENT_SERIALIZE_PROXY); observed.serializeOwner = CreateSerializer(observed.component, type, EVENT_SERIALIZE_OWNER); observed.serializeHandover = CreateSerializer(observed.component, type, EVENT_SERIALIZE_HANDOVER); observed.serializeCellProxy = CreateSerializer(observed.component, type, EVENT_SERIALIZE_CELLPROXY); }
private static void _BindRigidbody(ref NetworkObserved observed) { var rigidbody = (Rigidbody)observed.component; Serializer serializer = delegate(BitStream stream, NetworkMessageInfo info) { if (stream.isReading) { float transitTime = (float)(Network.time - info.timestamp); Vector3 newPos = stream.ReadVector3(); Quaternion newRot = stream.ReadQuaternion(); Vector3 newVel = stream.ReadVector3(); Vector3 angVel = stream.ReadVector3(); newRot.eulerAngles += angVel * transitTime; rigidbody.angularVelocity = angVel; Vector3 gravity = rigidbody.useGravity ? Physics.gravity : Vector3.zero; newPos += newVel * transitTime + gravity * transitTime * transitTime * 0.5f; newVel += gravity * transitTime; if ((rigidbody.position - newPos).sqrMagnitude >= RIGIDBODY_POS_MAXSQRERROR) { rigidbody.position = newPos; } if ((rigidbody.velocity - newVel).sqrMagnitude >= RIGIDBODY_VEL_MAXSQRERROR) { rigidbody.velocity = newVel; } if (Quaternion.Angle(rigidbody.rotation, newRot) >= RIGIDBODY_ROT_MAXERROR) { rigidbody.rotation = newRot; } } else { stream.WriteVector3(rigidbody.position); stream.WriteQuaternion(rigidbody.rotation); stream.WriteVector3(rigidbody.velocity); stream.WriteVector3(rigidbody.angularVelocity); } }; observed.serializeProxy = serializer; observed.serializeOwner = serializer; observed.serializeHandover = serializer; observed.serializeCellProxy = serializer; }
private void _CheckList() { if (_list == null || _list.Length != observedList.Length) { _list = new uLink.NetworkObserved[observedList.Length]; for (int i = 0; i < observedList.Length; i++) { _list[i] = new uLink.NetworkObserved(observedList[i]); } } else { for (int i = 0; i < observedList.Length; i++) { _list[i].UpdateBinding(observedList[i]); } } }
private static void _BindAnimation(ref NetworkObserved observed) { var animation = (Animation)observed.component; Serializer serializer = delegate(BitStream stream, NetworkMessageInfo info) { if (stream.isReading) { float transitTime = (float)(Network.time - info.timestamp); foreach (AnimationState state in animation) { state.enabled = stream.ReadBoolean(); float newTime = stream.ReadSingle() + transitTime; state.speed = stream.ReadSingle(); state.weight = stream.ReadSingle(); if (Mathf.Abs(state.time - newTime) >= ANIMATION_TIME_MAXERROR) { state.time = newTime; } } } else { foreach (AnimationState state in animation) { stream.WriteBoolean(state.enabled); stream.WriteSingle(state.time); stream.WriteSingle(state.speed); stream.WriteSingle(state.weight); } } }; observed.serializeProxy = serializer; observed.serializeOwner = serializer; observed.serializeHandover = serializer; observed.serializeCellProxy = serializer; }