Last active
December 14, 2015 05:59
-
-
Save sdabet/5039145 to your computer and use it in GitHub Desktop.
Achievement manager
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@interface AchievementManager : NSObject | |
+(AchievementManager*) sharedManager; | |
/** Local copy of current achievements progress */ | |
@property(nonatomic, retain) NSMutableDictionary *achievementsDictionary; | |
/** Must be called right after Game Center authentication */ | |
-(void) loadAchievements; | |
/** Report an achievement if necessary (i.E if better than current progress) */ | |
-(void) reportAchievementIdentifier:(NSString*) identifier percentComplete:(float) percent; | |
/** Increment an achievement if necessary (i.e if current is < 100%) */ | |
-(void) incrementAchievementIdentifier:(NSString*) identifier percentIncrement:(float) percent; | |
@end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@implementation AchievementManager | |
static AchievementManager* _sharedManager = nil; | |
+(AchievementManager*) sharedManager { | |
@synchronized([AchievementManager class]) | |
{ | |
if (!_sharedManager) | |
_sharedManager = [[self alloc] init]; | |
return _sharedManager; | |
} | |
return nil; | |
} | |
@synthesize achievementsDictionary; | |
-(id) init { | |
if(self = [super init]) { | |
achievementsDictionary = [[NSMutableDictionary alloc] init]; | |
} | |
return self; | |
} | |
- (void) loadAchievements | |
{ | |
CCLOG(@"[ACHIEVEMENT] loadAchievements"); | |
[GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements, NSError *error) | |
{ | |
if (error == nil) | |
{ | |
for (GKAchievement* achievement in achievements) | |
[achievementsDictionary setObject: achievement forKey: achievement.identifier]; | |
} | |
}]; | |
} | |
- (GKAchievement*) getAchievementForIdentifier: (NSString*) identifier | |
{ | |
GKAchievement *achievement = [achievementsDictionary objectForKey:identifier]; | |
if (achievement == nil) | |
{ | |
achievement = [[GKAchievement alloc] initWithIdentifier:identifier]; | |
[achievementsDictionary setObject:achievement forKey:achievement.identifier]; | |
} | |
return achievement; | |
} | |
-(void) reportAchievementIdentifier: (NSString*) identifier percentComplete: (float) percent { | |
GKAchievement *achievement = [self getAchievementForIdentifier:identifier]; | |
if (achievement && percent > achievement.percentComplete) | |
{ | |
CCLOG(@"[ACHIEVEMENT] reportAchievementIdentifier: '%@' percentComplete: %f", identifier, percent); | |
achievement.percentComplete = percent; | |
achievement.showsCompletionBanner = YES; | |
[achievement reportAchievementWithCompletionHandler:^(NSError *error) { | |
if (error != nil) | |
{ | |
CCLOGERROR(@"[ACHIEVEMENT] Error in reporting achievements: %@", error); | |
} | |
}]; | |
} | |
} | |
-(void) incrementAchievementIdentifier: (NSString*) identifier percentIncrement: (float) percent { | |
GKAchievement *achievement = [self getAchievementForIdentifier:identifier]; | |
if(achievement.percentComplete < 100) { | |
CCLOG(@"[ACHIEVEMENT] incrementAchievementIdentifier: '%@' percentIncrement: %f", identifier, percent); | |
achievement.percentComplete += percent; | |
achievement.showsCompletionBanner = YES; | |
[achievement reportAchievementWithCompletionHandler:^(NSError *error) { | |
if (error != nil) | |
{ | |
CCLOGERROR(@"[ACHIEVEMENT] Error in reporting achievements: %@", error); | |
} | |
}]; | |
} | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment