package storage;
import flixel.FlxG;
/**
* All saves and game progress should go through this class only!
*
* @author Shaun Stone
*/
class GameProgress
{
private static inline var RANK_START:Int = 1;
public static function storeLevelProgress(levelId:Int):Void
{
GameProgress.setCurrentLevel(levelId);
if (FlxG.save.data.highestLevel == null) {
FlxG.save.data.highestLevel = levelId;
}
if (FlxG.save.data.highestLevel < levelId) {
FlxG.save.data.highestLevel = levelId;
}
}
public static function setCurrentLevel(levelId:Int)
{
Reg.level = levelId;
FlxG.save.data.levelId = levelId;
}
public static function storeLevelScore(levelId:Int, score:Int):Void
{
Reg.scores[levelId] = score;
FlxG.save.data.scores = Reg.scores;
if (FlxG.save.data.highestScore == null) {
FlxG.save.data.highestScore = score;
}
if (FlxG.save.data.highestScore < score) {
FlxG.save.data.highestScore = score;
}
}
public static function getTotalScoreOfAllLevels():Int
{
var totalScore:Int = 0;
for (i in Reg.scores) {
totalScore += i;
}
return totalScore;
}
public static function getCurrentLevel():Int
{
if (GameProgress.levelProgressSaved()) {
return GameProgress.getSavedLevel();
}
return Reg.level;
}
public static function levelProgressSaved():Bool
{
if (FlxG.save.data.levelId != null) {
return true;
}
return false;
}
public static function getSavedLevel():Int
{
return FlxG.save.data.levelId;
}
public static function moveOnToNextLevel():Void
{
var nextLevel:Int = Reg.level + 1;
GameProgress.storeLevelProgress(nextLevel);
}
public static function getCurrentRank():Int
{
if (rankProgressSaved()) {
return FlxG.save.data.currentRank;
}
return GameProgress.RANK_START;
}
private static function rankProgressSaved()
{
if (FlxG.save.data.currentRank != null) {
return true;
}
return false;
}
public static function getLatestScore():Int
{
var lastLevel:Int = GameProgress.getLevelJustCameFrom();
if (Reg.scores[lastLevel] == null) {
return 0;
}
return Reg.scores[lastLevel];
}
public static function getHighestScore():Int
{
if (FlxG.save.data.highestScore == null) {
return 0;
}
return FlxG.save.data.highestScore;
}
public static function getHighestLevel():Int
{
if (FlxG.save.data.highestLevel == null) {
return Reg.level;
}
return FlxG.save.data.highestLevel;
}
public static function getCurrentXP():Int
{
return Reg.experiencePoints;
}
public static function addXP(xp:Int):Void
{
Reg.experiencePoints += xp;
FlxG.save.data.experiencePoints = Reg.experiencePoints;
}
public static function getLevelJustCameFrom():Int
{
if (GameProgress.getCurrentLevel() <= 1) {
return 1;
}
return GameProgress.getCurrentLevel() - 1;
}
}