AchievementSystem.java

package com.skloch.game.AchievementSystem;

import com.skloch.game.AchievementSystem.Achievements.*;

import java.util.ArrayList;

/**
 * To use the Achievement System somewhere, use AchievementSystem.getInstance();
 * The achievement system is a singleton so it is accessible everywhere.
 */
public class AchievementSystem {
    private static AchievementSystem instance;

    private final Achievements firstTimeEatenAchievement;
    private final Achievements eatMultipleTimesAchievement;

    private final Achievements firstTimeSleptAchievement;
    private final Achievements sleepMultipleTimesAchievement;

    private final Achievements firstTimeRecreationAchievement;
    private final Achievements recreationalMultipleTimesAchievement;

    private final Achievements firstTimeStudiedAchievement;
    private final Achievements studyMultipleTimesAchievement;

    private final Achievements distanceTraveledAchievement;

    private final ArrayList<Achievements> Achievementslist = new ArrayList<Achievements>();

    public AchievementSystem() {
        firstTimeEatenAchievement = new FirstTimeEatenAchievement();
        eatMultipleTimesAchievement = new EatMultipleTimesAchievement();

        firstTimeSleptAchievement = new FirstTimeSleptAchievement();
        sleepMultipleTimesAchievement = new SleepMultipleTimesAchievement();

        firstTimeRecreationAchievement = new FirstTimeRecreationAchievement();
        recreationalMultipleTimesAchievement = new RecreationalMultipleTimesAchievement();

        firstTimeStudiedAchievement = new FirstTimeStudiedAchievement();
        studyMultipleTimesAchievement = new StudyMultipleTimesAchievement();

        distanceTraveledAchievement = new DistanceTraveledAchievement();

        Achievementslist.add(firstTimeEatenAchievement);
        Achievementslist.add(eatMultipleTimesAchievement);
        Achievementslist.add(firstTimeSleptAchievement);
        Achievementslist.add(sleepMultipleTimesAchievement);
        Achievementslist.add(firstTimeRecreationAchievement);
        Achievementslist.add(recreationalMultipleTimesAchievement);
        Achievementslist.add(firstTimeStudiedAchievement);
        Achievementslist.add(studyMultipleTimesAchievement);
        Achievementslist.add(distanceTraveledAchievement);
    }

    /**
     * @return Returns the same achievement system everywhere.
     */
    public static AchievementSystem getInstance() {
        if (instance == null) {
            instance = new AchievementSystem();
        }
        return instance;
    }

    public ArrayList<Achievements> getCompletedAchievements() {
        ArrayList<Achievements> completed = new ArrayList<Achievements>();

        //getFirstTimeEatenAchievement().setUnlocked(true);
        //uncomment above line to test achievement display

        for (int i = 0; i < this.Achievementslist.size(); i++) {
            if (this.Achievementslist.get(i).isUnlocked()) {
                completed.add(this.Achievementslist.get(i));
            }
        }

        return completed;
    }

    public void resetAchievements(){
        for (int i = 0; i < this.Achievementslist.size(); i++) {
            this.Achievementslist.get(i).reset();
        }
    }

    public void addAchievement(Achievements achievement) {
        this.Achievementslist.add(achievement);
    }

    public Achievements getFirstTimeEatenAchievement() {
        return this.firstTimeEatenAchievement;
    }

    public Achievements getEatMultipleTimesAchievement() {
        return this.eatMultipleTimesAchievement;
    }

    public Achievements getFirstTimeSleptAchievement() {
        return this.firstTimeSleptAchievement;
    }

    public Achievements getSleepMultipleTimesAchievement() {
        return this.sleepMultipleTimesAchievement;
    }

    public Achievements getFirstTimeRecreationAchievement() {
        return this.firstTimeRecreationAchievement;
    }

    public Achievements getRecreationalMultipleTimesAchievement() {
        return this.recreationalMultipleTimesAchievement;
    }

    public Achievements getFirstTimeStudiedAchievement() {
        return this.firstTimeStudiedAchievement;
    }

    public Achievements getStudyMultipleTimesAchievement() {
        return this.studyMultipleTimesAchievement;
    }

    public Achievements getDistanceTraveledAchievement() {
        return this.distanceTraveledAchievement;
    }
}