private void AddCard(UnityCard card) { if (card == null) { return; } CardZone cardZone = CardZones.Last(); var cardModel = Instantiate(cardModelPrefab, cardZone.transform).GetOrAddComponent <CardModel>(); cardModel.Value = card; OnAddCardModel(cardZone, cardModel); }
private void AddCardZone() { var cardZone = Instantiate(cardZonePrefab, layoutContent).GetOrAddComponent <CardZone>(); cardZone.type = CardZoneType.Vertical; cardZone.scrollRectContainer = scrollRect; cardZone.DoesImmediatelyRelease = true; cardZone.OnLayout = Consolidate; cardZone.OnAddCardActions.Add(OnAddCardModel); cardZone.OnRemoveCardActions.Add(OnRemoveCardModel); CardZones.Add(cardZone); cardZone.GetComponent <VerticalLayoutGroup>().spacing = CardZonePrefabSpacing * (CardGameManager.PixelsPerInch * CardGameManager.Current.CardSize.Y / CardPrefabHeight); }
public void FocusScrollRectOn(CardModel cardModel) { if (cardModel == null || cardModel.ParentCardZone == null) { return; } int cardZoneIndex = CardZones.IndexOf(cardModel.ParentCardZone); if (cardZoneIndex > 0 && cardZoneIndex < CardZones.Count) { scrollRect.horizontalNormalizedPosition = CardZones.Count > 1 ? cardZoneIndex / (CardZones.Count - 1f) : 0f; } }
private void Consolidate() { HashSet <Transform> seen = new HashSet <Transform>(); List <Transform> cards = new List <Transform>(); foreach (Transform cardZoneTransform in CardZones.Select(cardZone => cardZone.transform)) { for (var i = 0; i < cardZoneTransform.childCount; i++) { Transform current = cardZoneTransform.GetChild(i); if (seen.Contains(current)) { continue; } cards.Add(current); var cardModel = current.GetComponent <CardModel>(); if (cardModel != null && cardModel.PlaceHolder != null) { seen.Add(cardModel.PlaceHolder); } seen.Add(current); } } for (var i = 0; i < cards.Count; i++) { Transform card = cards[i]; if (i / CardsPerZone >= CardZones.Count) { AddCardZone(); } Transform cardZone = CardZones[i / CardsPerZone].transform; if (card.parent != cardZone) { card.SetParent(cardZone); } int cardZoneIndex = i % CardsPerZone; if (card.GetSiblingIndex() != cardZoneIndex) { card.SetSiblingIndex(cardZoneIndex); } } for (int i = CardZones.Count - 1; i > 0; i--) { if (CardZones[i].transform.childCount != 0) { break; } GameObject cardZone = CardZones[i].gameObject; CardZones.RemoveAt(i); Destroy(cardZone); } if (CardZones.Count * CardsPerZone == cards.Count) { AddCardZone(); } Resize(); }