Пример #1
0
        /**
         * Equips the current <code>EquippableVG</code>.
         * The equipping is done according to the equipping model ('GLOBAL', 'CATEGORY', or 'LOCAL').
         *
         * @param notify if true post event to bus
         * @throws NotEnoughGoodsException
         */
        public void equip(bool notify)
        {
            // only if the user has bought this EquippableVG, the EquippableVG is equipped.
            if (StorageManager.getVirtualGoodsStorage().getBalance(this) > 0)
            {
                if (mEquippingModel == EquippingModel.CATEGORY)
                {
                    VirtualCategory category = null;
                    try {
                        category = StoreInfo.getCategory(getItemId());
                    } catch (VirtualItemNotFoundException e) {
                        SoomlaUtils.LogError(TAG,
                                             "Tried to unequip all other category VirtualGoods but there was no " +
                                             "associated category. virtual good itemId: " + getItemId() + " " + e.Message);
                        return;
                    }

                    foreach (String goodItemId in category.getGoodsItemIds())
                    {
                        EquippableVG equippableVG = null;
                        try {
                            equippableVG = (EquippableVG)StoreInfo.getVirtualItem(goodItemId);

                            if (equippableVG != null && equippableVG != this)
                            {
                                equippableVG.unequip(notify);
                            }
                        } catch (VirtualItemNotFoundException e) {
                            SoomlaUtils.LogError(TAG, "On equip, couldn't find one of the itemIds "
                                                 + "in the category. Continuing to the next one. itemId: "
                                                 + goodItemId + " " + e.Message);
                        } catch (InvalidCastException ex) {
                            SoomlaUtils.LogDebug(TAG, "On equip, an error occurred. It's a debug "
                                                 + "message b/c the VirtualGood may just not be an EquippableVG. "
                                                 + "itemId: " + goodItemId + " " + ex.Message);
                        }
                    }
                }
                else if (mEquippingModel == EquippingModel.GLOBAL)
                {
                    foreach (VirtualGood good in StoreInfo.getGoods())
                    {
                        if (good != this &&
                            good is EquippableVG)
                        {
                            ((EquippableVG)good).unequip(notify);
                        }
                    }
                }

                StorageManager.getVirtualGoodsStorage().equip(this, notify);
            }
            else
            {
                throw new NotEnoughGoodsException(getItemId());
            }
        }
Пример #2
0
 /**
  * Equips the given <code>EquippableVG</code>.
  *
  * @param good the <code>EquippableVG</code> to equip
  */
 public void equip(EquippableVG good)
 {
     equip(good, true);
 }
Пример #3
0
        /**
         * Helper function for <code>equip</code> and <code>unequip</code> functions.
         */
        private void equipPriv(EquippableVG good, bool equip, bool notify)
        {
            SoomlaUtils.LogDebug(mTag, (!equip ? "unequipping " : "equipping ") + good.getName() + ".");

            String itemId = good.getItemId();
            String key = keyGoodEquipped(itemId);

            if (equip) {
            KeyValueStorage.SetValue(key, "");
            if (notify) {
                BusProvider.Instance.Post(new GoodEquippedEvent(good));
            }
            } else {
            KeyValueStorage.DeleteKeyValue(key);
            if (notify) {
                BusProvider.Instance.Post(new GoodUnEquippedEvent(good));
            }
            }
        }
Пример #4
0
 /**
  * UnEquips the given <code>EquippableVG</code>.
  *
  * @param good the <code>EquippableVG</code> to unequip
  * @param notify if true post event to bus
  */
 public void unequip(EquippableVG good, bool notify)
 {
     if (!isEquipped(good)) {
     return;
     }
     equipPriv(good, false, notify);
 }
Пример #5
0
 /**
  * UnEquips the given <code>EquippableVG</code>.
  *
  * @param good the <code>EquippableVG</code> to unequip
  */
 public void unequip(EquippableVG good)
 {
     unequip(good, true);
 }
Пример #6
0
        /**
         * Checks if the given <code>EquippableVG</code> is currently equipped or not.
         *
         * @param good the <code>EquippableVG</code> to check the status for
         * @return true if the given good is equipped, false otherwise
         */
        public bool isEquipped(EquippableVG good)
        {
            SoomlaUtils.LogDebug(mTag, "checking if virtual good with itemId: " + good.getItemId() +
                " is equipped.");

            String itemId = good.getItemId();
            String key = keyGoodEquipped(itemId);
            String val = KeyValueStorage.GetValue(key);

            return val != null;
        }
Пример #7
0
 /**
  * Equips the given <code>EquippableVG</code>.
  *
  * @param good the EquippableVG to equip
  * @param notify if notify is true post event to bus
  */
 public void equip(EquippableVG good, bool notify)
 {
     if (isEquipped(good)) {
     return;
     }
     equipPriv(good, true, notify);
 }
Пример #8
0
    /** Private functions **/
    /**
     * Transforms given JSONObject to StoreInfo
     *
     * @param JSONObject
     * @throws JSONException
     */
    private static void fromJSONObject(JSONObject JSONObject) {

        mVirtualItems = new Dictionary<String, VirtualItem>();
        mPurchasableItems = new Dictionary<String, PurchasableVirtualItem>();
        mGoodsCategories = new Dictionary<String, VirtualCategory>();
        mGoodsUpgrades = new Dictionary<String, List<UpgradeVG>>();
        mCurrencyPacks = new List<VirtualCurrencyPack>();
        mGoods = new List<VirtualGood>();
        mCategories = new List<VirtualCategory>();
        mCurrencies = new List<VirtualCurrency>();
        //mNonConsumables = new List<NonConsumableItem>();
        if (JSONObject.HasField(StoreJSONConsts.STORE_CURRENCIES)) {
            JSONObject virtualCurrencies = JSONObject[StoreJSONConsts.STORE_CURRENCIES];
            for (int i=0; i<virtualCurrencies.Count; i++){
                JSONObject o = virtualCurrencies[i];
                VirtualCurrency c = new VirtualCurrency(o);
                mCurrencies.Add(c);

                mVirtualItems.Add(c.getItemId(), c);
            }
        }

        if (JSONObject.HasField(StoreJSONConsts.STORE_CURRENCYPACKS)) {
            JSONObject currencyPacks = JSONObject[StoreJSONConsts.STORE_CURRENCYPACKS];
            for (int i=0; i<currencyPacks.Count; i++){
                JSONObject o = currencyPacks[i];
                VirtualCurrencyPack pack = new VirtualCurrencyPack(o);
                mCurrencyPacks.Add(pack);

                mVirtualItems.Add(pack.getItemId(), pack);

                PurchaseType purchaseType = pack.GetPurchaseType();
                if (purchaseType is PurchaseWithMarket) {
                    mPurchasableItems.Add(((PurchaseWithMarket) purchaseType)
                            .getMarketItem().getProductId(), pack);
                }
            }
        }

        // The order in which VirtualGoods are created matters!
        // For example: VGU and VGP depend on other VGs
        if (JSONObject.HasField(StoreJSONConsts.STORE_GOODS)) {
            JSONObject virtualGoods = JSONObject[StoreJSONConsts.STORE_GOODS];
            if (virtualGoods.HasField(StoreJSONConsts.STORE_GOODS_SU)) {
                JSONObject suGoods = virtualGoods[StoreJSONConsts.STORE_GOODS_SU];
                for (int i=0; i<suGoods.Count; i++){
                    JSONObject o = suGoods[i];
                    SingleUseVG g = new SingleUseVG(o);
                    addVG(g);
                }
            }


            if (virtualGoods.HasField(StoreJSONConsts.STORE_GOODS_LT)) {
                JSONObject ltGoods = virtualGoods[StoreJSONConsts.STORE_GOODS_LT];
                for (int i=0; i<ltGoods.Count; i++){
                    JSONObject o = ltGoods[i];
                    LifetimeVG g = new LifetimeVG(o);
                    addVG(g);
                }
            }


            if (virtualGoods.HasField(StoreJSONConsts.STORE_GOODS_EQ)) {
                JSONObject eqGoods = virtualGoods[StoreJSONConsts.STORE_GOODS_EQ];
                for (int i=0; i<eqGoods.Count; i++){
                    JSONObject o = eqGoods[i];
                    EquippableVG g = new EquippableVG(o);
                    addVG(g);
                }
            }

            if (virtualGoods.HasField(StoreJSONConsts.STORE_GOODS_PA)) {
                JSONObject paGoods = virtualGoods[StoreJSONConsts.STORE_GOODS_PA];
                for (int i=0; i<paGoods.Count; i++){
                    JSONObject o = paGoods[i];
                    SingleUsePackVG g = new SingleUsePackVG(o);
                    addVG(g);
                }
            }


            if (virtualGoods.HasField(StoreJSONConsts.STORE_GOODS_UP)) {
                JSONObject upGoods = virtualGoods[StoreJSONConsts.STORE_GOODS_UP];
                for (int i=0; i<upGoods.Count; i++){
                    JSONObject o = upGoods[i];
                    UpgradeVG g = new UpgradeVG(o);
                    addVG(g);

                    List<UpgradeVG> upgrades = mGoodsUpgrades[g.getGoodItemId()];
                    if (upgrades == null) {
                        upgrades = new List<UpgradeVG>();
                        mGoodsUpgrades.Add(g.getGoodItemId(), upgrades);
                    }
                    upgrades.Add(g);
                }
            }

        }

        // Categories depend on virtual goods. That's why the have to be initialized after!
        if (JSONObject.HasField(StoreJSONConsts.STORE_CATEGORIES)) {
            JSONObject virtualCategories = JSONObject[StoreJSONConsts.STORE_CATEGORIES];
            for(int i=0; i<virtualCategories.Count; i++){
                JSONObject o = virtualCategories[i];
                VirtualCategory category = new VirtualCategory(o);
                mCategories.Add(category);
                foreach(String goodItemId in category.getGoodsItemIds()) {
                    mGoodsCategories.Add(goodItemId, category);
                }
            }
        }
        /*
        if (JSONObject.TryGetValue(StoreJSONConsts.STORE_NONCONSUMABLES, out value)) {
            JSONObject nonConsumables = JSONObject.Value<JSONObject>(StoreJSONConsts.STORE_NONCONSUMABLES);
            for (int i=0; i<nonConsumables.Count; i++){
                JSONObject o = nonConsumables.Value<JSONObject>(i);
                NonConsumableItem non = new NonConsumableItem(o);
                mNonConsumables.Add(non);

                mVirtualItems.Add(non.getItemId(), non);

                PurchaseType purchaseType = non.GetPurchaseType();
                if (purchaseType is PurchaseWithMarket) {
                    mPurchasableItems.Add(((PurchaseWithMarket) purchaseType)
                            .getMarketItem().getProductId(), non);
                }
            }
        }*/
    }
