Exemple #1
0
        private BuyItemResult BuyItemByCostArray(string itemId, IEnumerable <GameElementData> costs)
        {
            if (!restrictionVerifier.VerifyRestrictions(itemConfigModel.GetRestrictions(itemId)))
            {
                Debug.Log("StoreManager.BuyItemByCostArray - Restrictions not met for item - " + itemId);
                return(new BuyItemResult(BuyItemResultCode.RestrictionsNotMet));
            }
            else if (!currencyStateModel.SufficientCurrency(costs))
            {
                Debug.Log("StoreManager.BuyItemByCostArray - Insufficient currency for item - " + itemId);
                return(new BuyItemResult(BuyItemResultCode.InsufficientCurrency));
            }

            currencyStateModel.DecreaseCurrency(costs);

            ItemConfigData itemData = itemConfigModel.GetItem(itemId);

            GameElementData ge    = itemConfigModel.ToGameElement(itemData);
            var             items = new List <GameElementData> {
                ge
            };

            collectGameElementsSignal.Dispatch(items);

            if (itemData.itemType == ItemType.Reward)
            {
                rewardItemBoughtSignal.Dispatch(itemData);
            }

            return(new BuyItemResult(BuyItemResultCode.Success));
        }
        public override void Execute()
        {
            logger.Log(Tag, "Execute");

            foreach (GameElementData gameElement in gameElements)
            {
                logger.Log(Tag, "<color=green>Collecting game element :</color> " + gameElement);

                switch (gameElement.type)
                {
                case GameElementType.Currency:
                    currencyStateModel.IncreaseCurrency(gameElement);
                    break;

                case GameElementType.Item:
                    //TODO: Expand to support:
                    // 1. Automatic upgrade of items
                    // 2. Automatic setting the item to be in use
                    ItemConfigData itemData = itemConfigModel.GetItem(gameElement.key);
                    if (itemData.itemType == ItemType.Currency)
                    {
                        currencyStateModel.IncreaseCurrency(itemConfigModel.ToGameElement(itemData));
                    }
                    else
                    {
                        inventoryStateModel.IncreaseQuantity(gameElement);
                    }
                    break;

                case GameElementType.State:
                    progressStateModel.IncreaseProgress(gameElement);
                    break;
                }
            }
        }
        public bool SetQuantity(string itemConfigId, int amount)
        {
            int index = GetIndex(itemConfigId);

            if (index != -1)
            {
                _data.items [index].quantity = amount;
            }
            else
            {
                ItemData newItem = new ItemData();
                newItem.itemConfigId = itemConfigId;
                newItem.inUse        = false;
                newItem.quantity     = amount;

                ItemConfigData itemConfigData = itemConfigModel.GetItem(itemConfigId);
                if (itemConfigData == null)
                {
                    Debug.LogError("Attempted to access non existing item config");
                    return(false);
                }
                newItem.category = itemConfigData.category;

                _data.items.Add(newItem);
            }
            return(Save());
        }
Exemple #4
0
        private void BuyItemPack(ItemGroupConfigData itemGroupData, Promise <BuyItemResult> promise)
        {
            if (itemGroupData.items.Count == 0)
            {
                logger.LogError(Tag, "BuyItemPack - Group contains no items");
                promise.Resolve(new BuyItemResult(BuyItemResultCode.Error));
                return;
            }

            string itemIdToBuy = itemGroupData.items[0];

            // For item groups with more than
            if (itemGroupData.items.Count > 1)
            {
                ItemConfigData packCost = itemGroupConfigModel.GetPackCost(itemGroupData.id);
                if (packCost == null)
                {
                    logger.LogError(Tag, "Cannot find Pack cost - item groups with more than one item require a pack cost item");
                    promise.Resolve(new BuyItemResult(BuyItemResultCode.Error));
                    return;
                }

                itemIdToBuy = packCost.id;
            }

            // Pay the costs, then give the player the rest of the items in the group
            BuyItem(itemIdToBuy).Done(buyItemResult => {
                if (buyItemResult.resultCode.Equals(BuyItemResultCode.Success))
                {
                    foreach (string itemId in itemGroupConfigModel.GetItemIds(itemGroupData.id))
                    {
                        ItemConfigData item = itemConfigModel.GetItem(itemId);

                        if (item.itemType == ItemType.PackCost)
                        {
                            continue;
                        }

                        GameElementData ge = itemConfigModel.ToGameElement(item);
                        var items          = new List <GameElementData> {
                            ge
                        };

                        collectGameElementsSignal.Dispatch(items);
                    }
                }
                else
                {
                    logger.Log(Tag, "BuyItemPack - Will not collect game elements since buy attempt failed. Result code: " + buyItemResult.resultCode);
                }

                promise.Resolve(buyItemResult);
            });
        }
