Example #1
0
    public void CreateQueue()
    {
        bool me = UnityEngine.Random.Range(0, 1f) > 0.5;

        if (Services.data.tutorStep < 2)
        {
            me = true;
        }

        Clear();

        count = cardIcons.Count;//Services.data.tutorStep == 0 ? 2 : cardIcons.Count;

        for (int i = 0; i < count; i++)
        {
            CardItem q = Services.data.GetNewCard(default(CardData), me, 0);
            me = !me;

            int tutorStep = Services.data.tutorStep;

            if (tutorStep == 1)
            {
                q.data = Services.data.game.cards.Find(c => c.id == Services.data.game.config.tutstep[i]);
            }

            Add(q);
        }
    }
Example #2
0
        public override CardItem SetupCardItemViewHolder(CardItem item)
        {
            item.ContainerCard.Click -= ItemClick;
            item.ContainerCard.Click += ItemClick;

            return(item);
        }
Example #3
0
        public override CardItem SetupCardItemViewHolder(CardItem item)
        {
            item.ButtonIcon.SetImageResource(Resource.Drawable.ic_favorite_white_24px);
            ImageViewCompat.SetImageTintList(item.ButtonIcon, FavoriteIconColor);

            return(item);
        }
Example #4
0
        public override void BindCardViewHolder(CardItem holder, int position)
        {
            var item = Items[position];

            holder.Button.Click -= ButtonClick;

            if (_spoilerTags[position])
            {
                holder.Name.Text                  = "SPOILER";
                holder.DetailPrimary.Text         = "Tap view button to show tag";
                holder.DetailSecondary.Visibility = ViewStates.Gone;
                holder.Button.Visibility          = ViewStates.Visible;
                holder.Button.SetTag(Resource.Id.Object_Position, position);
                holder.ContainerCard.Click -= RowClick;
                holder.Button.Click        -= ButtonClick;
                holder.Button.Click        += ButtonClick;
            }
            else
            {
                holder.Name.Text                  = item.Name;
                holder.DetailPrimary.Text         = item.Description;
                holder.DetailSecondary.Visibility = ViewStates.Visible;
                holder.DetailSecondary.Text       = $"{item.Rank}%";
                holder.Button.Visibility          = ViewStates.Gone;

                holder.ContainerCard.SetTag(Resource.Id.Object_Position, position);
                holder.ContainerCard.Click -= RowClick;
                holder.ContainerCard.Click += RowClick;
            }
        }
Example #5
0
        public void AddTagToCardTest()
        {
            //Arrange
            DatabaseSvc testDAL = new DatabaseSvc(_connectionString);


            string tagName = "AddTag Test";
            int    cardId  = _cardId1;


            //Act
            TagItem  testTagHasId = testDAL.AddTagToCard(tagName, cardId);
            CardItem confirmCard  = testDAL.GetCard(_cardId1);

            //Assert
            bool tagAdded = false;

            foreach (TagItem item in confirmCard.Tags)
            {
                if (item.TagName == tagName)
                {
                    tagAdded = true;
                }
            }

            Assert.AreEqual(true, tagAdded, "Confirm tag was added");
        }
Example #6
0
    private void OnClickCardItem(GameObject go)
    {
        CardItem mCardItem = go.GetComponent <CardItem>();

        if (mCurrSelectedCardItem != null)
        {
            mCurrSelectedCardItem.SetTouchStateNone();
            mCurrSelectedCardItem = null;
//            if (!mCurrSelectedCardItem.Equals(mCardItem))
//            {
//                mCurrSelectedCardItem.SetTouchStateNone();
//            }
//            mCardItem.Click();
        }
        else
        {
            mCardItem.Click();
            mCurrSelectedCardItem = mCardItem;
        }


        //MahJongGameAction requestPack = new MahJongGameAction()
        //{
        //    Action = MahJongActionType.PlayCard
        //};
        //requestPack.Cards = new List<Card>();
        //requestPack.Cards.Add(go.GetComponent<CardItem>().getCard);
        //ActionParam actionParam = new ActionParam(requestPack);
        //Net.Instance.Send((int)ActionType.GameAction, onClickCardCallBack, actionParam);
        //SetCardsState(false);
    }
Example #7
0
    private void Awake()
    {
        mCacheTransform = this.transform;
        if (mUIGameModel == null)
        {
            mUIGameModel = UIModelMgr.Instance.GetModel <UIGameModel>();
            mUIGameModel.ValueUpdateEvent += OnValueUpdateEvent;
        }
        mCurrCardItem  = mCacheTransform.FindComponent <CardItem>("CurrCardItem");
        mHandCardList  = mCacheTransform.FindChindComponents <CardItem>("HandCards");
        mDeskCardList  = mCacheTransform.FindChindComponents <CardItem>("DeskCards");
        mCardGroupList = mCacheTransform.FindChindComponents <HandCardGroupItem>("HandCardGroups");

        mOperationEffectItem = mCacheTransform.FindComponent <OperationEffectItem>("OperationEffectItem");

        if (mDirection == DirectionType.bottom)
        {
            mOperationCardGroup = mCacheTransform.FindComponent <Transform>("Operations/OperationCardGroup");
            mOperationItems     = mCacheTransform.FindChindComponents <OperationItem>("Operations");
            mHandCardGroupItems = mCacheTransform.FindChindComponents <HandCardGroupItem>("Operations/OperationCardGroup");
            Array.ForEach <OperationItem>(mOperationItems, p => { UIEventListener.Get(p.gameObject).onClick += OnOperationClick; });  //点击 吃 碰 杠等
            Array.ForEach <HandCardGroupItem>(mHandCardGroupItems, p =>
            {
                p.SetVisible(false);
                UIEventListener.Get(p.gameObject).onClick += OnHandCardGroupClick;
                //UIEventListener.Get(p.gameObject).onDragOver += OnHandCardGroupDrag;
            });
            mOperationCardGroup.SetVisible(false);
            Array.ForEach <CardItem>(mHandCardList, p => { UIEventListener.Get(p.gameObject).onClick += OnClickCardItem; });
            Array.ForEach <CardItem>(mHandCardList, p => { UIEventListener.Get(p.gameObject).onDragOver += OnDragItem; });
            UIEventListener.Get(mCurrCardItem.gameObject).onClick    += OnClickCardItem;
            UIEventListener.Get(mCurrCardItem.gameObject).onDragOver += OnDragItem;
        }
    }
    public bool AddCompareList(CardItem card)
    {
        if (compareList.Count == 0)//翻一张
        {
            compareList.Add(card);
            return(false);
        }

        if (compareList.Count > 0)
        {
            shieldOper?.Invoke(true);
            compareList.Add(card);
            if (compareList[0].ID == card.ID)
            {
                cardDismiss?.Invoke(compareList[0], compareList[1]);
                ClearCompareList();
            }
            else
            {
                cardFlipBack?.Invoke(compareList[0], compareList[1]);
                ClearCompareList();
            }
        }
        return(true);
    }
 public override CardItem SetupCardItemViewHolder(CardItem item)
 {
     item.Button.Visibility = ViewStates.Gone;
     item.Name.SetSingleLine(false);
     item.Name.SetMaxLines(2);
     return(item);
 }
Example #10
0
 public static CardItemDTO ItemToDTO(CardItem todoItem) =>
 new CardItemDTO
 {
     Id          = todoItem.Id,
     Name        = todoItem.Name,
     IsAvailable = todoItem.IsAvailable
 };
