Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // Afro Penguin
- //
- // Created by julong on 2/21/14.
- // Copyright julong 2014. All rights reserved.
- //
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- 1) .h
- #import <GameKit/GameKit.h>
- <GKLeaderboardViewControllerDelegate,GKAchievementViewControllerDelegate>
- uint64_t context;
- bool enableGameCenter;
- NSLock *writeLock;
- @property(nonatomic)bool enableGameCenter;
- @property (readonly, nonatomic) NSMutableArray * storedScores;
- @property (readonly, nonatomic) NSString *storedScoresFilename;
- -(void)storeScore:(GKScore *)score ;
- -(void)resubmitStoredScores;
- -(void)authenticateLocalPlayer;
- -(void)showLeaderboardNSString:(NSString *)leaderboard ;
- -(void)insertCurrentTimeIntoLeaderboard:(NSString*)leaderboard ;
- -(void)enableGameCenter:(BOOL)enableGameCenter ;
- 2).m
- ///////////////////////////////////////
- // Game Center
- NSString * leaderboardCategory = @"LeaderID";
- //[self enableGameCenter:NO];
- [self authenticateLocalPlayer];
- // [self showLeaderboardNSString:leaderboardCategory];
- //[self insertCurrentTimeIntoLeaderboard:leaderboardCategory];
- __block id copy_self = self;
- // Leaderboard Menu Item using blocks
- CCMenuItem *itemLeaderboard = [CCMenuItemFont itemWithString:@"Leaderboard" block:^(id sender) {
- GKLeaderboardViewController *leaderboardViewController = [[GKLeaderboardViewController alloc] init];
- leaderboardViewController.leaderboardDelegate = copy_self;
- AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
- [[app navController] presentModalViewController:leaderboardViewController animated:YES];
- [leaderboardViewController release];
- }];
- CCMenuItem *sendScore = [CCMenuItemFont itemWithString:@"send score" block:^(id sender)
- {
- NSString * leaderboardCategory2 = @"LeaderID";
- [self insertCurrentTimeIntoLeaderboard:leaderboardCategory2];
- }
- ];
- CCMenu *menu = [CCMenu menuWithItems:itemLeaderboard,sendScore,nil];
- [menu alignItemsHorizontallyWithPadding:20];
- [menu setPosition:ccp( size.width/2, size.height/2 - 50)];
- // Add the menu to the layer
- [self addChild:menu z:9999];
- ///////////////////////////////////////
- //////////////////////////////////////////////////////////
- // SCORE
- //////////////////////////////////////////////////////////
- - (void)insertCurrentTimeIntoLeaderboard:(NSString*)leaderboard{
- NSLog(@"current time state");
- int khighScore = [[NSUserDefaults standardUserDefaults] integerForKey:kHighScoreKey];
- int64_t score =khighScore;
- NSLog(@"iับค่าจาก KhighScore int64 %lld",khighScore);
- GKScore * submitScore = [[[GKScore alloc] initWithCategory:leaderboard] autorelease];
- NSLog(@"set submitscore value state!");
- [submitScore setValue:score];
- NSLog(@"after set submitscore value is %lld",submitScore.value);
- latest score submitted.
- [submitScore setShouldSetDefaultLeaderboard:YES];
- [submitScore setContext:context++];
- [self submitScore:submitScore];
- [submitScore release];
- }
- - (void)submitScore:(GKScore *)score{
- if ([GKLocalPlayer localPlayer].authenticated) {
- if (!score.value) {
- // Unable to validate data.
- NSLog(@"No data from score.value %lld",score.value);
- return;
- }
- // Store the scores if there is an error.
- [score reportScoreWithCompletionHandler:^(NSError *error){
- if (!error || (![error code] && ![error domain])) {
- // Score submitted correctly. Resubmit others
- NSLog(@"resubmit");
- [self resubmitStoredScores];
- } else {
- // Store score for next authentication.
- NSLog(@"Store score");
- [self storeScore:score];
- }
- }];
- }
- }
- // Attempt to resubmit the scores.
- - (void)resubmitStoredScores
- {
- NSLog(@"resubmit state");
- if (storedScores) {
- // Keeping an index prevents new entries to be added when the network is down
- int index = [storedScores count]-1;
- while( index >= 0 ) {
- GKScore * score = [storedScores objectAtIndex:index];
- [self submitScore:score];
- [storedScores removeObjectAtIndex:index];
- index--;
- }
- [self writeStoredScore];
- }
- }
- // Store score for submission at a later time.
- - (void)storeScore:(GKScore *)score
- {
- NSLog(@"store state");
- [storedScores addObject:score];
- [self writeStoredScore];
- }
- // Save stored scores to file.
- - (void)writeStoredScore
- {
- [writeLock lock];
- NSData * archivedScore = [NSKeyedArchiver archivedDataWithRootObject:storedScores];
- NSError * error;
- [archivedScore writeToFile:storedScoresFilename options:NSDataWritingFileProtectionNone error:&error];
- if (error) {
- // Error saving file, handle accordingly
- }
- [writeLock unlock];
- }
- ///////////////////////
- #pragma mark GameKit delegate
- ///////////////////////////////////////
- // Game Center
- -(void)authenticateLocalPlayer{
- GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
- localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){
- /*if (viewController != nil) {
- [self presentViewController:viewController animated:YES completion:nil];
- }
- else{
- */
- if ([GKLocalPlayer localPlayer].authenticated) {
- //enableGameCenter = YES;
- // Get the default leaderboard identifier.
- [[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier, NSError *error) {
- if (error != nil) {
- NSLog(@"%@", [error localizedDescription]);
- }
- else{
- leaderboardIdentifier = leaderboardIdentifier;
- NSLog(@" รับค่า leaderboard %@",leaderboardIdentifier);
- }
- }];
- /*}
- else{
- enableGameCenter = NO;
- }*/
- }
- };
- }
- - (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController
- {
- AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
- [[app navController] dismissModalViewControllerAnimated:YES];
- }
- //////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement