Advertisement
Guest User

Untitled

a guest
Apr 21st, 2014
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.04 KB | None | 0 0
  1. #import <Foundation/Foundation.h>
  2. #import <GameKit/GameKit.h>
  3.  
  4. @protocol GameCenterManagerDelegate
  5.  
  6. @end
  7.  
  8. @interface GCHelper : NSObject <GKGameCenterControllerDelegate, GKAchievementViewControllerDelegate, GKLeaderboardViewControllerDelegate> {
  9.  
  10. BOOL gameCenterAvailable;
  11. BOOL userAuthenticated;
  12.  
  13. UIViewController *presentingViewController;
  14. id <GameCenterManagerDelegate> delegate;
  15.  
  16. }
  17. @property (nonatomic, strong) id <GameCenterManagerDelegate> delegate;
  18. @property (assign, readonly) BOOL gameCenterAvailable;
  19. @property (retain) UIViewController *presentingViewController;
  20.  
  21. + (GCHelper *) showGameCenter;
  22. + (GCHelper *)sharedInstance;
  23. - (void)authenticateLocalUser;
  24.  
  25. @end
  26.  
  27. #import "GCHelper.h"
  28.  
  29. @implementation GCHelper
  30.  
  31. @synthesize gameCenterAvailable;
  32. @synthesize presentingViewController;
  33. @synthesize delegate;
  34.  
  35.  
  36. #pragma mark Initialization
  37.  
  38. static GCHelper *sharedHelper = nil;
  39. static GCHelper *showGameCenter = nil;
  40.  
  41. + (GCHelper *) sharedInstance {
  42. if (!sharedHelper) {
  43. sharedHelper = [[GCHelper alloc] init];
  44. }
  45. return sharedHelper;
  46. }
  47.  
  48. - (BOOL)isGameCenterAvailable {
  49. // check for presence of GKLocalPlayer API
  50. Class gcClass = (NSClassFromString(@"GKLocalPlayer"));
  51.  
  52. // check if the device is running iOS 4.1 or later
  53. NSString *reqSysVer = @"4.1";
  54. NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
  55. BOOL osVersionSupported = ([currSysVer compare:reqSysVer
  56. options:NSNumericSearch] != NSOrderedAscending);
  57.  
  58. return (gcClass && osVersionSupported);
  59. }
  60.  
  61. - (id)init {
  62. if ((self = [super init])) {
  63. gameCenterAvailable = [self isGameCenterAvailable];
  64. if (gameCenterAvailable) {
  65. NSNotificationCenter *nc =
  66. [NSNotificationCenter defaultCenter];
  67. [nc addObserver:self
  68. selector:@selector(authenticationChanged)
  69. name:GKPlayerAuthenticationDidChangeNotificationName
  70. object:nil];
  71. }
  72. }
  73. return self;
  74. }
  75.  
  76. - (void)authenticationChanged {
  77.  
  78. if ([GKLocalPlayer localPlayer].isAuthenticated && !userAuthenticated) {
  79. NSLog(@"Authentication changed: player authenticated.");
  80. userAuthenticated = TRUE;
  81. } else if (![GKLocalPlayer localPlayer].isAuthenticated && userAuthenticated) {
  82. NSLog(@"Authentication changed: player not authenticated");
  83. userAuthenticated = FALSE;
  84. }
  85.  
  86. }
  87.  
  88. #pragma mark User functions
  89.  
  90. - (void)authenticateLocalUser {
  91.  
  92. if (!gameCenterAvailable) return;
  93.  
  94. NSLog(@"Authenticating local user...");
  95. if ([GKLocalPlayer localPlayer].authenticated == NO) {
  96. [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:nil];
  97. } else {
  98. NSLog(@"Already authenticated!");
  99. }
  100. }
  101.  
  102.  
  103. /*
  104. - (void) showBanner
  105.  
  106. {
  107.  
  108. NSString* title = [self generateTitle];
  109.  
  110. NSString* message = [self generateBannerMessage];
  111.  
  112. [GKNotificationBanner showBannerWithTitle: title message: message
  113.  
  114. completionHandler:^{
  115.  
  116. [self advanceToNextInterfaceScreen]
  117.  
  118. }];
  119.  
  120. }
  121. */
  122.  
  123. + (GCHelper *)showGameCenter
  124. {
  125. @synchronized (self)
  126. {
  127. GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];
  128.  
  129. if (gameCenterController != NULL)
  130.  
  131. {
  132.  
  133. [[CCDirector sharedDirector]presentViewController:gameCenterController animated:YES completion:nil];
  134.  
  135. }
  136. }
  137. return showGameCenter;
  138. }
  139.  
  140. // When player dismisses game center.
  141. - (void)gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController
  142.  
  143. {
  144.  
  145. gameCenterViewController.gameCenterDelegate = self;
  146. [gameCenterViewController dismissModalViewControllerAnimated:YES];
  147.  
  148. }
  149.  
  150.  
  151. @end
  152.  
  153. - (void) gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController{
  154. [gameCenterViewController dismissViewControllerAnimated:YES completion:nil];
  155. }
  156.  
  157. //In your .h file
  158. @interface foo : CCScene <GKGameCenterControllerDelegate>{
  159. }
  160.  
  161. //In you .m file
  162. GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];
  163.  
  164. if (gameCenterController != NULL)
  165. {
  166. gameCenterController.gameCenterDelegate = self;
  167. [[CCDirector sharedDirector]presentViewController:gameCenterController animated:YES completion:nil];
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement