public ISharedData Clone() { LevelStateData c = new LevelStateData(); c.id = id; c.score = score; c.xpGained = xpGained; c.status = status; c.progress = new List <GameElementData>(progress.Clone()); c.currenciesEarned = new List <GameElementData>(currenciesEarned.Clone()); c.properties = new List <GameElementData>(properties.Clone()); return(c); }
/// <summary> /// Updates level summary when the player achieved a new top score for a specific level /// </summary> private void UpdateLevelState() { string level = GetLevel(); // Will not update state in case there is no concept of level if (string.IsNullOrEmpty(level)) { return; } LevelStateData levelSummary = levelStateModel.GetLevel(level); bool shouldUpdatePlayerProgress = false; bool hasLeadingProgressType = (_leadingProgressType != null); if (hasLeadingProgressType) { int curProgress = GetProgress(_leadingProgressType).value; int savedProgress = levelStateModel.GetLevelProgress(GetLevel(), _leadingProgressType).value; if (curProgress == savedProgress) { shouldUpdatePlayerProgress = Player.score >= levelSummary.score; } if (curProgress > savedProgress) { shouldUpdatePlayerProgress = true; } } else { shouldUpdatePlayerProgress = Player.score >= levelSummary.score; } if (shouldUpdatePlayerProgress) { levelSummary.id = level; levelSummary.score = Player.score; levelSummary.xpGained = Player.xpGained; levelSummary.itemsInUse = Player.itemsInUse; levelSummary.status = Player.matchStatus; levelSummary.progress = Player.progress.Select(p => p.Clone() as GameElementData).ToList(); levelSummary.properties = Player.properties.Select(p => p.Clone() as GameElementData).ToList(); levelSummary.currenciesEarned = Player.currenciesEarned.Select(c => c.Clone() as GameElementData).ToList(); levelStateModel.SetLevel(levelSummary); } }