Example #11
0
    public void PointerEnterCard(CardItem card)
    {
        if (canOperate)
        {
            if (seletedCards.Contains(card))
            {
                startAdd        = false;
                startRem        = true;
                lastRemovedCard = card;
                seletedCards.Remove(card);
                card.BeingSelect(false);

                if (seletedCards.Contains(lastAddCard) && lastAddCard != null && startRem)
                {
                    seletedCards.Remove(lastAddCard);
                    lastAddCard.BeingSelect(false);
                }
            }
            else
            {
                startAdd    = true;
                startRem    = false;
                lastAddCard = card;
                seletedCards.Add(card);
                card.BeingSelect(true);

                if (!seletedCards.Contains(lastRemovedCard) && lastRemovedCard != null && startAdd)
                {
                    seletedCards.Add(lastRemovedCard);
                    lastAddCard.BeingSelect(true);
                    lastRemovedCard = null;
                }
            }
        }
    }
Example #12
0
        /// <summary>
        /// Return a list of CardItem objects NOT assigned to any deck
        /// </summary>
        /// <returns>List of Cards in deck</returns>
        public List <CardItem> GetAllUnassignedCards()
        {
            List <CardItem> result = new List <CardItem>();

            //Connect to Database
            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                conn.Open();

                //Create sql statement
                string sqlPlayer = "SELECT card.Id, card.UserId, Term, Definition " +
                                   "FROM [Card] " +
                                   $"WHERE card.Id NOT IN (Select CardId from Deck_Card); ";

                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = sqlPlayer;
                cmd.Connection  = conn;
                //Send command to database
                SqlDataReader reader = cmd.ExecuteReader();

                //Pull data off of result set
                while (reader.Read())
                {
                    CardItem card = new CardItem();

                    card.Id         = Convert.ToInt32(reader["Id"]);
                    card.UserID     = Convert.ToInt32(reader["UserId"]);
                    card.Term       = Convert.ToString(reader["Term"]);
                    card.Definition = Convert.ToString(reader["Definition"]);

                    result.Add(card);
                }
            }
            return(result);
        }
Example #13
0
        public ActionResult AddToCart(long productID, int quantity)
        {
            var product = new ProductDAO().GetByID(productID);

            if (Session[CardSession] != null)
            {
                var listExistItem = (List <CardItem>)Session[CardSession];
                if (listExistItem.Exists(x => x.Product.ID == productID))
                {
                    listExistItem.Find(x => x.Product.ID == productID).Quantity += quantity;
                }
                else
                {
                    var item = new CardItem();
                    item.Product  = product;
                    item.Quantity = quantity;
                    listExistItem.Add(item);
                }
                Session[CardSession] = listExistItem;
            }
            else
            {
                var item = new CardItem();
                item.Product  = product;
                item.Quantity = quantity;
                var listNewItem = new List <CardItem>();
                listNewItem.Add(item);
                Session[CardSession] = listNewItem;
            }

            return(RedirectToAction("Index", "Cart"));
        }
Example #14
0
        /// <summary>
        /// Gets Card information based on card Id.  Runs GetAllTagsForCard method also.
        /// </summary>
        /// <param name="id">card id</param>
        /// <returns>CardItem Object</returns>
        public CardItem GetCard(int id)
        {
            CardItem     card = new CardItem();
            const string sql  = "SELECT * FROM [Card] WHERE Id = @Id;";

            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("@Id", id);

                //Send command to database
                SqlDataReader reader = cmd.ExecuteReader();

                //Pull data off of result set
                while (reader.Read())
                {
                    CardItem newCard = new CardItem();

                    newCard.Id         = Convert.ToInt32(reader["Id"]);
                    newCard.UserID     = Convert.ToInt32(reader["UserId"]);
                    newCard.Term       = Convert.ToString(reader["Term"]);
                    newCard.Definition = Convert.ToString(reader["Definition"]);

                    card = newCard;
                }
            }
            card.Tags = GetAllTagsForCard(id);
            return(card);
        }
