Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #import <Foundation/Foundation.h>
- #import <GameKit/GameKit.h>
- @protocol GameCenterManagerDelegate
- @end
- @interface GCHelper : NSObject <GKGameCenterControllerDelegate, GKAchievementViewControllerDelegate, GKLeaderboardViewControllerDelegate> {
- BOOL gameCenterAvailable;
- BOOL userAuthenticated;
- UIViewController *presentingViewController;
- id <GameCenterManagerDelegate> delegate;
- }
- @property (nonatomic, strong) id <GameCenterManagerDelegate> delegate;
- @property (assign, readonly) BOOL gameCenterAvailable;
- @property (retain) UIViewController *presentingViewController;
- + (GCHelper *) showGameCenter;
- + (GCHelper *)sharedInstance;
- - (void)authenticateLocalUser;
- @end
- #import "GCHelper.h"
- @implementation GCHelper
- @synthesize gameCenterAvailable;
- @synthesize presentingViewController;
- @synthesize delegate;
- #pragma mark Initialization
- static GCHelper *sharedHelper = nil;
- static GCHelper *showGameCenter = nil;
- + (GCHelper *) sharedInstance {
- if (!sharedHelper) {
- sharedHelper = [[GCHelper alloc] init];
- }
- return sharedHelper;
- }
- - (BOOL)isGameCenterAvailable {
- // check for presence of GKLocalPlayer API
- Class gcClass = (NSClassFromString(@"GKLocalPlayer"));
- // check if the device is running iOS 4.1 or later
- NSString *reqSysVer = @"4.1";
- NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
- BOOL osVersionSupported = ([currSysVer compare:reqSysVer
- options:NSNumericSearch] != NSOrderedAscending);
- return (gcClass && osVersionSupported);
- }
- - (id)init {
- if ((self = [super init])) {
- gameCenterAvailable = [self isGameCenterAvailable];
- if (gameCenterAvailable) {
- NSNotificationCenter *nc =
- [NSNotificationCenter defaultCenter];
- [nc addObserver:self
- selector:@selector(authenticationChanged)
- name:GKPlayerAuthenticationDidChangeNotificationName
- object:nil];
- }
- }
- return self;
- }
- - (void)authenticationChanged {
- if ([GKLocalPlayer localPlayer].isAuthenticated && !userAuthenticated) {
- NSLog(@"Authentication changed: player authenticated.");
- userAuthenticated = TRUE;
- } else if (![GKLocalPlayer localPlayer].isAuthenticated && userAuthenticated) {
- NSLog(@"Authentication changed: player not authenticated");
- userAuthenticated = FALSE;
- }
- }
- #pragma mark User functions
- - (void)authenticateLocalUser {
- if (!gameCenterAvailable) return;
- NSLog(@"Authenticating local user...");
- if ([GKLocalPlayer localPlayer].authenticated == NO) {
- [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:nil];
- } else {
- NSLog(@"Already authenticated!");
- }
- }
- /*
- - (void) showBanner
- {
- NSString* title = [self generateTitle];
- NSString* message = [self generateBannerMessage];
- [GKNotificationBanner showBannerWithTitle: title message: message
- completionHandler:^{
- [self advanceToNextInterfaceScreen]
- }];
- }
- */
- + (GCHelper *)showGameCenter
- {
- @synchronized (self)
- {
- GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];
- if (gameCenterController != NULL)
- {
- [[CCDirector sharedDirector]presentViewController:gameCenterController animated:YES completion:nil];
- }
- }
- return showGameCenter;
- }
- // When player dismisses game center.
- - (void)gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController
- {
- gameCenterViewController.gameCenterDelegate = self;
- [gameCenterViewController dismissModalViewControllerAnimated:YES];
- }
- @end
- - (void) gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController{
- [gameCenterViewController dismissViewControllerAnimated:YES completion:nil];
- }
- //In your .h file
- @interface foo : CCScene <GKGameCenterControllerDelegate>{
- }
- //In you .m file
- GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];
- if (gameCenterController != NULL)
- {
- gameCenterController.gameCenterDelegate = self;
- [[CCDirector sharedDirector]presentViewController:gameCenterController animated:YES completion:nil];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement