public void AddRemoveEmailEvent(GameObject ob, RectTransform r, string email, TournamentInvite replaced = null) { if (!invitedEmails.Contains(email)) { invitedEmails.Add(email); } if (replaced != null) { Destroy(replaced.gameObject); inviteEmailTexts.Remove(replaced); } ob.transform.Find("EmailInput/Remove").GetComponent <Button>().onClick.AddListener(() => { Action removeAction = () => { Destroy(ob); GameObject newOb = Instantiate(TacoConfig.InviteInputPrefab, Vector3.zero, Quaternion.identity, emailsPanel) as GameObject; RectTransform newRect = newOb.GetComponent <RectTransform>(); newRect.localPosition = r.localPosition; newRect.sizeDelta = r.sizeDelta; List <TournamentInvite> nearPrevs = inviteEmailTexts.Where(x => x.gameObject.transform.position.y > newOb.transform.position.y).ToList(); List <TournamentInvite> nearNexts = inviteEmailTexts.Where(x => x.gameObject.transform.position.y < newOb.transform.position.y).ToList(); TournamentInvite newInvite = newOb.GetComponent <TournamentInvite>(); invitedEmails.Remove(email); newInvite.reservedEmails = invitedEmails; newInvite.isInManage = true; if (nearPrevs.Count > 0) { TournamentInvite newPrev = nearPrevs.OrderBy(x => Mathf.Abs(x.gameObject.transform.position.y - newOb.transform.position.y)).First(); newInvite.prev = newPrev; newPrev.next = newInvite; } if (nearNexts.Count > 0) { TournamentInvite newNext = nearNexts.OrderBy(x => Mathf.Abs(x.gameObject.transform.position.y - newOb.transform.position.y)).First(); newInvite.next = newNext; newNext.prev = newInvite; } inviteEmailTexts.Add(newInvite); }; TacoManager.OpenModalRemovePlayerConfirmPanel(email, removeAction); }); }