Example #15
0
 private void Awake()
 {
     mCacheTransform = this.transform;
     mUIGameModel    = UIModelMgr.Instance.GetModel <UIGameModel>();
     mOwnerIcon      = mCacheTransform.FindComponent <UISprite>("HeadIcon/OwnerIcon");
     mZhuangIcon     = mCacheTransform.FindComponent <UISprite>("HeadIcon/ZhuangIcon");
     mHeadIcon       = mCacheTransform.FindComponent <UITexture>("HeadIcon");
     mLabelName      = mCacheTransform.FindComponent <UILabel>("HeadIcon/Name");
     mLabelDes       = mCacheTransform.FindComponent <UILabel>("PlayerCards/LabelDes");
     mCurrCardItem   = mCacheTransform.FindComponent <CardItem>("PlayerCards/CurrCardItem");
     mHandCardItem   = mCacheTransform.FindComponent <HandCardGroupItem>("PlayerCards/HandCards");
     if (mHandCradGroupItems == null)
     {
         mHandCradGroupItems = new List <HandCardGroupItem>();
     }
     mHandCradGroupItems.Add(mCacheTransform.FindComponent <HandCardGroupItem>("PlayerCards/HandCardGroup/CardGroup0"));
     mHandCradGroupItems.Add(mCacheTransform.FindComponent <HandCardGroupItem>("PlayerCards/HandCardGroup/CardGroup1"));
     mHandCradGroupItems.Add(mCacheTransform.FindComponent <HandCardGroupItem>("PlayerCards/HandCardGroup/CardGroup2"));
     mHandCradGroupItems.Add(mCacheTransform.FindComponent <HandCardGroupItem>("PlayerCards/HandCardGroup/CardGroup3"));
     mLabelTotalScore = mCacheTransform.FindComponent <UILabel>("LabelTotalScore");
     mLabelHupai      = mCacheTransform.FindComponent <UILabel>("LabelHuPai");
     mLabelJingPai    = mCacheTransform.FindComponent <UILabel>("LabelJingPai");
     mHuSprite        = mCacheTransform.FindComponent <UISprite>("HuSprite");
     mGunnerSprite    = mCacheTransform.FindComponent <UISprite>("GunnerSprite");
 }
Example #16
0
        public async Task AddItem(Product product, int quantity = 1)
        {
            //TODO: Main issue is that Based on my architecture I nead the card ID
            CardItem line = await this._cardRepository
                            .CardItems
                            .Include(p => p.Product)
                            .Where(c => c.Id == product.Id && !c.IsDeleted)
                            .FirstOrDefaultAsync();

            if (line == null)
            {
                var newLine = new CardItem()
                {
                    Product  = product,
                    Id       = product.Id,
                    Quantity = quantity
                };

                this._cardRepository.Add(newLine);
                await this._cardRepository.SaveChangesAsync();
            }
            else
            {
                line.Quantity += quantity;
            }
        }
        /// <summary>
        /// 获取当前要移动到中心的Itme 需要移动的factor间隔数
        /// </summary>
        /// <param name="targeXPos"></param>
        /// <returns></returns>
        private int GetMoveCureFactorCount(CardItem preCenterItem, CardItem newCenterItem)
        {
            SortItemDepth();
            int factorCount = Mathf.Abs(newCenterItem.RealIndex) - Mathf.Abs(preCenterItem.RealIndex);

            return(Mathf.Abs(factorCount));
        }
    //准备卡牌
    public void PrepareCard()
    {
        int expectedCardNum = Mathf.Min(maxCardNum, data.Count);

        //如果现有的卡牌数不够
        if (curCardNum < expectedCardNum)
        {
            for (int i = curCardNum; i < expectedCardNum; i++)
            {
                if (cardCache.Count > 0)//缓存池没空,就从缓存池里取
                {
                    cardList.Add(cardCache.Dequeue());
                }
                else//缓存池空了,就创建新的
                {
                    C cardItem = CardItem <T, C, V> .Create(prefab, this);

                    cardList.Add(cardItem);
                    cardItem.transform.SetParent(content);
                }
            }
        }
        else//现有的卡牌数大于需要展示的卡牌数
        {
            for (int i = curCardNum - 1; i >= expectedCardNum; i--)
            {
                cardCache.Enqueue(cardList[i]);
                cardList.RemoveAt(i);
            }
        }
        curCardNum = expectedCardNum;
        halfRange  = curCardNum / 2;
    }
        public async Task <CardItem> PatchAsync(CardItem patchInfo, CancellationToken cancelltionToken)
        {
            var card = context.Cards.Update(patchInfo);
            await context.SaveChangesAsync();

            return(card.Entity);
        }
