diff options
-rw-r--r-- | Classes/GameMode.h | 10 | ||||
-rw-r--r-- | Classes/GameMode.m | 60 | ||||
-rw-r--r-- | Classes/JumpGameMode.h | 4 | ||||
-rw-r--r-- | Classes/JumpGameMode.m | 19 |
4 files changed, 62 insertions, 31 deletions
diff --git a/Classes/GameMode.h b/Classes/GameMode.h index e208d49..ae3fbe5 100644 --- a/Classes/GameMode.h +++ b/Classes/GameMode.h | |||
@@ -15,7 +15,7 @@ | |||
15 | #define GAME_SCENE 436 | 15 | #define GAME_SCENE 436 |
16 | #define GAME_LAYER 437 | 16 | #define GAME_LAYER 437 |
17 | 17 | ||
18 | @interface GameMode : CCLayer <UIAlertViewDelegate, CartDelegate> { | 18 | @interface GameMode : CCLayer <UIAlertViewDelegate, CartDelegate, CCStandardTouchDelegate> { |
19 | NSMutableSet* objects; | 19 | NSMutableSet* objects; |
20 | int score; | 20 | int score; |
21 | int lives; | 21 | int lives; |
@@ -23,19 +23,23 @@ | |||
23 | Cart* cart; | 23 | Cart* cart; |
24 | FallingObjectFactory* objectFactory; | 24 | FallingObjectFactory* objectFactory; |
25 | 25 | ||
26 | CCLayerColor* willPauseLayer; | ||
26 | CCLayerColor* shadedLayer; | 27 | CCLayerColor* shadedLayer; |
27 | CCLayer* pauseLayer; | 28 | CCLayer* pauseLayer; |
29 | BOOL isPaused; | ||
30 | BOOL isPausing; | ||
28 | 31 | ||
29 | CCLabelBMFont* scoreLabel; | 32 | CCLabelBMFont* scoreLabel; |
30 | CCLabelBMFont* livesLabel; | 33 | CCLabelBMFont* livesLabel; |
31 | 34 | ||
32 | void (^delayedAction)(void); | 35 | void (^delayedAction)(void); |
33 | 36 | ||
34 | BOOL isPaused; | ||
35 | |||
36 | BOOL hasGyroscope; | 37 | BOOL hasGyroscope; |
37 | double pitch; | 38 | double pitch; |
38 | CMMotionManager* motionManager; | 39 | CMMotionManager* motionManager; |
40 | |||
41 | BOOL isGesturing; | ||
42 | CGPoint gestureStartPoint; | ||
39 | } | 43 | } |
40 | 44 | ||
41 | @property (readonly) Cart* cart; | 45 | @property (readonly) Cart* cart; |
diff --git a/Classes/GameMode.m b/Classes/GameMode.m index 49d0053..ca269cd 100644 --- a/Classes/GameMode.m +++ b/Classes/GameMode.m | |||
@@ -42,14 +42,6 @@ | |||
42 | 42 | ||
43 | objectFactory = [[FallingObjectFactory alloc] init]; | 43 | objectFactory = [[FallingObjectFactory alloc] init]; |
44 | 44 | ||
45 | if ([self canPause]) | ||
46 | { | ||
47 | CCMenuItemImage* pauseButton = [CCMenuItemImage itemFromNormalImage:@"pause2.png" selectedImage:@"pause.png" target:self selector:@selector(pause)]; | ||
48 | CCMenu* pauseMenu = [CCMenu menuWithItems:pauseButton, nil]; | ||
49 | [pauseMenu setPosition:ccp(480-8-16, 320-8-16)]; | ||
50 | [self addChild:pauseMenu]; | ||
51 | } | ||
52 | |||
53 | isPaused = NO; | 45 | isPaused = NO; |
54 | 46 | ||
55 | Class cmClass = (NSClassFromString(@"CMMotionManager")); | 47 | Class cmClass = (NSClassFromString(@"CMMotionManager")); |
@@ -71,6 +63,8 @@ | |||
71 | isAccelerometerEnabled_ = YES; | 63 | isAccelerometerEnabled_ = YES; |
72 | hasGyroscope = NO; | 64 | hasGyroscope = NO; |
73 | } | 65 | } |
66 | |||
67 | self.isTouchEnabled = YES; | ||
74 | } | 68 | } |
75 | 69 | ||
76 | return self; | 70 | return self; |
@@ -262,6 +256,56 @@ | |||
262 | [cart deviceDidRotate:pitch]; | 256 | [cart deviceDidRotate:pitch]; |
263 | } | 257 | } |
264 | 258 | ||
259 | - (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event | ||
260 | { | ||
261 | if ((!isPaused) && (!isGesturing) && ([self canPause])) | ||
262 | { | ||
263 | UITouch* touch = [touches anyObject]; | ||
264 | gestureStartPoint = [touch locationInView:nil]; | ||
265 | isGesturing = YES; | ||
266 | |||
267 | if (gestureStartPoint.x > 160) | ||
268 | { | ||
269 | isPausing = YES; | ||
270 | |||
271 | willPauseLayer = [CCLayerColor layerWithColor:ccc4(0, 0, 0, 63) width:480 height:160]; | ||
272 | willPauseLayer.position = ccp(0, 160); | ||
273 | [[[CCDirector sharedDirector] runningScene] addChild:willPauseLayer]; | ||
274 | } | ||
275 | } | ||
276 | } | ||
277 | |||
278 | - (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event | ||
279 | { | ||
280 | if (isGesturing && isPausing) | ||
281 | { | ||
282 | UITouch* touch = [touches anyObject]; | ||
283 | CGPoint gestureCurrentPosition = [touch locationInView:nil]; | ||
284 | CGFloat distance = sqrt(powf((gestureCurrentPosition.x - gestureStartPoint.x),2) + powf((gestureCurrentPosition.y - gestureStartPoint.y),2)); | ||
285 | |||
286 | if (distance > 2) | ||
287 | { | ||
288 | [[[CCDirector sharedDirector] runningScene] removeChild:willPauseLayer cleanup:YES]; | ||
289 | willPauseLayer = nil; | ||
290 | isPausing = NO; | ||
291 | } | ||
292 | } | ||
293 | } | ||
294 | |||
295 | - (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event | ||
296 | { | ||
297 | if (isPausing) | ||
298 | { | ||
299 | [[[CCDirector sharedDirector] runningScene] removeChild:willPauseLayer cleanup:YES]; | ||
300 | willPauseLayer = nil; | ||
301 | isPausing = NO; | ||
302 | |||
303 | [self pause]; | ||
304 | } | ||
305 | |||
306 | isGesturing = NO; | ||
307 | } | ||
308 | |||
265 | - (void)dealloc | 309 | - (void)dealloc |
266 | { | 310 | { |
267 | [objects release]; | 311 | [objects release]; |
diff --git a/Classes/JumpGameMode.h b/Classes/JumpGameMode.h index b18fd5a..a09bbea 100644 --- a/Classes/JumpGameMode.h +++ b/Classes/JumpGameMode.h | |||
@@ -11,12 +11,10 @@ | |||
11 | 11 | ||
12 | @class LedgeFactory; | 12 | @class LedgeFactory; |
13 | 13 | ||
14 | @interface JumpGameMode : GameMode <CCStandardTouchDelegate, FallingObjectDelegate> { | 14 | @interface JumpGameMode : GameMode <FallingObjectDelegate> { |
15 | CCSprite* water; | 15 | CCSprite* water; |
16 | int waterTick; | 16 | int waterTick; |
17 | BOOL wave; | 17 | BOOL wave; |
18 | BOOL isGesturing; | ||
19 | CGPoint gestureStartPoint; | ||
20 | int jumpTick; | 18 | int jumpTick; |
21 | BOOL jump; | 19 | BOOL jump; |
22 | float expectedAngle; | 20 | float expectedAngle; |
diff --git a/Classes/JumpGameMode.m b/Classes/JumpGameMode.m index f3e690c..f0cb469 100644 --- a/Classes/JumpGameMode.m +++ b/Classes/JumpGameMode.m | |||
@@ -83,8 +83,6 @@ static GameModeInfo* info; | |||
83 | cart.falling = YES; | 83 | cart.falling = YES; |
84 | cart.delegate = self; | 84 | cart.delegate = self; |
85 | 85 | ||
86 | self.isTouchEnabled = YES; | ||
87 | |||
88 | waterTick = 0; | 86 | waterTick = 0; |
89 | wave = NO; | 87 | wave = NO; |
90 | 88 | ||
@@ -279,18 +277,10 @@ static GameModeInfo* info; | |||
279 | } | 277 | } |
280 | } | 278 | } |
281 | 279 | ||
282 | - (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event | ||
283 | { | ||
284 | if ((!isPaused) && (!isGesturing)) | ||
285 | { | ||
286 | UITouch* touch = [touches anyObject]; | ||
287 | gestureStartPoint = [touch locationInView:nil]; | ||
288 | isGesturing = YES; | ||
289 | } | ||
290 | } | ||
291 | |||
292 | - (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event | 280 | - (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event |
293 | { | 281 | { |
282 | [super ccTouchesMoved:touches withEvent:event]; | ||
283 | |||
294 | if (isGesturing) | 284 | if (isGesturing) |
295 | { | 285 | { |
296 | UITouch* touch = [touches anyObject]; | 286 | UITouch* touch = [touches anyObject]; |
@@ -306,11 +296,6 @@ static GameModeInfo* info; | |||
306 | } | 296 | } |
307 | } | 297 | } |
308 | 298 | ||
309 | - (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event | ||
310 | { | ||
311 | isGesturing = NO; | ||
312 | } | ||
313 | |||
314 | - (int)cartShouldFall:(Cart *)m_cart | 299 | - (int)cartShouldFall:(Cart *)m_cart |
315 | { | 300 | { |
316 | int bottom = 0-m_cart.sprite.boundingBox.size.height/2; | 301 | int bottom = 0-m_cart.sprite.boundingBox.size.height/2; |