/* * 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; import android.content.res.Resources; import android.graphics.Typeface; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.StyleSpan; import android.view.View; import android.widget.TextView; import dan.dit.whatsthat.R; import dan.dit.whatsthat.preferences.User; import dan.dit.whatsthat.riddle.types.PracticalRiddleType; import dan.dit.whatsthat.testsubject.intro.Episode; import dan.dit.whatsthat.testsubject.intro.EpisodeBuilder; import dan.dit.whatsthat.testsubject.intro.GeneralStartingEpisode; import dan.dit.whatsthat.testsubject.intro.Intro; import dan.dit.whatsthat.testsubject.intro.QuestionEpisode; /** * Created by daniel on 08.08.15. */ public abstract class TestSubjectLevel { public static final int LEVEL_NONE = -1; protected TestSubject mTestSubject; protected int mNameResId; protected int mIntelligenceResId; protected int[] mImageResId = new int[TestSubject.GENDERS_COUNT]; // indexed by gender protected int[] mBaseImageResId = new int[TestSubject.GENDERS_COUNT]; // indexed by gender protected int mRiddleSolvedCandy; protected String[] mTextMain; protected String[] mTextNuts; protected TestSubjectLevel(TestSubject testSubject) { mTestSubject = testSubject; } protected static TestSubjectLevel[] makeAll(TestSubject testSubject) { return new TestSubjectLevel[] { new TestSubjectLevel0(testSubject), new TestSubjectLevel1(testSubject), new TestSubjectLevel2(testSubject), new TestSubjectLevel3(testSubject), new TestSubjectLevel4(testSubject), new TestSubjectLevel5(testSubject), new TestSubjectLevel6(testSubject), new TestSubjectLevel7(testSubject) //new TestSubjectLevel8(testSubject), //new TestSubjectLevel9(testSubject) }; } public Episode makeEpisodes(Intro intro) { EpisodeBuilder builder = new EpisodeBuilder(intro); makeMainIntroEpisodes(builder); makeSubIntroEpisodes(builder); return builder.build(); } protected abstract void makeMainIntroEpisodes(EpisodeBuilder builder); public void makeSubIntroEpisodes(EpisodeBuilder builder) { if (mTextNuts != null && mTextNuts.length > 0) { int lastIndex = builder.getAll().size() - 1; builder.nextEpisodes("SA", mTextNuts); // make cyclic: last sub episode has first sub episode as child builder.getCurrentEpisode().addChild(builder.getAll().get(lastIndex + 1)); } } /** * Invoked whenever necessary to set and load required fields for this level. */ protected abstract void applyLevel(Resources res); /** * Invoked when the level is reached for the first time. */ protected abstract void onLeveledUp(); /** * Returns the basic testsubject image without fancy markers and level indicators. * @return The basic testsubject image resource id, if not specified the default image * resource id. */ public int getBaseImageResourceId() { int gender = TestSubject.getInstance().getGender(); if (gender == TestSubject.GENDER_NOT_CHOSEN) { return R.drawable.kid_abduction; } int resId = mBaseImageResId[gender]; if (resId == 0) { return getImageResourceId(); // default to the image resource } return resId; } public int getImageResourceId() { int gender = TestSubject.getInstance().getGender(); if (gender == TestSubject.GENDER_NOT_CHOSEN) { return R.drawable.kid_abduction; } int resId = mImageResId[gender]; if (resId == 0) { return R.drawable.kid_abduction; // fallback image in case some was not set } return resId; } public abstract double getLevelUpAchievementScoreFraction(); public Intro makeIntro(Intro intro) { Resources res = intro.getResources(); // Create the running text SpannableStringBuilder longDescription = new SpannableStringBuilder(); longDescription.append(res.getString(R.string.intro_test_subject_name)); int start = longDescription.length(); longDescription.append(res.getString(mNameResId)); longDescription.setSpan(new StyleSpan(Typeface.ITALIC), start, longDescription.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); longDescription.append('\t'); longDescription.append(res.getString(R.string.intro_test_subject_estimated_intelligence)); start = longDescription.length(); longDescription.append(res.getString(mIntelligenceResId)); longDescription.setSpan(new StyleSpan(Typeface.ITALIC), start, longDescription.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); TextView subjectDescr = ((TextView) intro.findViewById(R.id.intro_subject_descr)); subjectDescr.setText(longDescription); subjectDescr.setVisibility(View.INVISIBLE); new GeneralStartingEpisode(intro, res.getString(R.string.intro_starting_episode, res .getString(mNameResId)), this).start(); if (intro.getCurrentEpisode() == null) { intro.nextEpisode(); // if this level is loaded for the first time we need to set the initial episode } else { intro.startUnmanagedEpisode(intro.getCurrentEpisode()); } return intro; } private static class TestSubjectLevel0 extends TestSubjectLevel { protected TestSubjectLevel0(TestSubject testSubject) { super(testSubject); } @Override public void makeMainIntroEpisodes(EpisodeBuilder builder) { // general intro builder.setCurrentIcon(0) .nextEpisodes("M0", R.array.test_subject_0_0_intro_main) //dr kulg presentation .setCurrentIcon(R.drawable.intro_dr_kulg) .nextEpisodes("M1", R.array.test_subject_0_1_intro_main) // gender question, mandatory .setCurrentIcon(0) .nextEpisode(new QuestionEpisode("MQ2", builder.getIntro(), true, R.array.test_subject_0_2_intro_main, new int[]{R.string.intro_test_subject_gender_answer_male, R.string.intro_test_subject_gender_answer_female, R.string.intro_test_subject_gender_answer_whatever}, new QuestionEpisode.OnQuestionAnsweredCallback() { @Override public int onQuestionAnswered(QuestionEpisode episode, int answerIndex) { switch (answerIndex) { case 0: mTestSubject.setGender(TestSubject.GENDER_MALE); break; case 1: mTestSubject.setGender(TestSubject.GENDER_FEMALE); break; case 2: mTestSubject.setGender(TestSubject.GENDER_WHATEVER); break; case 3: mTestSubject.setGender(TestSubject.GENDER_ALIEN); break; } return QuestionEpisode.ANSWER_REACTION_NEXT_EPISODE; } })); // rest of the episodes builder.setCurrentIcon(0) .nextEpisodes("M3", R.array.test_subject_0_3_intro_main); } @Override public void makeSubIntroEpisodes(EpisodeBuilder builder) { int firstSubIndex = builder.getAll().size(); builder.setCurrentIcon(0); // Test: 13 is prime question builder.nextEpisodes("S0", R.array.test_subject_0_0_intro_nuts); builder.nextEpisode(new QuestionEpisode("SQ1", builder.getIntro(), false, R.array.test_subject_0_1_intro_nuts, new int[]{R.string.intro_test_answer_yes, R.string.intro_test_answer_no, R.string.intro_test_answer_bullshit}, new QuestionEpisode.OnQuestionAnsweredCallback() { @Override public int onQuestionAnswered(QuestionEpisode episode, int answerIndex) { return QuestionEpisode.ANSWER_REACTION_NEXT_EPISODE; } }) ); // in between texts and then chocolate builder.nextEpisodes("S2", R.array.test_subject_0_2_intro_nuts) .nextEpisodes("S3", R.array.test_subject_0_3_intro_nuts) .setCurrentIcon(R.drawable.chocolate_thought) .nextEpisodes("S4", R.array.test_subject_0_4_intro_nuts) .setCurrentIcon(0) .nextEpisodes("S5", R.array.test_subject_0_5_intro_nuts) .getCurrentEpisode().addChild(builder.getAll().get(firstSubIndex)); } @Override protected void applyLevel(Resources res) { mNameResId = R.string.test_subject_0_name; mIntelligenceResId = R.string.test_subject_0_int; mImageResId[TestSubject.GENDER_MALE] = R.drawable.kid00; mImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem00; mImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani00; mTextNuts = res.getStringArray(R.array.test_subject_0_0_intro_nuts); mRiddleSolvedCandy = R.array.test_subject_0_riddle_solved_candy; } @Override protected void onLeveledUp() { mTestSubject.addNewType(PracticalRiddleType.CIRCLE_INSTANCE); } @Override public double getLevelUpAchievementScoreFraction() { return 0.0; } // level is reached at // game start } private static class TestSubjectLevel1 extends TestSubjectLevel { protected TestSubjectLevel1(TestSubject testSubject) { super(testSubject); } @Override public void makeMainIntroEpisodes(EpisodeBuilder builder) { builder.nextEpisodes("M0", R.array.test_subject_1_0_intro_main); builder.nextEpisode(new QuestionEpisode("MQ1", builder.getIntro(), false, R.array .test_subject_1_1_intro_main, new int[]{R.string.intro_test_answer_chocolate, R.string .intro_test_answer_donut, R.string.intro_test_answer_cookie}, new QuestionEpisode.OnQuestionAnsweredCallback() { @Override public int onQuestionAnswered(QuestionEpisode episode, int answerIndex) { return answerIndex; } }) .addAnswer(R.array.test_subject_1_2a_intro_main) .addAnswer(R.array.test_subject_1_2b_intro_main) .addAnswer(R.array.test_subject_1_2c_intro_main)); builder.joinCurrentChildrenToNext(); builder.nextEpisodes("M3", R.array.test_subject_1_3_intro_main); builder.nextEpisode(new QuestionEpisode("MQ4", builder.getIntro(), true, R.array .test_subject_1_4_intro_main, new int[]{R.string.intro_test_answer_minus18, R.string.intro_test_answer_9, R.string.intro_test_answer_256, R.string.intro_test_answer_217341}, new QuestionEpisode.OnQuestionAnsweredCallback() { @Override public int onQuestionAnswered(QuestionEpisode episode, int answerIndex) { return answerIndex; } }) .addAnswer(R.array.test_subject_1_5a_intro_main) .addAnswer(R.array.test_subject_1_5a_intro_main) .addAnswer(R.array.test_subject_1_5a_intro_main) .addAnswer(R.array.test_subject_1_5b_intro_main)); builder.joinCurrentChildrenToNext(); builder.nextEpisodes("M6", R.array.test_subject_1_6_intro_main); } @Override protected void applyLevel(Resources res) { mNameResId = R.string.test_subject_1_name; mIntelligenceResId = R.string.test_subject_1_int; mImageResId[TestSubject.GENDER_MALE] = R.drawable.kid01; mImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem01; mImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani01; mBaseImageResId[TestSubject.GENDER_MALE] = R.drawable.kid00; mBaseImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem00; mBaseImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani01_base; mTextNuts = res.getStringArray(R.array.test_subject_1_intro_nuts); mRiddleSolvedCandy = R.array.test_subject_1_riddle_solved_candy; mTestSubject.ensureSkipableGames(TestSubject.DEFAULT_SKIPABLE_GAMES + 2); } @Override protected void onLeveledUp() { } @Override public double getLevelUpAchievementScoreFraction() { return 0.09; } } private static class TestSubjectLevel2 extends TestSubjectLevel { protected TestSubjectLevel2(TestSubject testSubject) { super(testSubject); } @Override public void makeMainIntroEpisodes(EpisodeBuilder builder) { builder.nextEpisodes("M0", R.array.test_subject_2_0_intro_main); builder.nextEpisodes("M1", R.array.test_subject_2_1_intro_main); builder.nextEpisodes("M2", R.array.test_subject_2_2_intro_main); builder.nextEpisode(new QuestionEpisode("MQ3", builder.getIntro(), false, R.array .test_subject_2_3_intro_main, new int[]{R.string.intro_test_answer_6, R.string.intro_test_answer_potatosalad}, new QuestionEpisode.OnQuestionAnsweredCallback() { @Override public int onQuestionAnswered(QuestionEpisode episode, int answerIndex) { return answerIndex; } }) .addAnswer(R.array.test_subject_2_4a_intro_main) .addAnswer(R.array.test_subject_2_4b_intro_main)); builder.joinCurrentChildrenToNext(); builder.nextEpisodes("M5", R.array.test_subject_2_5_intro_main); } @Override protected void applyLevel(Resources res) { mNameResId = R.string.test_subject_2_name; mIntelligenceResId = R.string.test_subject_2_int; mImageResId[TestSubject.GENDER_MALE] = R.drawable.kid02; mImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem02; mImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani02; mTextNuts = res.getStringArray(R.array.test_subject_2_intro_nuts); mRiddleSolvedCandy = R.array.test_subject_2_riddle_solved_candy; mTestSubject.ensureSkipableGames(TestSubject.DEFAULT_SKIPABLE_GAMES + 3); } @Override protected void onLeveledUp() { } @Override public double getLevelUpAchievementScoreFraction() { return 0.15; } } private static class TestSubjectLevel3 extends TestSubjectLevel { protected TestSubjectLevel3(TestSubject testSubject) { super(testSubject); } private int mCorrectQuestionAnsweredCount; @Override public void makeMainIntroEpisodes(EpisodeBuilder builder) { builder.nextEpisodes("M0", R.array.test_subject_3_0_intro_main); builder.nextEpisode(new QuestionEpisode("MQ1", builder.getIntro(), false, R.array .test_subject_3_1_intro_main, new int[]{R.string.intro_test_answer_3, R.string.intro_test_answer_4, R.string.intro_test_answer_5, R.string.intro_test_answer_6}, new QuestionEpisode.OnQuestionAnsweredCallback() { @Override public int onQuestionAnswered(QuestionEpisode episode, int answerIndex) { if (answerIndex == 2) { mCorrectQuestionAnsweredCount++; } return answerIndex; } }) .addAnswer(R.array.test_subject_3_2a_intro_main) .addAnswer(R.array.test_subject_3_2a_intro_main) .addAnswer(R.array.test_subject_3_2b_intro_main) .addAnswer(R.array.test_subject_3_2a_intro_main)); builder.joinCurrentChildrenToNext(); builder.nextEpisode(new QuestionEpisode("MQ3", builder.getIntro(), false, R.array .test_subject_3_3_intro_main, new int[]{R.string.intro_test_answer_3, R.string.intro_test_answer_4, R.string.intro_test_answer_5, R.string.intro_test_answer_6}, new QuestionEpisode.OnQuestionAnsweredCallback() { @Override public int onQuestionAnswered(QuestionEpisode episode, int answerIndex) { if (answerIndex == 2) { mCorrectQuestionAnsweredCount++; } return answerIndex; } }) .addAnswer(R.array.test_subject_3_4a_intro_main) .addAnswer(R.array.test_subject_3_4a_intro_main) .addAnswer(R.array.test_subject_3_4b_intro_main) .addAnswer(R.array.test_subject_3_4a_intro_main)); builder.joinCurrentChildrenToNext(); builder.nextEpisode(new QuestionEpisode("MQ5", builder.getIntro(), false, R.array .test_subject_3_5_intro_main, new int[]{R.string.intro_test_answer_3, R.string.intro_test_answer_4, R.string.intro_test_answer_5, R.string.intro_test_answer_6}, new QuestionEpisode.OnQuestionAnsweredCallback() { @Override public int onQuestionAnswered(QuestionEpisode episode, int answerIndex) { if (answerIndex == 3) { mCorrectQuestionAnsweredCount++; if (mCorrectQuestionAnsweredCount ==3 ){ return 4; } } return answerIndex; } }) .addAnswer(R.array.test_subject_3_6a_intro_main) .addAnswer(R.array.test_subject_3_6a_intro_main) .addAnswer(R.array.test_subject_3_6a_intro_main) .addAnswer(R.array.test_subject_3_6c_intro_main) .addAnswer(R.array.test_subject_3_6b_intro_main)); builder.joinCurrentChildrenToNext(); builder.nextEpisodes("M7", R.array.test_subject_3_7_intro_main); } @Override protected void applyLevel(Resources res) { mNameResId = R.string.test_subject_3_name; mIntelligenceResId = R.string.test_subject_3_int; mImageResId[TestSubject.GENDER_MALE] = R.drawable.kid03; mImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem03; mImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani03; mBaseImageResId[TestSubject.GENDER_MALE] = R.drawable.kid02; mBaseImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem02; mBaseImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani03_base; mTextNuts = res.getStringArray(R.array.test_subject_3_intro_nuts); mRiddleSolvedCandy = R.array.test_subject_3_riddle_solved_candy; mTestSubject.ensureSkipableGames(TestSubject.DEFAULT_SKIPABLE_GAMES + 4); } @Override protected void onLeveledUp() { } @Override public double getLevelUpAchievementScoreFraction() { return 0.18; } } private static class TestSubjectLevel4 extends TestSubjectLevel { protected TestSubjectLevel4(TestSubject testSubject) { super(testSubject); } @Override public void makeMainIntroEpisodes(EpisodeBuilder builder) { builder.nextEpisodes("M0", R.array.test_subject_4_0_intro_main); builder.nextEpisodes("M1", R.array.test_subject_4_1_intro_main); } @Override protected void applyLevel(Resources res) { mNameResId = R.string.test_subject_4_name; mIntelligenceResId = R.string.test_subject_4_int; mImageResId[TestSubject.GENDER_MALE] = R.drawable.kid04; mImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem04; mImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani04; mBaseImageResId[TestSubject.GENDER_MALE] = R.drawable.kid02; mBaseImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem02; mBaseImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani04_base; mTextNuts = res.getStringArray(R.array.test_subject_4_intro_nuts); mRiddleSolvedCandy = R.array.test_subject_4_riddle_solved_candy; mTestSubject.ensureSkipableGames(TestSubject.DEFAULT_SKIPABLE_GAMES + 5); } @Override protected void onLeveledUp() { } @Override public double getLevelUpAchievementScoreFraction() { return 0.25; } } private static class TestSubjectLevel5 extends TestSubjectLevel { protected TestSubjectLevel5(TestSubject testSubject) { super(testSubject); } @Override public void makeMainIntroEpisodes(EpisodeBuilder builder) { builder.nextEpisodes("M0", R.array.test_subject_5_0_intro_main); builder.nextEpisodes("M1", R.array.test_subject_5_1_intro_main); } @Override protected void applyLevel(Resources res) { mNameResId = R.string.test_subject_5_name; mIntelligenceResId = R.string.test_subject_5_int; mImageResId[TestSubject.GENDER_MALE] = R.drawable.kid05; mImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem05; mImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani05; mBaseImageResId[TestSubject.GENDER_MALE] = R.drawable.kid02; mBaseImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem02; mBaseImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani05_base; mTextNuts = res.getStringArray(R.array.test_subject_5_intro_nuts); mRiddleSolvedCandy = R.array.test_subject_5_riddle_solved_candy; mTestSubject.ensureSkipableGames(TestSubject.DEFAULT_SKIPABLE_GAMES + 6); } @Override protected void onLeveledUp() { } @Override public double getLevelUpAchievementScoreFraction() { return 0.35; } } private static class TestSubjectLevel6 extends TestSubjectLevel { protected TestSubjectLevel6(TestSubject testSubject) { super(testSubject); } @Override public void makeMainIntroEpisodes(EpisodeBuilder builder) { builder.nextEpisodes("M0", R.array.test_subject_6_0_intro_main); builder.nextEpisodes("M1", R.array.test_subject_6_1_intro_main); builder.nextEpisode(new QuestionEpisode("MQ3", builder.getIntro(), false, R.array .test_subject_6_2_intro_main, new int[]{R.string.intro_test_answer_radiation, R.string.intro_test_answer_eh, R.string.intro_test_answer_potatosalad}, new QuestionEpisode.OnQuestionAnsweredCallback() { @Override public int onQuestionAnswered(QuestionEpisode episode, int answerIndex) { return answerIndex; } }) .addAnswer(R.array.test_subject_6_3a_intro_main) .addAnswer(R.array.test_subject_6_3b_intro_main) .addAnswer(R.array.test_subject_6_3c_intro_main)); builder.joinCurrentChildrenToNext(); builder.nextEpisodes("M4", R.array.test_subject_6_4_intro_main); builder.nextEpisode(new QuestionEpisode("MQ5", builder.getIntro(), false, R.array .test_subject_6_5_intro_main, new int[]{R.string.intro_test_answer_no, R.string.intro_test_answer_nope, R.string.intro_test_answer_eh, R.string.intro_test_answer_lolno}, new QuestionEpisode.OnQuestionAnsweredCallback() { @Override public int onQuestionAnswered(QuestionEpisode episode, int answerIndex) { return answerIndex; } }) .addAnswer(R.array.test_subject_6_intro_nuts)); //TODO same way to answer like "Test: 13 is prime question"? builder.joinCurrentChildrenToNext(); } @Override protected void applyLevel(Resources res) { mNameResId = R.string.test_subject_6_name; mIntelligenceResId = R.string.test_subject_6_int; mImageResId[TestSubject.GENDER_MALE] = R.drawable.kid06; mImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem06; mImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani06; mTextNuts = res.getStringArray(R.array.test_subject_6_intro_nuts); mRiddleSolvedCandy = R.array.test_subject_6_riddle_solved_candy; mTestSubject.ensureSkipableGames(TestSubject.DEFAULT_SKIPABLE_GAMES + 7); } @Override protected void onLeveledUp() { } @Override public double getLevelUpAchievementScoreFraction() { return 0.5; } } private static class TestSubjectLevel7 extends TestSubjectLevel { protected TestSubjectLevel7(TestSubject testSubject) { super(testSubject); } @Override public void makeMainIntroEpisodes(EpisodeBuilder builder) { builder.nextEpisodes("M0", R.array.test_subject_7_0_intro_main); } @Override protected void applyLevel(Resources res) { mNameResId = R.string.test_subject_7_name; mIntelligenceResId = R.string.test_subject_7_int; mImageResId[TestSubject.GENDER_MALE] = R.drawable.kid07; mImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem07; mImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani07; mBaseImageResId[TestSubject.GENDER_MALE] = R.drawable.kid06; mBaseImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem06; mBaseImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani07_base; mTextNuts = res.getStringArray(R.array.test_subject_7_intro_nuts); mRiddleSolvedCandy = R.array.test_subject_7_riddle_solved_candy; mTestSubject.ensureSkipableGames(TestSubject.DEFAULT_SKIPABLE_GAMES + 8); } @Override protected void onLeveledUp() { User.getInstance().givePermission(User.PERMISSION_WORKSHOP); } @Override public double getLevelUpAchievementScoreFraction() { return 0.60; } } private static class TestSubjectLevel8 extends TestSubjectLevel { protected TestSubjectLevel8(TestSubject testSubject) { super(testSubject); } @Override public void makeMainIntroEpisodes(EpisodeBuilder builder) { builder.nextEpisodes("M0", R.array.test_subject_8_intro_main); } @Override protected void applyLevel(Resources res) { mNameResId = R.string.test_subject_8_name; mIntelligenceResId = R.string.test_subject_8_int; mImageResId[TestSubject.GENDER_MALE] = R.drawable.kid08; mImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem08; mImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani08; mBaseImageResId[TestSubject.GENDER_MALE] = R.drawable.kid06; mBaseImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem06; mBaseImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani08_base; mTextNuts = res.getStringArray(R.array.test_subject_8_intro_nuts); mRiddleSolvedCandy = R.array.test_subject_8_riddle_solved_candy; mTestSubject.ensureSkipableGames(TestSubject.DEFAULT_SKIPABLE_GAMES + 8); } @Override protected void onLeveledUp() { } @Override public double getLevelUpAchievementScoreFraction() { return 0.7; } } private static class TestSubjectLevel9 extends TestSubjectLevel { protected TestSubjectLevel9(TestSubject testSubject) { super(testSubject); } @Override public void makeMainIntroEpisodes(EpisodeBuilder builder) { builder.nextEpisodes("M0", R.array.test_subject_9_intro_main); } @Override protected void applyLevel(Resources res) { mNameResId = R.string.test_subject_9_name; mIntelligenceResId = R.string.test_subject_9_int; mImageResId[TestSubject.GENDER_MALE] = R.drawable.kid09; mImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem09; mImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani09; mBaseImageResId[TestSubject.GENDER_MALE] = R.drawable.kid06; mBaseImageResId[TestSubject.GENDER_FEMALE] = R.drawable.kid_fem06; mBaseImageResId[TestSubject.GENDER_WHATEVER] = R.drawable.kid_ani09;//FIXME change mTextNuts = res.getStringArray(R.array.test_subject_9_intro_nuts); mRiddleSolvedCandy = R.array.test_subject_9_riddle_solved_candy; mTestSubject.ensureSkipableGames(TestSubject.DEFAULT_SKIPABLE_GAMES + 8); } @Override protected void onLeveledUp() { } @Override public double getLevelUpAchievementScoreFraction() { return 0.8; } } }