Example #20
0
    LoopListViewItem2 InitScrollView(LoopListView2 listView, int index)
    {
        if (index < 0 || index >= TotalItemCount)
        {
            return(null);
        }

        CardData itemData = GetItemDataByIndex(index);

        if (itemData == null)
        {
            return(null);
        }

        //get a new item. Every item can use a different prefab, the parameter of the NewListViewItem is the prefab’name.
        //And all the prefabs should be listed in ItemPrefabList in LoopListView2 Inspector Setting
        LoopListViewItem2 item       = listView.NewListViewItem("CardItem");
        CardItem          itemScript = item.GetComponent <CardItem>();

        if (item.IsInitHandlerCalled == false)
        {
            item.IsInitHandlerCalled = true;
            itemScript.Init();
        }
        itemScript.SetItemData(itemData, index, true);
        return(item);
    }
Example #21
0
 public override CardItem SetupCardItemViewHolder(CardItem item)
 {
     item.Image.Visibility = ViewStates.Gone;
     item.ContainerCard.SetContentPadding(20, 20, 20, 20);
     item.ButtonIcon.SetImageResource(Resource.Drawable.ic_visibility_white_24px);
     return(item);
 }
Example #22
0
        public override RecyclerView.ViewHolder CreateCustomViewHolder(ViewGroup parent, int viewType)
        {
            if (_viewType == MediaListItemViewType.Compact)
            {
                var card = new CardItem(Context.LayoutInflater.Inflate(
                                            Resource.Layout.View_CardItem_FlatHorizontalCompact,
                                            parent, false));

                SetupButtonClickActions(card);
                SetupRowClickActions(card);

                return(SetupCardItemViewHolder(card));
            }
            if (_viewType == MediaListItemViewType.TitleOnly)
            {
                var card = new CardItem(Context.LayoutInflater.Inflate(
                                            Resource.Layout.View_CardItem_FlatHorizontalTitleOnly,
                                            parent, false));

                SetupRowClickActions(card);

                return(SetupCardItemViewHolder(card));
            }

            return(base.CreateCustomViewHolder(parent, viewType));
        }
Example #23
0
        private void CheckAvailability(string id)
        {
            var cardItem = _context.CardItems.FirstOrDefault(x => x.Id == id);

            if (cardItem != null)
            {
                return;
            }

            var item = _cardService.Find(id);

            if (item.Value == null)
            {
                throw new Exception("Incorrect id");
            }

            var newItem = new CardItem
            {
                Id       = item.Value.Id,
                ImageUrl = item.Value.ImageUrl != null?item.Value.ImageUrl.ToString() : null,   //method
                               ManaCost = item.Value.ManaCost,
                               Name     = item.Value.Name,
                               SetName  = item.Value.SetName
            };

            _context.CardItems.Add(newItem);
            _context.SaveChanges();
        }
Example #24
0
        /// <summary>
        /// 获取卡片主表
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public CardItem GetCardItem(long id)
        {
            CardItem item = null;

            if (string.IsNullOrEmpty(_ConnectionString))
            {
                LogHelper.Log("CardData-GetCardItem:" + "File ERROR");
                return(item);
            }
            try
            {
                LockUtils.LockEnter(_ConnectionString);
                DapperHelper db  = new DapperHelper(this._ConnectionString);
                string       sql = $"select * from carditem where id=@id";
                item = db.QueryFirst <CardItem>(sql, new { id });
            }
            catch (Exception ex)
            {
                LogHelper.Log("CardData-GetCardItem:" + ex.ToString());
            }
            finally
            {
                LockUtils.LockExit(_ConnectionString);
            }
            return(item);
        }
