From 667b64cc248573e01f3f14b84914fffcc02d3480 Mon Sep 17 00:00:00 2001 From: Michael Patzer Date: Sat, 29 Jun 2013 00:18:59 -0400 Subject: [PATCH] =?UTF-8?q?Added=20support=20for=20score=20sort=20order=20?= =?UTF-8?q?as=20defined=20in=20Game=20Center.=20We=20want=20to=20report=20?= =?UTF-8?q?a=20score=20to=20Game=20Center=20when=20the=20new=20score=20is?= =?UTF-8?q?=20lower=20than=20the=20old=20score=20if=20the=20game=E2=80=99s?= =?UTF-8?q?=20sort=20order=20is=20Low=20to=20High.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GC Manager/GameCenterManager.h | 7 +++++- .../GC Manager/GameCenterManager.m | 24 +++++++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/GameCenterManager/GC Manager/GameCenterManager.h b/GameCenterManager/GC Manager/GameCenterManager.h index 50092bb..6574348 100644 --- a/GameCenterManager/GC Manager/GameCenterManager.h +++ b/GameCenterManager/GC Manager/GameCenterManager.h @@ -17,6 +17,11 @@ #import "Reachability.h" #import "NSDataAES256.h" +typedef enum GameCenterSortOrder { + GameCenterSortOrderHighToLow, + GameCenterSortOrderLowToHigh +} GameCenterSortOrder; + @protocol GameCenterManagerDelegate; @interface GameCenterManager : NSObject { NSMutableArray *_leaderboards; @@ -35,7 +40,7 @@ - (void)syncGameCenter; // Saves score locally and reports it to Game Center. If error occurs, score is saved to be submitted later. -- (void)saveAndReportScore:(int)score leaderboard:(NSString *)identifier; +- (void)saveAndReportScore:(int)score leaderboard:(NSString *)identifier sortOrder:(GameCenterSortOrder)order; // Saves achievement locally and reports it to Game Center. If error occurs, achievement is saved to be submitted later. - (void)saveAndReportAchievement:(NSString *)identifier percentComplete:(double)percentComplete shouldDisplayNotification:(BOOL)displayNotification; diff --git a/GameCenterManager/GC Manager/GameCenterManager.m b/GameCenterManager/GC Manager/GameCenterManager.m index 797f3e2..5586a38 100644 --- a/GameCenterManager/GC Manager/GameCenterManager.m +++ b/GameCenterManager/GC Manager/GameCenterManager.m @@ -130,7 +130,7 @@ - (BOOL)checkGameCenterAvailability { self.isGameCenterAvailable = YES; return YES; } - } + } } } @@ -337,7 +337,7 @@ - (void)reportSavedScoresAndAchievements { #pragma mark - Score and Achievement Reporting //Save score and report it to GameCenter -- (void)saveAndReportScore:(int)score leaderboard:(NSString *)identifier { +- (void)saveAndReportScore:(int)score leaderboard:(NSString *)identifier sortOrder:(GameCenterSortOrder)order { NSData *gameCenterManagerData = [[NSData dataWithContentsOfFile:kGameCenterManagerDataPath] decryptedWithKey:kGameCenterManagerKey]; NSMutableDictionary *plistDict = [NSKeyedUnarchiver unarchiveObjectWithData:gameCenterManagerData]; NSMutableDictionary *playerDict = [plistDict objectForKey:[[GameCenterManager sharedManager] localPlayerId]]; @@ -352,7 +352,23 @@ - (void)saveAndReportScore:(int)score leaderboard:(NSString *)identifier { } int savedHighScoreValue = [savedHighScore intValue]; - if (score > savedHighScoreValue) { + + // Determine if the new score is better than the old score + BOOL isScoreBetter = NO; + switch (order) { + case GameCenterSortOrderLowToHigh: // A lower score is better + if (score < savedHighScoreValue) { + isScoreBetter = YES; + } + break; + default: + if (score > savedHighScoreValue) { // A higher score is better + isScoreBetter = YES; + } + break; + } + + if (isScoreBetter) { [playerDict setObject:[NSNumber numberWithInt:score] forKey:identifier]; [plistDict setObject:playerDict forKey:[[GameCenterManager sharedManager] localPlayerId]]; NSData *saveData = [[NSKeyedArchiver archivedDataWithRootObject:plistDict] encryptedWithKey:kGameCenterManagerKey]; @@ -480,7 +496,7 @@ - (void)saveAchievementToReportLater:(NSString *)identifier percentComplete:(dou } } else { NSMutableDictionary *savedAchievements = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithDouble:percentComplete], identifier, nil]; - playerDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:savedAchievements, @"SavedAchievements", nil]; + playerDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:savedAchievements, @"SavedAchievements", nil]; } [plistDict setObject:playerDict forKey:[[GameCenterManager sharedManager] localPlayerId]]; NSData *saveData = [[NSKeyedArchiver archivedDataWithRootObject:plistDict] encryptedWithKey:kGameCenterManagerKey];