/// <summary> /// スナップの追加 /// </summary> public void AddSnap(int precedence, BaseSnap snap, Action callback = null) { PrecedenceSnap pre = new PrecedenceSnap(precedence, snap); snaps.Add(pre); if (callback != null) { callbackDic.Add(pre, callback); } }
/// <summary> /// スナップ /// </summary> public bool Snap(Vector2 point, out Vector2 result) { result = Vector2.zero; if (snaps.Count == 0) { return(false); } float minDistance = float.MaxValue; Vector2 sample; PrecedenceSnap snap = null; bool snaped = false; for (int i = 0; i < snaps.Count; ++i) { PrecedenceSnap 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.precedence > snap.precedence) { result = sample; snap = e; minDistance = (sample - point).magnitude; snaped = true; } else if (snap.precedence == e.precedence) { //距離を測る float distance = (sample - point).magnitude; if (minDistance > distance) { result = sample; snap = e; minDistance = distance; snaped = true; } } } } prevSnap = snap; return(snaped); }