Example #25
0
        public bool UpdateCard(CardItem card, int cardId) //Note: updating tags might be done in views or sql statement can be changed to join tag and card tables (Diana)
        {
            bool wasSuccessful = true;

            //Connect to database
            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                conn.Open();

                //Create SQL statement
                const string sqlUpdateCard = "UPDATE [Card] SET Term = @Term, Definition = @Definition, TagId = @TagId WHERE Id = @Id;";

                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = sqlUpdateCard;
                cmd.Connection  = conn;
                cmd.Parameters.AddWithValue("@Term", card.Term);
                cmd.Parameters.AddWithValue("@Definition", card.Definition);
                cmd.Parameters.AddWithValue("@TagId", 2);
                cmd.Parameters.AddWithValue("@Id", cardId);


                //Send command to database
                int rowsAffected = cmd.ExecuteNonQuery();

                if (rowsAffected == 0)
                {
                    wasSuccessful = false;
                }
            }
            return(wasSuccessful);
        }
Example #26
0
 public override CardItem SetupCardItemViewHolder(CardItem item)
 {
     item.DetailPrimary.SetMaxLines(2);
     item.DetailPrimary.Ellipsize = TextUtils.TruncateAt.End;
     item.Name.Visibility         = ViewStates.Gone;
     return(item);
 }
Example #27
0
        public async Task Can_Cleare_Content()
        {
            var options = new DbContextOptionsBuilder <SportStoreDbContext>()
                          .UseInMemoryDatabase(databaseName: "Can_Cleare_Content")
                          .Options;

            var cardItem1 = new CardItem()
            {
                Product = new Product()
                {
                    Id = 1, Price = 5.0M, Name = "P1"
                },
                Quantity  = 1,
                IsDeleted = false
            };

            var cardItem2 = new CardItem()
            {
                Product = new Product()
                {
                    Id = 2, Price = 5.0M, Name = "P2"
                },
                Quantity  = 2,
                IsDeleted = false
            };

            var cardItem3 = new CardItem()
            {
                Product = new Product()
                {
                    Id = 3, Price = 5.0M, Name = "P2"
                },
                Quantity  = 2,
                IsDeleted = false
            };

            using (var context = new SportStoreDbContext(options))
            {
                await context.CardItems.AddAsync(cardItem1);

                await context.CardItems.AddAsync(cardItem2);

                await context.CardItems.AddAsync(cardItem3);

                await context.SaveChangesAsync();

                var service = new CardService(context);

                await service.Clear();

                var cleared = await context
                              .CardItems
                              .ToListAsync();

                var clearedCount = cleared.Where(c => c.IsDeleted).Count();

                Assert.Equal(3, clearedCount);
            }
        }
        public async Task Get_All_Card_Items()
        {
            var options = new DbContextOptionsBuilder <SportStoreDbContext>()
                          .UseInMemoryDatabase(databaseName: "Get_All_Card_Items")
                          .Options;

            var cardItem1 = new CardItem()
            {
                Product = new Product()
                {
                    Id = 1, Price = 5.0M, Name = "P1"
                },
                Quantity  = 1,
                IsDeleted = false
            };

            var cardItem2 = new CardItem()
            {
                Product = new Product()
                {
                    Id = 2, Price = 5.0M, Name = "P2"
                },
                Quantity  = 2,
                IsDeleted = false
            };

            var cardItem3 = new CardItem()
            {
                Product = new Product()
                {
                    Id = 3, Price = 5.0M, Name = "P2"
                },
                Quantity  = 2,
                IsDeleted = false
            };

            using (var context = new SportStoreDbContext(options))
            {
                await context.CardItems.AddAsync(cardItem1);

                await context.CardItems.AddAsync(cardItem2);

                await context.CardItems.AddAsync(cardItem3);

                await context.SaveChangesAsync();

                var service = new CardService(context);

                var result = await service.GetAll();

                var resultCount = result.ToList().Count;

                var savedItems = await context
                                 .CardItems
                                 .ToListAsync();

                Assert.Equal(savedItems.Count, resultCount);
            }
        }
Example #29
0
 public override CardItem SetupCardItemViewHolder(CardItem item)
 {
     item.Name.SetTextColor(_userNameColor);
     item.DetailSecondary.Visibility = ViewStates.Gone;
     item.Container.SetBackgroundColor(Color.Transparent);
     item.ContainerCard.CardBackgroundColor = ColorStateList.ValueOf(Color.Transparent);
     return(item);
 }
        public async Task <CardItemInfo> CreateAsync(CardItem cardToCreate, CancellationToken cancellationToken)
        {
            await context.Cards.AddAsync(cardToCreate);

            await context.SaveChangesAsync();

            return(cardToCreate);
        }
 /// <summary>
 /// Add card to collection from JSON (string) parameters.
 /// Adds or updates a card in your collection, based on data passed as parameters.
 /// It is intended to be used to load data from JSON files and store it as cards/locales in your collection.
 /// </summary>
 /// <param name="card">JSON card data for card (mainly strings)</param>
 /// <param name="set">Set which card is related to</param>
 /// <param name="locale">Locale of the texts from the card</param>
 /// <param name="filename">File name of the picture used as background for card</param>
 /// <param name="race">Localized text for card race, if necessary</param>
 /// <param name="useDefault">Use default image if no filename is given</param>
 public void Add(CardJSON card, CardSet set, Locales locale, string filename, string race = "", bool useDefault = true)
 {
     // If card already stored, add new texts only if necessary
     CardItem item;
     if (Cards.TryGetValue(card.Id, out item))
     {
         // If locale is not included, add it
         if (!item.hasLocale(locale))
         {
             item.addLocale(locale, card.Name, card.Text, race);
         }
     }
     else
     // Add new card
     {
         // Take JSON values
         var _type   = General.getCustomCardType(card.Type);
         var _class  = General.getCardClass(card.PlayerClass);
         var _race   = General.getCardRace(card.Race);
         var _rarity = General.getCardRarity(card.Rarity);
         // Create card from them
         item = new CardItem(card.Id, card.Cost, card.Attack, card.Health, card.Durability, _type, _class, _race, set, _rarity, filename, useDefault);
         // Add localized texts
         item.addLocale(locale, card.Name, card.Text, race);
         // Add it to collection
         Cards.Add(card.Id, item);
     }
     // If locale not included in locales, include it
     if (!Languages.ContainsKey(locale))
     {
         Languages.Add(locale, General.getShortLocale(locale));
     }
 }
 /// <summary>
 /// Add a card to collection from card item.
 /// Add a card to collection. If card already exists, check if it has all localized texts stored in the new one, adding the new ones.
 /// Update locales dictionary with new locales from card, if necessary
 /// </summary>
 /// <param name="card"></param>
 public void Add(CardItem card)
 {
     // If card already stored, add new texts only
     CardItem item;
     if (Cards.TryGetValue(card.Id, out item))
     {
         // Add all locales in card to collection
         var locales = card.getLocales();
         // So for each one, check if already stored
         foreach (var local in locales)
         {
             // Not stored?
             if (!Languages.ContainsKey(local))
             {
                 // Do it (just do it, Shia!)
                 Languages.Add(local, General.getShortLocale(local));
             }
             // Not locale in stored card? store it
             if (!item.hasLocale(local))
             {
                 card.setLocale(local);
                 item.addLocale(local, card.Name, card.Text, card.RaceName);
             }
         }
     }
     // Otherwise, add new card
     else
     {
         // Add card to collection
         Cards.Add(card.Id, card);
         // Add all locales in card to collection
         var locales = card.getLocales();
         // So for each one, check if already stored
         foreach (var local in locales)
         {
             // Not stored?
             if (!Languages.ContainsKey(local))
             {
                 // Do it (just do it, Shia!)
                 Languages.Add(local, General.getShortLocale(local));
             }
         }
     }
 }