Exemple #5
0
 private bool HasSufficientCurrencyForItem(ItemConfigData item)
 {
     if (item.costs.Count > 0 && currencyStateModel.SufficientCurrency(item.costs) ||
         item.alternativeCosts.Count > 0 && currencyStateModel.SufficientCurrency(item.alternativeCosts))
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Exemple #6
0
        private BuyItemResult BuyItemWithVC(ItemConfigData itemConfigData)
        {
            var result = new BuyItemResult(BuyItemResultCode.Error);

            if (itemConfigData.costs.Count > 0)
            {
                result = BuyItemByCosts(itemConfigData);
            }
            else if (itemConfigData.alternativeCosts.Count > 0)
            {
                result = BuyItemByAlternativeCosts(itemConfigData);
            }

            return(result);
        }
Exemple #7
0
        public IConfigData Clone()
        {
            ItemConfigData c = new ItemConfigData();

            c.id               = id;
            c.name             = name;
            c.iapConfigId      = iapConfigId;
            c.quantity         = quantity;
            c.category         = category;
            c.index            = index;
            c.currencyKey      = currencyKey;
            c.itemType         = itemType;
            c.itemTypeKey      = itemTypeKey;
            c.costs            = new List <GameElementData>(costs.Clone());
            c.alternativeCosts = new List <GameElementData>(alternativeCosts.Clone());
            c.restrictions     = new List <GameElementData>(restrictions.Clone());
            c.assets           = new List <AssetData>(assets.Clone());
            c.properties       = new List <GenericPropertyData>(properties.Clone());

            return(c);
        }
        protected override void OnRegister()
        {
            base.OnRegister();

            itemConfig = itemConfigModel.GetItem(itemID);

            _iapConfigId = itemConfigModel.GetIAPConfigID(itemConfig.id);

            if (!_iapConfigId.IsNullOrEmpty())
            {
                _storeSpecificId = iapConfigModel.GetIAPId(iapConfigModel.GetIAP(_iapConfigId));
            }

            if (!IsItemPurchased())
            {
                UpdatePrice();
            }


            RefreshButtonUI();
        }
Exemple #9
0
        public IPromise <BuyItemResult> BuyItem(string itemId, CurrencyType currencyType = CurrencyType.AutoDetect)
        {
            var promise = new Promise <BuyItemResult>();

            ItemConfigData itemData = itemConfigModel.GetItem(itemId);

            if (currencyType == CurrencyType.HardCurrency)
            {
                BuyItemByIAP(itemId, promise);
                return(promise);
            }

            if (currencyType == CurrencyType.VirtualCurrency)
            {
                BuyItemResult result = BuyItemWithVC(itemData);
                promise.Resolve(result);
                return(promise);
            }

            // Auto detect virtual currency or hard currency;

            if (itemConfigModel.HasAnyCosts(itemData))
            {
                BuyItemResult result = BuyItemWithVC(itemData);
                promise.Resolve(result);
            }
            else if (itemConfigModel.IsInAppItem(itemData))
            {
                BuyItemByIAP(itemId, promise);
            }
            else
            {
                Debug.LogError("Attempted to purchase an item with no defined costs");
                promise.Resolve(new BuyItemResult(BuyItemResultCode.Error));
            }

            return(promise);
        }
        public override void Execute()
        {
            _iapId = purchaseResult.purchasedItem.id;

            logger.Log(Tag, "IAP id: " + _iapId);

            if (purchaseResult.result == PurchaseIAPResultCode.Success)
            {
                IAPConfigData iapConfig = iapConfigModel.GetIAPByPurchaseId(_iapId);
                _purchasedItem = itemConfigModel.GetItemByIapConfigId(iapConfig.id);

                if (_purchasedItem == null)
                {
                    logger.LogError(Tag, "Could not find item config id for iap + " + _iapId);
                    Fail();
                    return;
                }

                CollectPurchasedItem();

                if (DidPurchasedNoAds())
                {
                    logger.Log(Tag, "PurchaseNoAdsCommand of " + _purchasedItem);

                    settingsStateModel.SetNoAds();
                    bannerAds.Hide();
                }

                EnablePromotionEligibility();
            }
            else
            {
                logger.Log(Tag, "Purchase failed");
                Fail();
            }

            iapPurchaseDoneSignal.Dispatch(purchaseResult);
        }
Exemple #11
0
        private void BuyItemByIAP(string itemId, Promise <BuyItemResult> promise)
        {
            ItemConfigData itemData = itemConfigModel.GetItem(itemId);

            IAPConfigData iapData = iapConfigModel.GetIAP(itemData.iapConfigId);

            if (iapData == null)
            {
                logger.LogError(Tag, ".PurchaseItemByIAP - Could not find iap data for item : " + itemData.id);
                promise.Resolve(new BuyItemResult(BuyItemResultCode.Error));
            }

            if (IsPurchaseInProgress)
            {
                logger.Log(Tag, ".PurchaseItemByIAP - Purchase is in progress - ignoring new purchase request for item : " + itemData.id);
                promise.Resolve(new BuyItemResult(BuyItemResultCode.Error));
            }
            else
            {
                iapPurchaseDoneSignal.AddOnce(iapResult => HandleIapResult(iapResult, promise));

                requestPurchaseInAppItemSignal.Dispatch(iapData);
            }
        }
Exemple #12
0
 private BuyItemResult BuyItemByAlternativeCosts(ItemConfigData itemConfigData)
 {
     return(BuyItemByCostArray(itemConfigData.id, itemConfigData.alternativeCosts));
 }
Exemple #13
0
 private BuyItemResult BuyItemByCosts(ItemConfigData itemConfigData)
 {
     return(BuyItemByCostArray(itemConfigData.id, itemConfigData.costs));
 }