public void AddItem(BobJoyUIItem item)
 {
     if (m_list.Contains(item))
     {
         LogModule.DebugLog(string.Format("{0} has already been added", item.name));
         return;
     }
     m_list.Add(item);
     item.SetUINav(this);
 }
        private void NotifyUIChange(BobJoyUIItem _last)
        {
            Vector3 offset   = m_current.GetOffSetToFit();
            UIPanel curPanel = UIPanel.Find(m_current.transform, false);

            if (curPanel.GetComponent <UIDraggablePanel>() == null || offset.sqrMagnitude < 0.001f)
            {    //ui项目所在Panel不可以拖拽 所以直接移动到ui所在位置
                FitCursor();
                return;
            }
            SpringPanel sp = SpringPanel.Begin(curPanel.gameObject, curPanel.gameObject.transform.localPosition + offset, 100);

            sp.onFinished = FitCursor;
            if (OnUIChanged != null)
            {
                OnUIChanged(_last, m_current);
            }
        }
        //获取对应方向上的邻居
        private BobJoyUIItem Get(Vector2 direction)
        {
            if (m_current == null || m_current.gameObject.activeInHierarchy == false)
            {
                return(null);
            }
            Transform    _curTrans  = m_current.transform;
            Vector3      _localDir  = _curTrans.TransformDirection(direction);
            Vector3      _curCenter = m_current.Center;
            float        _min       = float.MaxValue;
            BobJoyUIItem _next      = null;

            for (int i = 0; i < m_list.Count; ++i)
            {
                BobJoyUIItem _item = m_list[i];
                if (_item == m_current)
                {
                    continue;
                }
                if (_item.gameObject.activeInHierarchy == false)
                {
                    continue;
                }

                //如果大于45度,则排除
                Vector3 _dir = _item.Center - _curCenter;
                float   dot  = Vector3.Dot(_localDir.normalized, _dir.normalized);
                if (dot < 0.707f)
                {
                    continue;
                }

                float _sqrMag = _dir.sqrMagnitude;
                if (_sqrMag > _min)
                {
                    continue;
                }
                _next = _item;
                _min  = _sqrMag;
            }
            return(_next);
        }
        //设置当前项目
        private BobJoyUIItem SetCurrent(BobJoyUIItem item)
        {
            BobJoyUIItem _last = m_current;

            if (m_list.Contains(item) && item.gameObject.activeInHierarchy == true)
            {
                m_current = item;
                NotifyUIChange(_last);
                return(m_current);
            }

            if (item != null)
            {
                if (!m_list.Contains(item))
                {
                    LogModule.DebugLog(string.Format("{0} is not in the list {1}", item.name, this.name));
                }
                if (item.gameObject.activeInHierarchy == false)
                {
                    LogModule.DebugLog(string.Format("{0} is not active", item.name));
                }
            }

            for (int i = 0; i < m_list.Count; ++i)
            {
                BobJoyUIItem _item = m_list[i];
                if (_item.gameObject.activeInHierarchy == false)
                {
                    continue;
                }
                m_current = _item;
                break;
            }
            NotifyUIChange(_last);
            return(m_current);
        }
 public void RemoveItem(BobJoyUIItem item)
 {
     m_list.Remove(item);
 }