Ejemplo n.º 1
0
        private async void Start()
        {
            Assert.IsNotNull(cardViewPrefab);
            Assert.IsNotNull(playerHandView);
            Assert.IsNotNull(statRandomizerView);
            Assert.IsNotNull(dropTarget);

            int cardsCount                   = Random.Range(minCardsCount, maxCardsCount + 1);
            var textureLoader                = new WebTextureLoader(textureRequestsTimeoutSec);
            var randomTextureLoader          = new RandomTextureLoader(textureLoader, "https://picsum.photos/{1}/{0}");
            IEnumerable <Texture2D> textures = await LoadTextures(randomTextureLoader, cardsCount, CancellationToken.None);

            var cardSpriteFactory        = new CardSpriteFactory(cardIconHeight, cardIconWidth, pixelsPerUnit);
            IReadOnlyList <Sprite> icons = textures.Select(cardSpriteFactory.Create).ToList();
            var cardGenerator            = new CardGenerator(cardSettings);
            IEnumerable <Card> cards     = cardGenerator.Create(icons.Count);
            var cardViewFactory          = new CardViewFactory(cardViewPrefab, icons);

            hand = new PlayerHand(cards, cardSettings);
            playerHandView.SetModel(hand.Cards, cardViewFactory);

            statRandomizer = new UnityStatRandomizer(cardSettings, hand.Cards);
            statRandomizerView.SetModel(statRandomizer);
            dropTarget.SetCardViews(playerHandView.CardViews);
        }
Ejemplo n.º 2
0
        public void SetModel([NotNull] IReadOnlyReactiveCollection <Card> cards, [NotNull] CardViewFactory cardViewFactory)
        {
            if (cards == null)
            {
                throw new ArgumentNullException(nameof(cards));
            }
            if (cardViewFactory == null)
            {
                throw new ArgumentNullException(nameof(cardViewFactory));
            }

            ClearModel();
            model = cards;
            removalCancellation = new CancellationTokenSource();

            foreach (Card card in cards)
            {
                SubscribeToCard(card);
                CardView view = cardViewFactory.Create(card);
                cardViews.Add(card, view);
            }

            cards.ObserveRemove().Subscribe(OnRemoved).AddTo(collectionSubscriptions);
            PositionCards();
        }