summary refs log tree commit diff stats
path: root/Classes/GameMode.m
diff options
context:
space:
mode:
Diffstat (limited to 'Classes/GameMode.m')
-rw-r--r--Classes/GameMode.m69
1 files changed, 62 insertions, 7 deletions
diff --git a/Classes/GameMode.m b/Classes/GameMode.m index 3e2f3ee..49d0053 100644 --- a/Classes/GameMode.m +++ b/Classes/GameMode.m
@@ -20,8 +20,6 @@
20 20
21 if (nil != self) 21 if (nil != self)
22 { 22 {
23 isAccelerometerEnabled_ = YES;
24
25 objects = [[NSMutableSet alloc] init]; 23 objects = [[NSMutableSet alloc] init];
26 24
27 cart = [[Cart alloc] initWithSprite:[CCSprite spriteWithFile:@"cart.png"]]; 25 cart = [[Cart alloc] initWithSprite:[CCSprite spriteWithFile:@"cart.png"]];
@@ -53,6 +51,26 @@
53 } 51 }
54 52
55 isPaused = NO; 53 isPaused = NO;
54
55 Class cmClass = (NSClassFromString(@"CMMotionManager"));
56 if (cmClass)
57 {
58 motionManager = [[CMMotionManager alloc] init];
59
60 if (motionManager.gyroAvailable)
61 {
62 [motionManager setDeviceMotionUpdateInterval:1.0f/60.0f];
63 isAccelerometerEnabled_ = NO;
64 hasGyroscope = YES;
65 } else {
66 isAccelerometerEnabled_ = YES;
67 motionManager = nil;
68 hasGyroscope = NO;
69 }
70 } else {
71 isAccelerometerEnabled_ = YES;
72 hasGyroscope = NO;
73 }
56 } 74 }
57 75
58 return self; 76 return self;
@@ -60,19 +78,39 @@
60 78
61- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration 79- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration
62{ 80{
63 [cart accelerometer:accelerometer didAccelerate:acceleration]; 81 self.pitch = acceleration.y;
64} 82}
65 83
66- (void)onEnterTransitionDidFinish 84- (void)onEnterTransitionDidFinish
67{ 85{
68 [super onEnterTransitionDidFinish]; 86 [super onEnterTransitionDidFinish];
69 87
70 [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 60)]; 88 if (hasGyroscope)
89 {
90 [motionManager startDeviceMotionUpdates];
91 } else {
92 [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 60)];
93 }
94
71 [self schedule:@selector(tick:) interval:1.0f/60.0f]; 95 [self schedule:@selector(tick:) interval:1.0f/60.0f];
72} 96}
73 97
98- (void)onExit
99{
100 if (hasGyroscope)
101 {
102 [motionManager stopDeviceMotionUpdates];
103 }
104}
105
74- (void)tick:(ccTime)dt 106- (void)tick:(ccTime)dt
75{ 107{
108 if (hasGyroscope)
109 {
110 CMDeviceMotion* motion = [motionManager deviceMotion];
111 self.pitch = -motion.attitude.pitch;
112 }
113
76 [cart tick]; 114 [cart tick];
77 115
78 NSMutableSet* discardedObjects = [NSMutableSet set]; 116 NSMutableSet* discardedObjects = [NSMutableSet set];
@@ -100,6 +138,11 @@
100 138
101 [self pauseSchedulerAndActions]; 139 [self pauseSchedulerAndActions];
102 140
141 if (hasGyroscope)
142 {
143 [motionManager stopDeviceMotionUpdates];
144 }
145
103 shadedLayer = [CCLayerColor layerWithColor:ccc4(0, 0, 0, 127)]; 146 shadedLayer = [CCLayerColor layerWithColor:ccc4(0, 0, 0, 127)];
104 [[[CCDirector sharedDirector] runningScene] addChild:shadedLayer]; 147 [[[CCDirector sharedDirector] runningScene] addChild:shadedLayer];
105 148
@@ -132,6 +175,11 @@
132 shadedLayer = nil; 175 shadedLayer = nil;
133 pauseLayer = nil; 176 pauseLayer = nil;
134 177
178 if (hasGyroscope)
179 {
180 [motionManager startDeviceMotionUpdates];
181 }
182
135 [self resumeSchedulerAndActions]; 183 [self resumeSchedulerAndActions];
136 184
137 isPaused = NO; 185 isPaused = NO;
@@ -202,9 +250,16 @@
202 250
203+ (GameModeInfo*)info 251+ (GameModeInfo*)info
204{ 252{
205 [NSException raise:@"Unimplemented method" format:@"Method -info of GameMode subclasses must be overridden"]; 253 [NSException raise:@"Unimplemented method" format:@"Method -info of GameMode subclasses must be overridden"];
206 254
207 return nil; 255 return nil;
256}
257
258- (void)setPitch:(double)m_pitch
259{
260 pitch = m_pitch;
261
262 [cart deviceDidRotate:pitch];
208} 263}
209 264
210- (void)dealloc 265- (void)dealloc