/*
* 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.Context;
import java.util.ArrayList;
import dan.dit.whatsthat.R;
import dan.dit.whatsthat.riddle.achievement.holders.AchievementCircle;
import dan.dit.whatsthat.riddle.achievement.holders.AchievementDice;
import dan.dit.whatsthat.riddle.achievement.holders.AchievementJumper;
import dan.dit.whatsthat.riddle.achievement.holders.AchievementLazor;
import dan.dit.whatsthat.riddle.types.PracticalRiddleType;
import dan.dit.whatsthat.testsubject.ForeignPurse;
import dan.dit.whatsthat.testsubject.LevelDependency;
import dan.dit.whatsthat.testsubject.TestSubject;
import dan.dit.whatsthat.testsubject.shopping.ShopArticle;
import dan.dit.whatsthat.testsubject.shopping.ShopArticleHolder;
import dan.dit.whatsthat.testsubject.shopping.ShopArticleMulti;
import dan.dit.whatsthat.testsubject.shopping.ShopArticleSimple;
import dan.dit.whatsthat.testsubject.shopping.ShopArticleToggleable;
import dan.dit.whatsthat.util.dependencies.Dependency;
import dan.dit.whatsthat.util.dependencies.OrDependency;
/**
* Created by daniel on 20.08.15.
*/
public class SortimentHolder extends ShopArticleHolder {
public static final String ARTICLE_KEY_FLOW_BIGGER_FLOW = PracticalRiddleType.FLOW_INSTANCE
.getFullName() + "_bigger_flow";
public static final String ARTICLE_KEY_JUMPER_START_FURTHER_FEATURE = PracticalRiddleType.JUMPER_INSTANCE.getFullName() + "_start_further";
public static final String ARTICLE_KEY_CIRCLE_DIVIDE_BY_MOVE_FEATURE = PracticalRiddleType.CIRCLE_INSTANCE.getFullName() + "_divide_by_move_feature";
public static final String ARTICLE_KEY_TRIANGLE_DIVIDE_BY_MOVE_FEATURE = PracticalRiddleType.TRIANGLE_INSTANCE.getFullName() + "_divided_by_move_feature";
public static final String ARTICLE_KEY_SNOW_FEATURE_ORIENTATION_SENSOR = PracticalRiddleType.SNOW_INSTANCE.getFullName() + "_control_by_orientation_sensor";
public static final String ARTICLE_KEY_LAZOR_PROTECTION_AT_DIFFICULTY = PracticalRiddleType.LAZOR_INSTANCE.getFullName() + "_protection_at_difficulty";
public static final String ARTICLE_KEY_JUMPER_BETTERS_IDEAS = PracticalRiddleType
.JUMPER_INSTANCE.getFullName() + "_better_ideas";
public static final String ARTICLE_KEY_DICE_IMPROVED_START = PracticalRiddleType.DICE_INSTANCE
.getFullName() + "_improved_start";
public static final String ARTICLE_KEY_PURCHASE_CURRENCY_250 = "article_purchase_currency_250";
public static final String ARTICLE_KEY_PURCHASE_CURRENCY_500 = "article_purchase_currency_500";
public static final String ARTICLE_KEY_PURCHASE_CURRENCY_1000 =
"article_purchase_currency_1000";
public static final String GOOGLE_PRODUCT_ID_PURCHASE_CURRENCY_250 = "currency_250";
public static final String GOOGLE_PRODUCT_ID_PURCHASE_CURRENCY_500 = "currency_500";
public static final String GOOGLE_PRODUCT_ID_PURCHASE_CURRENCY_1000 = "currency_1000";
private Dependency mAnyDownloadProductPurchasedDependency;
public SortimentHolder(Context applicationContext, ForeignPurse purse) {
super(applicationContext, purse);
}
@Override
public void makeArticles() {
mAllArticles = new ArrayList<>();
mFilteredArticles = new ArrayList<>();
addArticle(new RiddleArticle(mPurse));
addArticle(new LevelUpArticle(mPurse));
addArticle(new PurchaseCurrencyArticle(ARTICLE_KEY_PURCHASE_CURRENCY_250, mPurse, this,
R.string.article_currency_purchase_250_name,
R.string.article_currency_purchase_descr,
R.drawable.icon_think_currency,
250, // gained in game currency, >0
GOOGLE_PRODUCT_ID_PURCHASE_CURRENCY_250,
150 // cost in cent, only visual, price in developer console
));
addArticle(new PurchaseCurrencyArticle(ARTICLE_KEY_PURCHASE_CURRENCY_500, mPurse, this,
R.string.article_currency_purchase_500_name,
R.string.article_currency_purchase_descr,
R.drawable.icon_think_currency,
500, // gained in game currency, >0
GOOGLE_PRODUCT_ID_PURCHASE_CURRENCY_500,
200 // cost in cent, only visual, price in developer console
));
addArticle(new PurchaseCurrencyArticle(ARTICLE_KEY_PURCHASE_CURRENCY_1000, mPurse, this,
R.string.article_currency_purchase_1000_name,
R.string.article_currency_purchase_descr,
R.drawable.icon_think_currency,
1000, // gained in game currency, >0
GOOGLE_PRODUCT_ID_PURCHASE_CURRENCY_1000,
350 // cost in cent, only visual, price in developer console
));
addArticle(new ShopArticleSimple(ARTICLE_KEY_CIRCLE_DIVIDE_BY_MOVE_FEATURE, mPurse, R.string.article_circle_divide_by_move_feature_name, R.string.article_circle_divide_by_move_feature_descr, R.drawable.icon_circle, 100));
addArticle(new ShopArticleSimple(ARTICLE_KEY_TRIANGLE_DIVIDE_BY_MOVE_FEATURE, mPurse, R.string.article_triangle_divide_by_move_feature_name, R.string.article_triangle_divide_by_move_feature_descr, R.drawable.icon_triangle, 300));
addArticle(new ShopArticleToggleable(ARTICLE_KEY_SNOW_FEATURE_ORIENTATION_SENSOR, mPurse, R.string.article_snow_feature_orientation_sensor_name, R.string.article_snow_feature_orientation_sensor_descr, R.drawable.icon_snow,
R.string.article_snow_feature_orientation_sensor_on, R.string.article_snow_feature_orientation_sensor_off, 400));
addHintArticles();
addArticle(new ShopArticleDownload(mApplicationContext, mPurse, R.string.download_article_name, R.string.download_article_descr_technical, R.drawable.ic_download, 30,
"fabian", "Crackle42_pics", 5, "https://www.dropbox.com/s/b5nydme8eg1lq8e/fabian_crackle42_pics.wtb?dl=1"));
addArticle(new ShopArticleDownload(mApplicationContext, mPurse, R.string.download_article_name, R.string.download_article_descr_general, R.drawable.ic_download, 30,
"fabian", "FaDi_pics", 8, "https://www.dropbox.com/s/drvqyfc9s9ar8j6/fabian_FaDi_pics.wtb?dl=1"));
addArticle(new ShopArticleDownload(mApplicationContext, mPurse, R.string.download_article_name, R.string.download_article_descr_housing, R.drawable.ic_download, 50,
"fabian", "Housing", 8, "https://www.dropbox.com/s/4b28so70j5jugpo/fabian_housing.wtb?dl=1"));
addArticle(new ShopArticleDownload(mApplicationContext, mPurse, R.string.download_article_name, R.string.download_article_descr_nature, R.drawable.ic_download, 80,
"fabian", "Nature", 9, "https://www.dropbox.com/s/6pgvwdyfvbp95n2/fabian_nature.wtb?dl=1"));
addArticle(new ShopArticleDownload(mApplicationContext, mPurse, R.string.download_article_name, R.string.download_article_descr_animal, R.drawable.ic_download, 35,
"fabian", "NoAnimal", 5, "https://www.dropbox.com/s/j6ofjcberhvt6tz/fabian_NoAnimal.wtb?dl=1"));
addArticle(new ShopArticleDownload(mApplicationContext, mPurse, R.string.download_article_name, R.string.download_article_descr_superlative, R.drawable.ic_download, 65,
"fabian", "Superlative", 8, "https://www.dropbox.com/s/vx5f7lkim0jja4j/fabian_superlative.wtb?dl=1"));
//addArticle(new ShopArticleDownload(mApplicationContext, mPurse, R.string.download_article_name, R.string.download_article_descr_gaming, R.drawable.ic_download, 50000,
// "fabian", "Gaming", 1, "https://www.dropbox.com/s/pc3ussutbszkmh4/fabian_Gaming.wtb?dl=1")); //NOT ENOUGH IMAGES
addArticle(new ShopArticleSimple(ARTICLE_KEY_JUMPER_START_FURTHER_FEATURE, mPurse,
R.string.article_jumper_start_further_name,
R.string.article_jumper_start_further_descr,
R.drawable.icon_jumprun,
800));
addArticle(new ShopArticleMulti(ARTICLE_KEY_LAZOR_PROTECTION_AT_DIFFICULTY, mPurse,
R.string.riddle_type_lazor_article_protection_at_name,
R.string.riddle_type_lazor_article_protection_at_descr,
R.drawable.icon_lazor,
R.array.riddle_type_lazor_article_protection_at_products,
new int[] {50, 150, 200, 500}));
addArticle(new ShopArticleSimple(ARTICLE_KEY_JUMPER_BETTERS_IDEAS, mPurse,
R.string.article_jumper_better_ideas_name,
R.string.article_jumper_better_ideas_descr,
R.drawable.icon_jumprun,
700));
addArticle(new ShopArticleMulti(ARTICLE_KEY_DICE_IMPROVED_START, mPurse,
R.string.article_dice_improved_start_name,
R.string.article_dice_improved_start_descr,
R.drawable.icon_dice,
R.array.riddle_type_dice_article_improved_start_products,
new int[] {300, 500, 1000}));
addArticle(new ShopArticleSimple(ARTICLE_KEY_FLOW_BIGGER_FLOW, mPurse,
R.string.article_flow_stream_name,
R.string.article_flow_stream_descr,
R.drawable.icon_flow,
300));
sortArticles();
}
public Dependency getAnyDownloadProductPurchasedDependency() {
if (mAnyDownloadProductPurchasedDependency != null) {
return mAnyDownloadProductPurchasedDependency;
}
OrDependency dep = new OrDependency();
dep.setName(R.string.dependency_any_download_article_name);
for (ShopArticle article : mAllArticles) {
if (article.getKey().startsWith(ShopArticleDownload.KEY_PREFIX)) {
dep.add(TestSubject.getInstance().makeFeatureAvailableDependency(article.getKey()
, 2));
}
}
mAnyDownloadProductPurchasedDependency = dep;
return mAnyDownloadProductPurchasedDependency;
}
protected void addHintArticles() {
for (PracticalRiddleType type : PracticalRiddleType.getAll()) {
if (type.getTotalAvailableHintsCount() > 0) {
addArticle(new ShopArticleRiddleHints(type, mPurse, R.string.article_hint_name, R.string.article_hint_descr));
}
}
}
@Override
public void makeDependencies() {
super.makeDependencies();
// BRAIN BOOST aka LEVEL UP:
getArticle(LevelUpArticle.KEY_LEVEL_UP_ARTICLE)
// for level 1 we need to purchase lazor cutter for easier solving of circles riddle
.addDependency(TestSubject.getInstance().makeProductPurchasedDependency
(ARTICLE_KEY_CIRCLE_DIVIDE_BY_MOVE_FEATURE, ShopArticle
.GENERAL_PRODUCT_INDEX), 1)
// for level 2 we need to purchase any download product to know it is there
.addDependency(getAnyDownloadProductPurchasedDependency(), 2);
// NEW RIDDLES!
getArticle(RiddleArticle.KEY_CHOOSE_RIDDLE_ARTICLE)
// Add Level dependencies to some types, keep it mind that displayed level number
// is by one bigger and players start the game at internal level 0
.addDependency(LevelDependency.getInstance(2), PracticalRiddleType
.ALL_PLAYABLE_TYPES.indexOf(PracticalRiddleType.DICE_INSTANCE))
.addDependency(LevelDependency.getInstance(1), PracticalRiddleType
.ALL_PLAYABLE_TYPES.indexOf(PracticalRiddleType.JUMPER_INSTANCE))
.addDependency(LevelDependency.getInstance(4), PracticalRiddleType.ALL_PLAYABLE_TYPES.indexOf(PracticalRiddleType.MEMORY_INSTANCE))
.addDependency(LevelDependency.getInstance(2), PracticalRiddleType
.ALL_PLAYABLE_TYPES.indexOf(PracticalRiddleType.TRIANGLE_INSTANCE))
.addDependency(LevelDependency.getInstance(3), PracticalRiddleType
.ALL_PLAYABLE_TYPES.indexOf(PracticalRiddleType.SNOW_INSTANCE));
// DOWNLOAD ARTICLES
makeDownloadArticleLevelDependency(ShopArticleDownload.makeKey("fabian", "NoAnimal"), 6);
makeDownloadArticleLevelDependency(ShopArticleDownload.makeKey("fabian", "nature"), 5);
makeDownloadArticleLevelDependency(ShopArticleDownload.makeKey("fabian", "superlative"), 4);
// OTHER ARTICLES
getArticle(ARTICLE_KEY_CIRCLE_DIVIDE_BY_MOVE_FEATURE)
.addDependency(TestSubject.getInstance().getRiddleTypeDependency(PracticalRiddleType.CIRCLE_INSTANCE), ShopArticle.GENERAL_PRODUCT_INDEX);
getArticle(ARTICLE_KEY_TRIANGLE_DIVIDE_BY_MOVE_FEATURE)
.addDependency(TestSubject.getInstance().getRiddleTypeDependency(PracticalRiddleType.TRIANGLE_INSTANCE), ShopArticle.GENERAL_PRODUCT_INDEX)
.addDependency(TestSubject.getInstance().makeProductPurchasedDependency(ARTICLE_KEY_CIRCLE_DIVIDE_BY_MOVE_FEATURE, ShopArticle.GENERAL_PRODUCT_INDEX), ShopArticle.GENERAL_PRODUCT_INDEX);
getArticle(ARTICLE_KEY_SNOW_FEATURE_ORIENTATION_SENSOR)
.addDependency(TestSubject.getInstance().getRiddleTypeDependency(PracticalRiddleType.SNOW_INSTANCE), ShopArticle.GENERAL_PRODUCT_INDEX);
getArticle(ShopArticleRiddleHints.makeKey(PracticalRiddleType.CIRCLE_INSTANCE))
// before buying circle hints make sure the dividing feature and the first
// achievement are done
.addDependency(TestSubject.getInstance().makeProductPurchasedDependency
(ARTICLE_KEY_CIRCLE_DIVIDE_BY_MOVE_FEATURE, ShopArticle
.GENERAL_PRODUCT_INDEX), 1)
.addDependency(TestSubject.getInstance().makeAchievementDependency(PracticalRiddleType.CIRCLE_INSTANCE, AchievementCircle.Achievement1.NUMBER), 1);
getArticle(ARTICLE_KEY_JUMPER_START_FURTHER_FEATURE)
.addDependency(TestSubject.getInstance().makeAchievementDependency(PracticalRiddleType.JUMPER_INSTANCE, AchievementJumper.ACHIEVEMENT_SUPER_MARIO), ShopArticle.GENERAL_PRODUCT_INDEX)
.addDependency(TestSubject.getInstance().makeAchievementDependency(PracticalRiddleType.JUMPER_INSTANCE, AchievementJumper.ACHIEVEMENT_LACK_OF_TALENT), ShopArticle.GENERAL_PRODUCT_INDEX)
.addDependency(LevelDependency.getInstance(3), ShopArticle.GENERAL_PRODUCT_INDEX);
getArticle(ARTICLE_KEY_LAZOR_PROTECTION_AT_DIFFICULTY)
.addDependency(TestSubject.getInstance().getRiddleTypeDependency(PracticalRiddleType.LAZOR_INSTANCE), ShopArticle.GENERAL_PRODUCT_INDEX)
.addDependency(TestSubject.getInstance().makeAchievementDependency(PracticalRiddleType.LAZOR_INSTANCE, AchievementLazor.Achievement2.NUMBER), 0) // City protector
.addDependency(TestSubject.getInstance().makeAchievementDependency(PracticalRiddleType.LAZOR_INSTANCE, AchievementLazor.Achievement7.NUMBER), 1); // Shield protection
getArticle(ARTICLE_KEY_DICE_IMPROVED_START)
.addDependency(TestSubject.getInstance().getRiddleTypeDependency
(PracticalRiddleType.DICE_INSTANCE), ShopArticle.GENERAL_PRODUCT_INDEX)
.addDependency(TestSubject.getInstance().makeAchievementDependency
(PracticalRiddleType.DICE_INSTANCE, AchievementDice.Achievement10.NUMBER),
1)
.addDependency(LevelDependency.getInstance(5), 2);
getArticle(ARTICLE_KEY_FLOW_BIGGER_FLOW)
.addDependency(TestSubject.getInstance().getRiddleTypeDependency
(PracticalRiddleType.FLOW_INSTANCE), ShopArticle.GENERAL_PRODUCT_INDEX);
}
private void makeDownloadArticleLevelDependency(String key, int level) {
ShopArticle download = getArticle(key);
if (download != null) {
download.addDependency(LevelDependency.getInstance(level), ShopArticle
.GENERAL_PRODUCT_INDEX);
}
}
}