Пример #9
0
 public GoodUnEquippedEvent(EquippableVG good, object sender)
     : base(sender)
 {
     mGood = good;
 }
Пример #10
0
 public GoodUnEquippedEvent(EquippableVG good)
     : this(good, null)
 {
 }
Пример #11
0
 /**
  * Helper function for <code>equip</code> and <code>unequip</code> functions.
  */
 private void equipPriv(EquippableVG good, bool equip, bool notify)
 {
 }
Пример #12
0
 /**
  * Checks if the given <code>EquippableVG</code> is currently equipped or not.
  *
  * @param good the <code>EquippableVG</code> to check the status for
  * @return true if the given good is equipped, false otherwise
  */
 public bool isEquipped(EquippableVG good)
 {
     return false;
 }
Пример #13
0
 private void UpdateGoodUnequip(EquippableVG good)
 {
     Button equipB = (Button)MainStackPanel.FindName(good.getItemId() + "equip");
     equipB.Content = "equip";
     equipB.Click += equipItem;
     equipB.Click -= unequipItem;
 }
Пример #14
0
 public void PostGoodUnEquippedEvent(EquippableVG good)
 {
     LogEvent("GoodUnEquipped");
     if (OnGoodUnEquippedEvent != null)
     {
         OnGoodUnEquippedEvent(good);
     }
 }
