diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3c1ed71..eb97023 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -55,12 +55,18 @@ android:name=".ReviewActivity" android:theme="@style/AppTheme.NoActionBar" /> - + + + \ No newline at end of file diff --git a/app/src/main/java/com/rubenvandeven/emotionhero/AchievementCollection.java b/app/src/main/java/com/rubenvandeven/emotionhero/AchievementCollection.java index 0754357..b60a2fb 100644 --- a/app/src/main/java/com/rubenvandeven/emotionhero/AchievementCollection.java +++ b/app/src/main/java/com/rubenvandeven/emotionhero/AchievementCollection.java @@ -10,12 +10,12 @@ import java.util.ArrayList; public class AchievementCollection { private ArrayList achievements = new ArrayList(){{ // fill the collection :-) - add(new Achievement("Microexpressor", null, null)); - add(new Achievement("\"In pursuit of happiness\"", null, null)); - add(new Achievement("CEO", null, null)); - add(new Achievement("Kuleshov", null, null)); - add(new Achievement("Soap opera", null, null)); - add(new Achievement("Stock photo model", null, null)); + add(new Achievement("Microexpressor", "...", null)); + add(new Achievement("\"In pursuit of happiness\"", "...", null)); + add(new Achievement("CEO", "...", null)); + add(new Achievement("Kuleshov", "...", null)); + add(new Achievement("Soap opera", "...", null)); + add(new Achievement("Stock photo model", "...", null)); }}; private static AchievementCollection ourInstance = new AchievementCollection(); diff --git a/app/src/main/java/com/rubenvandeven/emotionhero/GameOpenHelper.java b/app/src/main/java/com/rubenvandeven/emotionhero/GameOpenHelper.java index 66163dc..d5de0de 100644 --- a/app/src/main/java/com/rubenvandeven/emotionhero/GameOpenHelper.java +++ b/app/src/main/java/com/rubenvandeven/emotionhero/GameOpenHelper.java @@ -2,6 +2,7 @@ package com.rubenvandeven.emotionhero; import android.content.ContentValues; import android.content.Context; +import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; @@ -233,10 +234,10 @@ public class GameOpenHelper extends SQLiteOpenHelper { public Game[] getGamesForLevel(int lvl_id) { Scenario scenario = new Scenario(lvl_id, null); - return getGamesForScenario(scenario); + return getGamesForScenario(scenario, null); } - public Game[] getGamesForScenario(Scenario s) { + public Game[] getGamesForScenario(Scenario s, Integer limit) { SQLiteDatabase db = getReadableDatabase(); String selection = "lvl_id = ?"; @@ -252,7 +253,7 @@ public class GameOpenHelper extends SQLiteOpenHelper { null, // don't group the rows null, // don't filter by row groups sortOrder, // The sort order - null // no limit! + limit == null ? null : Integer.toString(limit) // no limit! ); return cursorToGames(c, s); } @@ -366,6 +367,14 @@ public class GameOpenHelper extends SQLiteOpenHelper { hit.id = newRowId; } + public Game getHighscoreGameForScenario(Scenario scenario) { + Game[] games = getGamesForScenario(scenario, 1); + if(games == null || games.length == 0) { + return null; + } + return games[0]; + } + public ArrayList getHitsForGame(Game game) { SQLiteDatabase db = getReadableDatabase(); @@ -462,7 +471,7 @@ public class GameOpenHelper extends SQLiteOpenHelper { Cursor c = getReadableDatabase().rawQuery("SELECT achievement_id FROM games g INNER JOIN game_achievements ga ON ga.game_id = g.id WHERE g.id = ?", params); int count = c.getCount(); if(count < 1) - return null; + return new ArrayList(); ArrayList achievements = new ArrayList<>(count); c.moveToFirst(); diff --git a/app/src/main/java/com/rubenvandeven/emotionhero/GamingActivity.java b/app/src/main/java/com/rubenvandeven/emotionhero/GamingActivity.java index 458fca9..2e81b15 100644 --- a/app/src/main/java/com/rubenvandeven/emotionhero/GamingActivity.java +++ b/app/src/main/java/com/rubenvandeven/emotionhero/GamingActivity.java @@ -155,14 +155,16 @@ public class GamingActivity extends AppCompatActivity implements Detector.ImageL createSoundPool(); // instantiate SoundPool in sound soundIds.put(SOUND_SCORE, sound.load(this, R.raw.score2, 1)); - StoryDialogFragment storyDialog = new StoryDialogFragment(); - storyDialog.show(getSupportFragmentManager(), "StoryDialog"); +// StoryDialogFragment storyDialog = new StoryDialogFragment(); +// storyDialog.show(getSupportFragmentManager(), "StoryDialog"); Typeface font = Typeface.createFromAsset(getAssets(), "unifont-9.0.02.ttf"); mContentView.setTypeface(font); - titleText.setText(currentScenario.game.toString()); + titleText.setText(currentScenario.toString()); titleText.setTypeface(font); + + startGame(); } public void startGame() { diff --git a/app/src/main/java/com/rubenvandeven/emotionhero/HighscoreActivity.java b/app/src/main/java/com/rubenvandeven/emotionhero/HighscoreActivity.java index 6f63fd4..0513a2e 100644 --- a/app/src/main/java/com/rubenvandeven/emotionhero/HighscoreActivity.java +++ b/app/src/main/java/com/rubenvandeven/emotionhero/HighscoreActivity.java @@ -37,6 +37,7 @@ public class HighscoreActivity extends AppCompatActivity { public final static String INTENT_EXTRA_SCORE_ID = "com.rubenvandeven.emotionhero.SCORE_ID"; public final static String INTENT_EXTRA_GAME_ID = "com.rubenvandeven.emotionhero.GAME_ID"; + public final static String INTENT_EXTRA_LVL_ID = "com.rubenvandeven.emotionhero.LVL_ID"; /** * The {@link android.support.v4.view.PagerAdapter} that will provide @@ -82,6 +83,7 @@ public class HighscoreActivity extends AppCompatActivity { // } // get game from Intent String gameIdString = getIntent().getStringExtra(INTENT_EXTRA_GAME_ID); + int providedLvlId = getIntent().getIntExtra(INTENT_EXTRA_LVL_ID, 0); if(gameIdString != null) { long gameId = Long.valueOf(gameIdString); Game game = player.getGameOpenHelper().getGameByid(gameId); @@ -112,6 +114,10 @@ public class HighscoreActivity extends AppCompatActivity { if(game != null) { int levelpage = Scenario.SCENARIOS.indexOf(game.scenario.id); mViewPager.setCurrentItem(levelpage); + } else if(providedLvlId != 0) { + int levelpage = Scenario.SCENARIOS.indexOf(providedLvlId); + Log.e("HIGHSCORE", "page: "+levelpage); + mViewPager.setCurrentItem(levelpage); } @@ -186,7 +192,7 @@ public class HighscoreActivity extends AppCompatActivity { Player player = Player.getInstance(getContext()); GameOpenHelper gameOpenHelper = player.getGameOpenHelper(); - Game[] games = gameOpenHelper.getGamesForScenario(scenario); + Game[] games = gameOpenHelper.getGamesForScenario(scenario, null); if(gameId != 0) { Log.d("Highscore", "Request game: " + gameId); diff --git a/app/src/main/java/com/rubenvandeven/emotionhero/MirrorMenuActivity.java b/app/src/main/java/com/rubenvandeven/emotionhero/MirrorMenuActivity.java index d125330..968c3e6 100644 --- a/app/src/main/java/com/rubenvandeven/emotionhero/MirrorMenuActivity.java +++ b/app/src/main/java/com/rubenvandeven/emotionhero/MirrorMenuActivity.java @@ -174,7 +174,7 @@ public class MirrorMenuActivity extends AppCompatActivity implements Detector.Im highscoresButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Intent intent = new Intent(MirrorMenuActivity.this, HighscoreActivity.class); + Intent intent = new Intent(MirrorMenuActivity.this, ProgressActivity.class); // intent.putExtra(HighscoreActivity.INTENT_EXTRA_LEVEL, player.getPlayerInfo().reachedLevelId); startActivity(intent); } diff --git a/app/src/main/java/com/rubenvandeven/emotionhero/ProgressActivity.java b/app/src/main/java/com/rubenvandeven/emotionhero/ProgressActivity.java new file mode 100644 index 0000000..cd24e6c --- /dev/null +++ b/app/src/main/java/com/rubenvandeven/emotionhero/ProgressActivity.java @@ -0,0 +1,161 @@ +package com.rubenvandeven.emotionhero; + +import android.content.Intent; +import android.graphics.Typeface; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutCompat; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +public class ProgressActivity extends AppCompatActivity { + + Player player; + + LinearLayout levelsLayout; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + setContentView(R.layout.activity_progress); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setTitle("Progress"); + + levelsLayout = (LinearLayout) findViewById(R.id.levelsLayout); + + player = Player.getInstance(getApplicationContext()); + + } + + @Override + protected void onResume() { + super.onResume(); + // rebuild layout on each onResume, so that updated scores are refreshed + buildLayout(); + } + + public void buildLayout() { + levelsLayout.removeAllViews(); + + Typeface font = Typeface.createFromAsset(getAssets(), "unifont-9.0.02.ttf"); + + int defaultMargin = getResources().getDimensionPixelSize(R.dimen.fab_margin); + + TextView introText = new TextView(this); + introText.setText("0. Introduction"); + introText.setTextSize(getResources().getDimensionPixelSize(R.dimen.gametitle_textsize)); + introText.setTextColor(getResources().getColor(R.color.textHighlight)); + introText.setPadding(defaultMargin,defaultMargin,defaultMargin,defaultMargin); + introText.setId(R.id.textView); + introText.setTypeface(font); + + introText.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(ProgressActivity.this, IntroActivity.class); + startActivity(intent); + } + }); + + levelsLayout.addView(introText); + + int si = 1; + for(int lvl_id: Scenario.SCENARIOS) { + final Scenario scenario = new Scenario(lvl_id, null); + boolean hasAccess = player.getPlayerInfo().hasAccessToLevel(scenario.id); + Log.d("PROGRESS", "scenario: "+scenario.id); + + final Game highscoreGame = player.getGameOpenHelper().getHighscoreGameForScenario(scenario); + int playerAchievementCount = player.getGameOpenHelper().countAchievementsForLevel(scenario.id); + int totalAchievementCount = scenario.achievements.size(); + + RelativeLayout lvlLayout = new RelativeLayout(this); + lvlLayout.setPadding(defaultMargin,defaultMargin,defaultMargin,defaultMargin); + lvlLayout.setLayoutParams(new LinearLayoutCompat.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); + + TextView titleText = new TextView(this); +// titleText.setText(hasAccess ? scenario.toString() : "= LOCKED ="); + titleText.setText(String.format("%1$d. %2$s", si, scenario.toString())); + titleText.setTextSize(getResources().getDimensionPixelSize(R.dimen.gametitle_textsize)); + titleText.setTextColor(getResources().getColor(hasAccess ? R.color.textHighlight : R.color.textSecondary)); + titleText.setId(R.id.textView); + titleText.setTypeface(font); + + + lvlLayout.addView(titleText); + + TextView scoreText = new TextView(this); + String scoreString = (highscoreGame != null) ? String.format("%1$.2f", highscoreGame.score + highscoreGame.bonus) : (hasAccess ? "play now!" : "locked"); + scoreText.setText(scoreString); + scoreText.setTextColor(getResources().getColor(hasAccess ? R.color.textPrimary : R.color.textSecondary)); + scoreText.setTextSize(getResources().getDimensionPixelSize(R.dimen.highscore_textsize)); + RelativeLayout.LayoutParams scoreTextParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + scoreTextParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE); + scoreTextParams.addRule(RelativeLayout.BELOW, titleText.getId()); + scoreText.setId(R.id.scoreText); + scoreText.setLayoutParams(scoreTextParams); + + lvlLayout.addView(scoreText); + + if(playerAchievementCount > 0) { + TextView achievementText = new TextView(this); + achievementText.setText(String.format("+%1$d achievements", playerAchievementCount)); + achievementText.setTextColor(getResources().getColor(R.color.textSecondary)); + RelativeLayout.LayoutParams achievementTextParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + achievementTextParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE); + achievementTextParams.addRule(RelativeLayout.BELOW, scoreText.getId()); + achievementText.setLayoutParams(achievementTextParams); + lvlLayout.addView(achievementText); + } + + if(hasAccess) { + lvlLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent; + // TODO: is this behaviour confusing? + if(highscoreGame != null) { + // Clicking score -> highscores + intent = new Intent(ProgressActivity.this, HighscoreActivity.class); + intent.putExtra(HighscoreActivity.INTENT_EXTRA_LVL_ID, scenario.id); + } else { + // "PLAY NOW!" + intent = new Intent(ProgressActivity.this, GamingActivity.class); + intent.putExtra(GamingActivity.INTENT_EXTRA_SCENARIO, scenario.id); + } + startActivity(intent); + } + }); + } + + + levelsLayout.addView(lvlLayout); + + si++; + + } + + + TextView outroText = new TextView(this); + outroText.setText(String.format("Ending: %1$s", "\"All hail the Emotion Hero!\"")); +// outroText.setText(String.format("%1$d. %2$s", si, "Em07i0n H3r0!")); + outroText.setTextSize(getResources().getDimensionPixelSize(R.dimen.gametitle_textsize)); + outroText.setTextColor(getResources().getColor(R.color.textHighlight)); + outroText.setPadding(defaultMargin,defaultMargin,defaultMargin,defaultMargin); + outroText.setId(R.id.textView); + outroText.setTypeface(font); + // TODO: check if last level was sufficient (minscore/achievements) + + levelsLayout.addView(outroText); + } +} diff --git a/app/src/main/java/com/rubenvandeven/emotionhero/ReviewAchievementsActivity.java b/app/src/main/java/com/rubenvandeven/emotionhero/ReviewAchievementsActivity.java index d558e7e..7ef1866 100644 --- a/app/src/main/java/com/rubenvandeven/emotionhero/ReviewAchievementsActivity.java +++ b/app/src/main/java/com/rubenvandeven/emotionhero/ReviewAchievementsActivity.java @@ -2,6 +2,7 @@ package com.rubenvandeven.emotionhero; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.support.v7.widget.AppCompatTextView; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.WindowManager; @@ -56,6 +57,7 @@ public class ReviewAchievementsActivity extends AppCompatActivity { addAchievement(achievement); } + int toDiscover = game.scenario.achievements.size() - game.achievements.size(); if(toDiscover > 0) { @@ -63,19 +65,28 @@ public class ReviewAchievementsActivity extends AppCompatActivity { } else { toDiscoverText.setText("Wow, you obtained all achievements in one run!!"); } + + } public void addAchievement(Achievement achievement) { - TextView titleText = new TextView(this); - TextView descriptionText = new TextView(this); + AppCompatTextView titleText = new AppCompatTextView(this); + AppCompatTextView descriptionText = new AppCompatTextView(this); // ImageView imageView = new ImageView(this); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); + titleText.setText(achievement.title); +// titleText.setText("mwa"); titleText.setTextColor(getResources().getColor(R.color.textHighlight)); - titleText.setTextSize(R.dimen.highscore_textsize); + titleText.setTextSize(getResources().getDimensionPixelSize(R.dimen.highscore_textsize)); + titleText.setLayoutParams(params); + descriptionText.setText(achievement.description); descriptionText.setTextColor(getResources().getColor(R.color.textPrimary)); + descriptionText.setLayoutParams(params); + achievementsLayout.addView(titleText); achievementsLayout.addView(descriptionText); diff --git a/app/src/main/java/com/rubenvandeven/emotionhero/ReviewActivity.java b/app/src/main/java/com/rubenvandeven/emotionhero/ReviewActivity.java index 9f02781..1df00d7 100644 --- a/app/src/main/java/com/rubenvandeven/emotionhero/ReviewActivity.java +++ b/app/src/main/java/com/rubenvandeven/emotionhero/ReviewActivity.java @@ -167,6 +167,7 @@ public class ReviewActivity extends AppCompatActivity { lvlNameText.setTypeface(font); overallScorePercText.setTypeface(font); achievementArrow.setTypeface(font); + achievementText.setTypeface(font); retryArrow.setTypeface(font); improveArrow.setTypeface(font); nextLvlArrow.setTypeface(font); @@ -216,7 +217,7 @@ public class ReviewActivity extends AppCompatActivity { } public void checkAchievements() { - if(game.achievements.size() > 0) { + if(game.achievements != null && game.achievements.size() > 0) { achievementTitle.setVisibility(View.VISIBLE); achievementLayout.setVisibility(View.VISIBLE); @@ -225,7 +226,7 @@ public class ReviewActivity extends AppCompatActivity { if(achievementString.length() > 0) { achievementString += "\n"; } - achievementString += String.format("%2$s", achievement.title); + achievementString += String.format("%1$s", achievement.title); } achievementText.setText(achievementString); achievementLayout.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/rubenvandeven/emotionhero/Scenario.java b/app/src/main/java/com/rubenvandeven/emotionhero/Scenario.java index 99c80b8..d017d03 100644 --- a/app/src/main/java/com/rubenvandeven/emotionhero/Scenario.java +++ b/app/src/main/java/com/rubenvandeven/emotionhero/Scenario.java @@ -468,13 +468,13 @@ public class Scenario { switch(id) { case LVL_ANGER: - return "CEO"; + return "\"Smile like you mean it\""; case LVL_JOY: - return "The Conversation"; + return "The seven"; case LVL_SURPRISE: - return "Party time!"; + return "\"Let's talk business\""; case LVL_SADDNESS: - return "Six feet under"; + return "A sad sad situation"; } return "..."; } diff --git a/app/src/main/java/com/rubenvandeven/emotionhero/ScenarioView.java b/app/src/main/java/com/rubenvandeven/emotionhero/ScenarioView.java index f23f9a9..55a5647 100644 --- a/app/src/main/java/com/rubenvandeven/emotionhero/ScenarioView.java +++ b/app/src/main/java/com/rubenvandeven/emotionhero/ScenarioView.java @@ -288,8 +288,6 @@ public class ScenarioView extends SurfaceView implements SurfaceHolder.Callback canvas.drawRect(0, height*0.95f, bonusWidth, height*0.975f, bonusBarPaint); } - - } // TODO: create AttributeScoreCollection class, with this method. diff --git a/app/src/main/res/layout/activity_progress.xml b/app/src/main/res/layout/activity_progress.xml new file mode 100644 index 0000000..d75e311 --- /dev/null +++ b/app/src/main/res/layout/activity_progress.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index c16f46a..ca45e7a 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -5,4 +5,5 @@ 16dp 8dp 15sp + 12sp