/// <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);
 }