private void HandleNoitificationSelected(InfoCardController notification) { if (notification == null) { m_gesturePanel.gameObject.SetActive(false); } else { m_gesturePanel.gameObject.SetActive(true); RectTransform notificationRect = (RectTransform)notification.transform; m_actionRect.position = new Vector3(notificationRect.position.x, m_actionRect.position.y, m_actionRect.position.z); } }
private void handleInfoCardPress(InfoCardController pressed) { if (m_activeCard == pressed) { pressed.SetState(false); m_activeCard = null; } else { if (m_activeCard != null) { //RemoveNotification(m_activeCard); m_activeCard.SetState(false); } pressed.SetState(true); m_activeCard = pressed; } if (OnNotificationSelected != null) { OnNotificationSelected(m_activeCard); } }
void Start() { if (m_avatars.Length != m_notificationText.Length) { Debug.LogError("Amount of avatars not consistent with notifications texts"); } else { float spacing = m_notificationGrid.GetComponent <HorizontalLayoutGroup>().spacing; float totalWidth = (m_avatars.Length - 1) * spacing; GameObject[] cards = new GameObject[m_avatars.Length]; for (int i = 0; i < m_avatars.Length; i++) { cards[i] = Instantiate(m_notificationPrefab); cards[i].transform.SetParent(m_notificationGrid.transform, false); } Canvas.ForceUpdateCanvases(); for (int i = 0; i < m_avatars.Length; i++) { GameObject newNotification = cards[i]; RectTransform newTransform = (RectTransform)newNotification.transform; totalWidth += newTransform.sizeDelta.x; InfoCardController controller = newNotification.GetComponent <InfoCardController>(); controller.id = i; controller.m_avatarImage.sprite = m_avatars[i]; controller.m_notificationText.text = m_notificationText[i]; controller.OnInfoCardClicked += handleInfoCardPress; } RectTransform gridRect = (RectTransform)m_notificationGrid.transform; Vector2 newSize = new Vector2(totalWidth, gridRect.sizeDelta.y); gridRect.sizeDelta = newSize; } }
public void RemoveNotification(InfoCardController controller) { if (m_activeCard == controller) { m_activeCard = null; } RectTransform controllerRect = (RectTransform)controller.transform; // Hack, no easy way to check it's size since it's collapsed float removedWidth = 250f + m_notificationGrid.GetComponent <HorizontalLayoutGroup>().spacing; controller.OnRemoveAnimationFinished += (_) => { RectTransform gridRect = (RectTransform)m_notificationGrid.transform; Vector2 newSize = new Vector2(gridRect.sizeDelta.x - removedWidth, gridRect.sizeDelta.y); Vector3 newPos = new Vector3(Mathf.Min(Mathf.Max(gridRect.localPosition.x, 0), gridRect.localPosition.x + removedWidth), gridRect.localPosition.y, gridRect.localPosition.z); gridRect.sizeDelta = newSize; gridRect.localPosition = newPos; Destroy(controller.gameObject); }; controller.StartRemove(); OnNotificationSelected(null); }