Пример #15
0
        public void Prepare(int version, String JsonStoreAssets)
        {
            try
            {
                SoomlaUtils.LogDebug(TAG,"Prepare :\n"+JsonStoreAssets);
                mVersion = version;

                JSONObject jSONObject = new JSONObject(JsonStoreAssets,-10);

                JSONObject virtualCurrencies = jSONObject[StoreJSONConsts.STORE_CURRENCIES];
                mVirtualCurrency = new VirtualCurrency[virtualCurrencies.Count];
                for (int i = 0; i < virtualCurrencies.Count; i++)
                {
                    JSONObject o = virtualCurrencies[i];
                    VirtualCurrency c = new VirtualCurrency(o);
                    mVirtualCurrency[i] = c;
                }

                JSONObject currencyPacks = jSONObject[StoreJSONConsts.STORE_CURRENCYPACKS];
                mVirtualCurrencyPack = new VirtualCurrencyPack[currencyPacks.Count];
                for (int i = 0; i < currencyPacks.Count; i++)
                {
                    JSONObject o = currencyPacks[i];
                    VirtualCurrencyPack pack = new VirtualCurrencyPack(o);
                    mVirtualCurrencyPack[i] = pack;
                }

                // The order in which VirtualGoods are created matters!
                // For example: VGU and VGP depend on other VGs
                JSONObject virtualGoods = jSONObject[StoreJSONConsts.STORE_GOODS];
                JSONObject suGoods = virtualGoods[StoreJSONConsts.STORE_GOODS_SU];
                JSONObject ltGoods = virtualGoods[StoreJSONConsts.STORE_GOODS_LT];
                JSONObject eqGoods = virtualGoods[StoreJSONConsts.STORE_GOODS_EQ];
                JSONObject upGoods = virtualGoods[StoreJSONConsts.STORE_GOODS_UP];
                JSONObject paGoods = virtualGoods[StoreJSONConsts.STORE_GOODS_PA];
                List<VirtualGood> goods = new List<VirtualGood>();
                for (int i = 0; i < suGoods.Count; i++)
                {
                    JSONObject o = suGoods[i];
                    SingleUseVG g = new SingleUseVG(o);
                    SoomlaUtils.LogDebug(TAG, "SingleUseVG " + g.getItemId());
                    goods.Add(g);
                }
                for (int i = 0; i < ltGoods.Count; i++)
                {
                    JSONObject o = ltGoods[i];
                    LifetimeVG g = new LifetimeVG(o);
                    SoomlaUtils.LogDebug(TAG, "LifetimeVG " + g.getItemId());
                    goods.Add(g);
                }
                for (int i = 0; i < eqGoods.Count; i++)
                {
                    JSONObject o = eqGoods[i];
                    EquippableVG g = new EquippableVG(o);
                    SoomlaUtils.LogDebug(TAG, "EquippableVG " + g.getItemId());
                    goods.Add(g);
                }
                for (int i = 0; i < paGoods.Count; i++)
                {
                    JSONObject o = paGoods[i];
                    SingleUsePackVG g = new SingleUsePackVG(o);
                    SoomlaUtils.LogDebug(TAG, "SingleUsePackVG " + g.getItemId());
                    goods.Add(g);
                }
                for (int i = 0; i < upGoods.Count; i++)
                {
                    JSONObject o = upGoods[i];
                    UpgradeVG g = new UpgradeVG(o);
                    SoomlaUtils.LogDebug(TAG, "UpgradeVG " + g.getItemId());
                    goods.Add(g);
                }

                mVirtualGood = new VirtualGood[goods.Count];
                for(int i = 0; i < goods.Count; i++)
                {
                    SoomlaUtils.LogDebug(TAG, "VirtualGood " + goods[i].getItemId());
                    mVirtualGood[i] = goods[i];
                }

                // categories depend on virtual goods. That's why the have to be initialized after!
                JSONObject virtualCategories = jSONObject[StoreJSONConsts.STORE_CATEGORIES];
                mVirtualCategory = new VirtualCategory[virtualCategories.Count];
                for (int i = 0; i < virtualCategories.Count; i++)
                {
                    JSONObject o = virtualCategories[i];
                    VirtualCategory category = new VirtualCategory(o);
                    mVirtualCategory[i] = category;
                }
                /*
                JArray nonConsumables = JSONObject.Value<JArray>(StoreJSONConsts.STORE_NONCONSUMABLES);
                mNonConsumableItem = new NonConsumableItem[nonConsumables.Count];
                for (int i = 0; i < nonConsumables.Count; i++)
                {
                    JSONObject o = nonConsumables.Value<JSONObject>(i);
                    NonConsumableItem non = new NonConsumableItem(o);
                    mNonConsumableItem[i] = non;
                }
                */
            }
            catch (Exception ex)
            {
                SoomlaUtils.LogError(TAG, "An error occurred while trying to prepare storeAssets" + ex.Message);
            }
        }
