package letzplay.core; import java.util.ArrayList; import java.util.List; public class GameEngine implements Trigger { private LevelSystem lvlSys; private List quests; private List state; private GameEngine() { lvlSys = LevelSystem.getInstance(); quests = new ArrayList<>(); state = new ArrayList<>(); } public static GameEngine getInstance() { return new GameEngine(); } public void initQuests(List qs) { this.quests = qs; } private void finishQuest(Quest q) { if (q.progression().done == q.progression().of && !q.finished()) { q.setFinished(); lvlSys.addExperience(q.getGainExp()); } } public List availableQuests() { List result = new ArrayList<>(); for (Quest q : quests ) { if (q.getMinLvl() <= lvlSys.currentLvl() && !q.finished()) { result.add(q); } } return result; } public List doneQuests() { List result = new ArrayList<>(); for (Quest q : quests ) { if (q.finished()) { result.add(q); } } return result; } public int currentLvl() { return lvlSys.currentLvl(); } public float currentExp() { return lvlSys.currentExperience(); } public void update() { for (Quest q : quests ) { if (q.getMinLvl() <= lvlSys.currentLvl()) { finishQuest(q); } } } @Override public String toString() { return lvlSys.toString() + "\n " + quests.toString(); } @Override public void trigger(String msg) { state.add(msg); for (Quest q : quests) { q.trigger(msg); } } public List getState() { return state; } }