public static Models.GameProgress Deserialize(string serializedGameProgress) { Csv csv = new Csv (serializedGameProgress); int[] savedGameData = csv.ToIntArray (); int dataIndex = 0; Models.GameProgress gameProgress = new Models.GameProgress (savedGameData [dataIndex++]); while (dataIndex < savedGameData.Length) { int worldNumber = savedGameData [dataIndex++]; int levelNumber = savedGameData [dataIndex++]; int moves = savedGameData [dataIndex++]; int stars = savedGameData [dataIndex++]; Models.SolvedLevel solvedLevel = new Models.SolvedLevel (worldNumber, levelNumber, moves, stars); gameProgress.AddSolvedLevel (solvedLevel); } return gameProgress; }
private void HandleLockDialRotateComplete(Views.Lock lockWhoseDialRotated) { UpdateLockCountLabel (); lockWhoseDialRotated.OnDialRotateComplete = null; if (Model.LockGrid.IsSolved ()) { // Save the game progress Models.SolvedLevel solvedLevel = LocksGame.GameProgress.GetSolvedLevel (WorldNumber, LevelNumber); if (solvedLevel == null || Moves < solvedLevel.Moves) { int stars = Model.LockGrid.GetStars (Moves); solvedLevel = new Models.SolvedLevel (WorldNumber, LevelNumber, Moves, stars); LocksGame.GameProgress.AddSolvedLevel (solvedLevel); Rules.GameProgress.SaveGameProgress (LocksGame.GameProgress); } // Detect and record Game Center achievements if (Model.LevelNumber == Locks.Core.Constants.WorldLevelCount - 1) { Locks.iOS.GameCenter.RecordWorldCompleteAchievement (Model.WorldNumber); } if (LocksGame.GameProgress.IsWorld3Star (WorldNumber)) { Locks.iOS.GameCenter.RecordWorld3StarsAchievement (Model.WorldNumber); } if (LocksGame.GameProgress.AllLevels3Stars ()) { Locks.iOS.GameCenter.RecordAllLevels3StarsAchievment (); } // Update the solved message if (Model.IsLastLevel ()) { SolvedLabel.SetText ("All Levels Complete!"); } else { SolvedLabel.SetText ("Solved in " + Moves.ToString () + " Turns"); } // Start an animation indicating that the level is solved StartSolvedLockAnimation (); } }