Exemplo n.º 1
0
 private void Awake()
 {
     mf          = GetComponent <MeshFilter>();
     snaps       = new List <PrioritySnap>();
     callbackDic = new Dictionary <PrioritySnap, Action>();
     prevSnap    = null;
 }
Exemplo n.º 2
0
        /// <summary>
        /// スナップの追加
        /// </summary>
        public void AddSnap(int priority, BaseSnap snap, Action callback = null)
        {
            PrioritySnap pSnap = new PrioritySnap(priority, snap);

            snaps.Add(pSnap);
            if (callback != null)
            {
                callbackDic.Add(pSnap, callback);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 補助線への座標のスナップ
        /// </summary>
        public bool Snap(Vector2 point, out Vector2 result)
        {
            PrioritySnap snap = Snap(snaps, point, out result);

            if (snap != null)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 座標のスナップ。スナップした要素を返す
        /// </summary>
        private PrioritySnap Snap(List <PrioritySnap> snaps, Vector2 point, out Vector2 result)
        {
            result = Vector2.zero;

            if (snaps.Count == 0)
            {
                return(null);
            }
            float        minDistance = float.MaxValue;
            Vector2      sample;
            PrioritySnap snap   = null;
            bool         snaped = false;

            for (int i = 0; i < snaps.Count; ++i)
            {
                PrioritySnap e = snaps[i];
                if (e.snap.Snap(point, out sample))
                {
                    if (snap == null)
                    {
                        result      = sample;
                        snap        = e;
                        minDistance = (sample - point).magnitude;
                        snaped      = true;
                    }
                    else if (e.priority > snap.priority)
                    {
                        result      = sample;
                        snap        = e;
                        minDistance = (sample - point).magnitude;
                        snaped      = true;
                    }
                    else if (snap.priority == e.priority)
                    {
                        //距離を測る
                        float distance = (sample - point).magnitude;
                        if (minDistance > distance)
                        {
                            result      = sample;
                            snap        = e;
                            minDistance = distance;
                            snaped      = true;
                        }
                    }
                }
            }
            return(snap);
        }
Exemplo n.º 5
0
        /// <summary>
        /// スナップの追加
        /// </summary>
        public void AddSnap(int priority, BaseSnap snap, Action callback = null)
        {
            PrioritySnap pSnap = new PrioritySnap(priority, snap);

            snaps.Add(pSnap);
            addSnaps.Add(pSnap);
            if (callback != null)
            {
                addSnapCallbackDic.Add(pSnap, callback);
            }

            //表示
            if (show)
            {
                Show();
            }
        }