Пример #16
0
        public void Prepare(int version, String JsonStoreAssets)
        {
            try
            {
                mVersion = version;

                JObject JObject = JObject.Parse(JsonStoreAssets);

                JArray virtualCurrencies = JObject.Value<JArray>(StoreJSONConsts.STORE_CURRENCIES);
                mVirtualCurrency = new VirtualCurrency[virtualCurrencies.Count];
                for (int i = 0; i < virtualCurrencies.Count; i++)
                {
                    JObject o = virtualCurrencies.Value<JObject>(i);
                    VirtualCurrency c = new VirtualCurrency(o);
                    mVirtualCurrency[i] = c;
                }

                JArray currencyPacks = JObject.Value<JArray>(StoreJSONConsts.STORE_CURRENCYPACKS);
                mVirtualCurrencyPack = new VirtualCurrencyPack[currencyPacks.Count];
                for (int i = 0; i < currencyPacks.Count; i++)
                {
                    JObject o = currencyPacks.Value<JObject>(i);
                    VirtualCurrencyPack pack = new VirtualCurrencyPack(o);
                    mVirtualCurrencyPack[i] = pack;
                }

                // The order in which VirtualGoods are created matters!
                // For example: VGU and VGP depend on other VGs
                JObject virtualGoods = JObject.Value<JObject>(StoreJSONConsts.STORE_GOODS);
                JArray suGoods = virtualGoods.Value<JArray>(StoreJSONConsts.STORE_GOODS_SU);
                JArray ltGoods = virtualGoods.Value<JArray>(StoreJSONConsts.STORE_GOODS_LT);
                JArray eqGoods = virtualGoods.Value<JArray>(StoreJSONConsts.STORE_GOODS_EQ);
                JArray upGoods = virtualGoods.Value<JArray>(StoreJSONConsts.STORE_GOODS_UP);
                JArray paGoods = virtualGoods.Value<JArray>(StoreJSONConsts.STORE_GOODS_PA);
                List<VirtualGood> goods = new List<VirtualGood>();
                for (int i = 0; i < suGoods.Count; i++)
                {
                    JObject o = suGoods.Value<JObject>(i);
                    SingleUseVG g = new SingleUseVG(o);
                    goods.Add(g);
                }
                for (int i = 0; i < ltGoods.Count; i++)
                {
                    JObject o = ltGoods.Value<JObject>(i);
                    LifetimeVG g = new LifetimeVG(o);
                    goods.Add(g);
                }
                for (int i = 0; i < eqGoods.Count; i++)
                {
                    JObject o = eqGoods.Value<JObject>(i);
                    EquippableVG g = new EquippableVG(o);
                    goods.Add(g);
                }
                for (int i = 0; i < paGoods.Count; i++)
                {
                    JObject o = paGoods.Value<JObject>(i);
                    SingleUsePackVG g = new SingleUsePackVG(o);
                    goods.Add(g);
                }
                for (int i = 0; i < upGoods.Count; i++)
                {
                    JObject o = upGoods.Value<JObject>(i);
                    UpgradeVG g = new UpgradeVG(o);
                    goods.Add(g);
                }

                mVirtualGood = new VirtualGood[goods.Count];
                for(int i = 0; i < goods.Count; i++)
                {
                    mVirtualGood[i] = goods[i];
                }

                // categories depend on virtual goods. That's why the have to be initialized after!
                JArray virtualCategories = JObject.Value<JArray>(StoreJSONConsts.STORE_CATEGORIES);
                mVirtualCategory = new VirtualCategory[virtualCategories.Count];
                for (int i = 0; i < virtualCategories.Count; i++)
                {
                    JObject o = virtualCategories.Value<JObject>(i);
                    VirtualCategory category = new VirtualCategory(o);
                    mVirtualCategory[i] = category;
                }

                JArray nonConsumables = JObject.Value<JArray>(StoreJSONConsts.STORE_NONCONSUMABLES);
                mNonConsumableItem = new NonConsumableItem[nonConsumables.Count];
                for (int i = 0; i < nonConsumables.Count; i++)
                {
                    JObject o = nonConsumables.Value<JObject>(i);
                    NonConsumableItem non = new NonConsumableItem(o);
                    mNonConsumableItem[i] = non;
                }

            }
            catch (Exception ex)
            {
                SoomlaUtils.LogError(TAG, "An error occurred while trying to prepare storeAssets" + ex.Message);
            }

        }