// ----------------- public int HitTest(List <TouchControl> controlList, Vector2 screenPos, Camera cam, int maxHits = 8, float fingerRadPx = 0, TouchControlFilterFunc filter = null) { if (maxHits < 1) { maxHits = 1; } this.Clear(); this.EnsureCapacity(maxHits); for (int ci = 0; ci < controlList.Count; ++ci) { TouchControl c = controlList[ci]; if ((c == null) || ((filter != null) && !filter(c))) { continue; } if (!c.HitTest(screenPos, cam, fingerRadPx, this.tempHit)) { continue; } int insertPos = -1; for (int ti = 0; ti < this.GetList().Count; ++ti) { if (this.tempHit.IsHigherThan(this.GetList()[ti])) { insertPos = ti; break; } } // Add new hit to the list... if (this.GetUsedCount() < maxHits) { this.GetNewObject(insertPos).CopyFrom(this.tempHit); } // If the list is fulll recycle the last hit... else if (insertPos >= 0) { Hit lastHit = this.GetList()[maxHits - 1]; this.GetList().RemoveAt(maxHits - 1); this.GetList().Insert(insertPos, lastHit); lastHit.CopyFrom(this.tempHit); } } return(this.GetUsedCount()); }