/// <summary> /// Checks to send animator data from server to clients. /// </summary> private void CheckSendToServer() { if (!_isActive) { return; } //Cannot send to server if not client if (!base.isClient) { return; } //Cannot send to server if not client authoritative. if (!_clientAuthoritative) { return; } //Cannot send if don't have authority. if (!base.hasAuthority) { return; } //Not enough time passed to send. if (Time.time < _nextClientSendTime) { return; } _nextClientSendTime = Time.time + _synchronizeInterval; /* If there are updated parameters to send. * Don't really need to worry about mtu here * because there's no way the sent bytes are * ever going to come close to the mtu * when sending a single update. */ if (AnimatorUpdated(out byte[] updatedBytes)) { FlexNetworkAnimatorManager.SendToServer(ReturnAnimatorUpdate(updatedBytes)); } }
/// <summary> /// Checks to send animator data from server to clients. /// </summary> private void CheckSendToClients() { if (!_isActive) { return; } //Cannot send to clients if not server. if (!base.isServer) { return; } //Not enough time passed to send. if (Time.time < _nextServerSendTime) { return; } bool sendFromServer; //If client authoritative. if (_clientAuthoritative) { //If no owner then send from server. if (base.connectionToClient == null) { sendFromServer = true; } //Somehow has ownership else { //But no data has been received yet, so cannot send. if (_updatesFromClients.Count == 0) { return; } else { sendFromServer = false; } } } //Not client authoritative, always send from server. else { sendFromServer = true; } //Cannot send yet. if (Time.time < _nextServerSendTime) { return; } _nextServerSendTime = Time.time + _synchronizeInterval; bool sendToAll = (_networkVisibility == null); /* If client authoritative then then what was received from clients * if data exist. */ if (!sendFromServer) { for (int i = 0; i < _updatesFromClients.Count; i++) { if (sendToAll) { FlexNetworkAnimatorManager.SendToAll(_updatesFromClients[i]); } else { foreach (KeyValuePair <int, NetworkConnection> item in _networkVisibility.netIdentity.observers) { FlexNetworkAnimatorManager.SendToObserver(item.Value, _updatesFromClients[i]); } } } _updatesFromClients.Clear(); } //Otherwise send what's changed. else { if (AnimatorUpdated(out byte[] updatedBytes)) { if (sendToAll) { FlexNetworkAnimatorManager.SendToAll(ReturnAnimatorUpdate(updatedBytes)); } else { foreach (KeyValuePair <int, NetworkConnection> item in _networkVisibility.netIdentity.observers) { FlexNetworkAnimatorManager.SendToObserver(item.Value, ReturnAnimatorUpdate(updatedBytes)); } } } } }
protected virtual void OnDisable() { FlexNetworkAnimatorManager.RemoveFromActive(this); }
protected virtual void OnEnable() { FlexNetworkAnimatorManager.AddToActive(this); }