// TODO: Replace with vanilla call.
        private void AddVisibleFromNear(Network.Networkable net, Group additionalGroup, List <Group> groupsVisible)
        {
            if (additionalGroup == null)
            {
                return;
            }
            List <Group> obj = Pool.GetList <Group>();

            net.sv.visibility.GetVisibleFromNear(additionalGroup, obj);
            for (int i = 0; i < obj.Count; i++)
            {
                Group item = obj[i];
                if (!groupsVisible.Contains(item))
                {
                    groupsVisible.Add(item);
                }
            }
            Pool.FreeList(ref obj);
        }
        // TODO: Replace with vanilla call.
        private void UpdateSubscriptions(Network.Networkable net)
        {
            if (net.subscriber == null)
            {
                return;
            }

            List <Group> obj  = Pool.GetList <Group>();
            List <Group> obj2 = Pool.GetList <Group>();
            List <Group> obj3 = Pool.GetList <Group>();

            net.sv.visibility.GetVisibleFromFar(net.group, obj3);
            AddVisibleFromNear(net, net.secondaryGroup, obj3);
            net.subscriber.subscribed.Compare(obj3, obj, obj2, null);
            for (int i = 0; i < obj2.Count; i++)
            {
                Group group = obj2[i];
                net.subscriber.Unsubscribe(group);
                if (net.handler != null)
                {
                    net.handler.OnNetworkGroupLeave(group);
                }
            }
            for (int j = 0; j < obj.Count; j++)
            {
                Group group2 = obj[j];
                net.subscriber.Subscribe(group2);
                if (net.handler != null)
                {
                    net.handler.OnNetworkGroupEnter(group2);
                }
            }
            Pool.FreeList(ref obj);
            Pool.FreeList(ref obj2);
            Pool.FreeList(ref obj3);
        }