/* * Copyright (c) 2012. HappyDroids LLC, All rights reserved. */ package com.happydroids.droidtowers.achievements; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.utils.Pools; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Maps; import com.happydroids.droidtowers.events.AchievementCompletionEvent; import com.happydroids.droidtowers.gamestate.server.TowerGameService; import com.happydroids.droidtowers.grid.GameGrid; import com.happydroids.droidtowers.gui.TutorialStepNotification; import java.io.IOException; import java.util.ArrayList; public class TutorialEngine extends AchievementEngine { private static TutorialEngine instance; private boolean enabled; public static TutorialEngine instance() { if (instance == null) { instance = new TutorialEngine(); } return instance; } protected TutorialEngine() { try { ObjectMapper mapper = TowerGameService.instance().getObjectMapper(); achievements = mapper.readValue(Gdx.files.internal("params/tutorial-steps.json").reader(), mapper.getTypeFactory() .constructCollectionType(ArrayList.class, TutorialStep.class)); achievementsById = Maps.newHashMap(); for (int i = 0, achievementsSize = achievements.size(); i < achievementsSize; i++) { Achievement achievement = achievements.get(i); achievementsById.put(achievement.getId(), achievement); } } catch (IOException e) { throw new RuntimeException(e); } } @Override public void checkAchievements(GameGrid gameGrid) { if (enabled) { super.checkAchievements(gameGrid); } } public void moveToStepWhenReady(String stepId) { complete(stepId); } @Override protected void complete(Achievement achievement) { TutorialStep tutorialStep = (TutorialStep) achievement; if (tutorialStep.isLocked() || tutorialStep.hasGivenReward() || tutorialStep.hasShownNotification()) { return; } tutorialStep.setCompleted(true); if (!tutorialStep.requiresTapToGiveReward()) { tutorialStep.giveReward(); } if (enabled) { tutorialStep.shownNotification(); new TutorialStepNotification(tutorialStep).show(); AchievementCompletionEvent event = Pools.obtain(AchievementCompletionEvent.class); event.setAchievement(tutorialStep); eventBus.post(event); Pools.free(event); } } public void setEnabled(boolean enabled) { this.enabled = enabled; resetState(); } }