/* * Copyright 2015 Daniel Dittmar * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package dan.dit.whatsthat.testsubject.shopping.sortiment; import android.content.res.Resources; import android.view.LayoutInflater; import dan.dit.whatsthat.R; import dan.dit.whatsthat.testsubject.ForeignPurse; import dan.dit.whatsthat.testsubject.TestSubject; import dan.dit.whatsthat.testsubject.shopping.ConfirmProduct; import dan.dit.whatsthat.testsubject.shopping.ShopArticle; import dan.dit.whatsthat.testsubject.shopping.SubProduct; import dan.dit.whatsthat.util.dependencies.Dependency; /** * Created by daniel on 24.09.15. */ public class LevelUpArticle extends ShopArticle { public static final String KEY_LEVEL_UP_ARTICLE = "key_level_up_purchase"; private ConfirmProduct mConfirmProduct; protected LevelUpArticle(ForeignPurse purse) { super(KEY_LEVEL_UP_ARTICLE, purse, R.string.article_level_up_name, R.string.article_level_up_descr, R.drawable.icon_general); addDependency(new Dependency() { @Override public boolean isFulfilled() { return !TestSubject.getInstance().canChooseNewRiddle(); } @Override public CharSequence getName(Resources res) { return res.getString(R.string.article_level_up_dep_new_riddle); } }, GENERAL_PRODUCT_INDEX); } private boolean hasReachedMaximumLevel() { return TestSubject.getInstance().getCurrentLevel() >= TestSubject.getInstance().getMaximumLevel(); } @Override public int isPurchasable(int subProductIndex) { if (hasReachedMaximumLevel()) { return HINT_NOT_PURCHASABLE_ALREADY_PURCHASED; } if (areDependenciesMissing(TestSubject.getInstance().getCurrentLevel() + 1)) { return HINT_NOT_PURCHASABLE_DEPENDENCIES_MISSING; } int cost = TestSubject.getInstance().getNextLevelUpCost(); return mPurse.getCurrentScore() >= cost ? HINT_PURCHASABLE : HINT_NOT_PURCHASABLE_TOO_EXPENSIVE; } @Override public boolean isImportant() { int purchasable = isPurchasable(GENERAL_PRODUCT_INDEX); return purchasable == HINT_PURCHASABLE || purchasable == HINT_NOT_PURCHASABLE_TOO_EXPENSIVE || (purchasable == HINT_NOT_PURCHASABLE_DEPENDENCIES_MISSING && !areDependenciesMissing(GENERAL_PRODUCT_INDEX)); } @Override public int getSpentScore(int subProductIndex) { return mPurse.getScoreSpentOnLevelUp(); } @Override public CharSequence getCostText(Resources resources, int subProductIndex) { int cost = TestSubject.getInstance().getNextLevelUpCost(); if (cost > 0) { return String.valueOf(cost); } else { return resources.getString(R.string.shop_article_free); } } @Override public int getSubProductCount() { return hasReachedMaximumLevel() ? 0 : 1; } @Override public SubProduct getSubProduct(LayoutInflater inflater, int subProductIndex) { if (hasReachedMaximumLevel()) { return null; } if (mConfirmProduct == null || mConfirmProduct.hasNoView()) { mConfirmProduct = new ConfirmProduct(this); mConfirmProduct.inflateView(inflater); } CharSequence costText; CharSequence depText; int cost = TestSubject.getInstance().getNextLevelUpCost(); if (mConfirmProduct.hasNoView()) { costText = String.valueOf(cost); depText = "---"; } else { Resources res = mConfirmProduct.getView().getResources(); costText = getCostText(res, subProductIndex); depText = makeMissingDependenciesText(res, TestSubject.getInstance().getCurrentLevel() + 1); } int purchasable = isPurchasable(subProductIndex); mConfirmProduct.setConfirmable(purchasable, costText, depText, cost > 0 && (purchasable == HINT_PURCHASABLE || purchasable == HINT_NOT_PURCHASABLE_TOO_EXPENSIVE) ? R.drawable.think_currency_small : 0); return mConfirmProduct; } @Override public void onChildClick(SubProduct product) { if (product == mConfirmProduct && isPurchasable(GENERAL_PRODUCT_INDEX) == HINT_PURCHASABLE && TestSubject.getInstance().purchaseLevelUp() && mListener != null) { mListener.onArticleChanged(this); } } @Override public int getPurchaseProgressPercent() { return (int) ((TestSubject.getInstance().getCurrentLevel() + 1)/ ((double) TestSubject.getInstance().getMaximumLevel() + 1.) * 100); } }