diff options
Diffstat (limited to 'Classes')
-rwxr-xr-x | Classes/ClassicGameMode.m | 42 | ||||
-rw-r--r-- | Classes/GameMode.h | 3 | ||||
-rw-r--r-- | Classes/GameMode.m | 20 | ||||
-rw-r--r-- | Classes/GameModeInfo.h | 41 | ||||
-rw-r--r-- | Classes/GameModeInfo.m | 128 | ||||
-rw-r--r-- | Classes/GameModeManager.h | 20 | ||||
-rw-r--r-- | Classes/GameModeManager.m | 74 | ||||
-rw-r--r-- | Classes/GameModeSelection.h | 16 | ||||
-rw-r--r-- | Classes/GameModeSelection.m | 49 | ||||
-rw-r--r-- | Classes/GameModeSelectionLayer.m | 45 | ||||
-rwxr-xr-x | Classes/GameOverScene.h | 7 | ||||
-rwxr-xr-x | Classes/GameOverScene.m | 31 | ||||
-rw-r--r-- | Classes/JumpGameMode.m | 22 | ||||
-rw-r--r-- | Classes/TutorialMode.m | 24 |
14 files changed, 382 insertions, 140 deletions
diff --git a/Classes/ClassicGameMode.m b/Classes/ClassicGameMode.m index 306c1d1..9356fea 100755 --- a/Classes/ClassicGameMode.m +++ b/Classes/ClassicGameMode.m | |||
@@ -10,8 +10,6 @@ | |||
10 | #import "FallingObject.h" | 10 | #import "FallingObject.h" |
11 | #import "GameOverScene.h" | 11 | #import "GameOverScene.h" |
12 | #import "SimpleAudioEngine.h" | 12 | #import "SimpleAudioEngine.h" |
13 | #import "CCNotifications.h" | ||
14 | #import "TestFlight.h" | ||
15 | 13 | ||
16 | @implementation ClassicGameMode | 14 | @implementation ClassicGameMode |
17 | 15 | ||
@@ -22,6 +20,26 @@ typedef enum { | |||
22 | kRockObject | 20 | kRockObject |
23 | } FallingObjects; | 21 | } FallingObjects; |
24 | 22 | ||
23 | static GameModeInfo* info; | ||
24 | |||
25 | + (GameModeInfo*)info | ||
26 | { | ||
27 | if (info == nil) | ||
28 | { | ||
29 | info = [[GameModeInfo alloc] initWithName:@"Collect" | ||
30 | location:@"Paris" | ||
31 | numOfStars:3 | ||
32 | imageFilename:[[NSBundle mainBundle] pathForResource:@"paris" ofType:@"png"] | ||
33 | unlocked:NO | ||
34 | unlockCondition:@"Beat the tutorial!" | ||
35 | gameClass:[ClassicGameMode class] | ||
36 | globalHighscoreKey:@"Classic" | ||
37 | starsToUnlock:0]; | ||
38 | } | ||
39 | |||
40 | return info; | ||
41 | } | ||
42 | |||
25 | - (void)tick:(ccTime)dt | 43 | - (void)tick:(ccTime)dt |
26 | { | 44 | { |
27 | int lastScore = score; | 45 | int lastScore = score; |
@@ -32,7 +50,7 @@ typedef enum { | |||
32 | { | 50 | { |
33 | [self unscheduleAllSelectors]; | 51 | [self unscheduleAllSelectors]; |
34 | 52 | ||
35 | [[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInT transitionWithDuration:1.5f scene:[GameOverScene sceneWithScore:score gameMode:@"Collect"]]]; | 53 | [[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInT transitionWithDuration:1.5f scene:[GameOverScene sceneWithScore:score gameMode:[ClassicGameMode info]]]]; |
36 | } else if (score > lastScore) | 54 | } else if (score > lastScore) |
37 | { | 55 | { |
38 | if ((lastScore < 6500) && (score >= 6500)) | 56 | if ((lastScore < 6500) && (score >= 6500)) |
@@ -45,24 +63,14 @@ typedef enum { | |||
45 | [self unschedule:@selector(randomlyAddObject:)]; | 63 | [self unschedule:@selector(randomlyAddObject:)]; |
46 | [self schedule:@selector(randomlyAddObject:) interval:0.7f]; | 64 | [self schedule:@selector(randomlyAddObject:) interval:0.7f]; |
47 | addSpeed = 0.7f; | 65 | addSpeed = 0.7f; |
48 | } else if ((lastScore < 3000) && (score >= 3000)) | ||
49 | { | ||
50 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
51 | |||
52 | if (![defaults boolForKey:@"unlockedJumpMode"]) | ||
53 | { | ||
54 | [[CCNotifications sharedManager] addWithTitle:@"Jump" message:@"You've unlocked a new game mode!" image:@"venice.png"]; | ||
55 | |||
56 | [defaults setBool:YES forKey:@"unlockedJumpMode"]; | ||
57 | [defaults synchronize]; | ||
58 | |||
59 | [TestFlight passCheckpoint:@"Unlocked Jump Mode"]; | ||
60 | } | ||
61 | } else if ((lastScore < 2500) && (score >= 2500)) | 66 | } else if ((lastScore < 2500) && (score >= 2500)) |
62 | { | 67 | { |
63 | [self unschedule:@selector(randomlyAddObject:)]; | 68 | [self unschedule:@selector(randomlyAddObject:)]; |
64 | [self schedule:@selector(randomlyAddObject:) interval:0.8f]; | 69 | [self schedule:@selector(randomlyAddObject:) interval:0.8f]; |
65 | addSpeed = 0.8f; | 70 | addSpeed = 0.8f; |
71 | } else if ((lastScore < 2000) && (score >= 2000)) | ||
72 | { | ||
73 | [[ClassicGameMode info] setStar:1 withMessage:@"Get 2000 points"]; | ||
66 | } else if ((lastScore < 1500) && (score >= 1500)) | 74 | } else if ((lastScore < 1500) && (score >= 1500)) |
67 | { | 75 | { |
68 | [self unschedule:@selector(randomlyAddObject:)]; | 76 | [self unschedule:@selector(randomlyAddObject:)]; |
@@ -73,6 +81,8 @@ typedef enum { | |||
73 | [self unschedule:@selector(randomlyAddObject:)]; | 81 | [self unschedule:@selector(randomlyAddObject:)]; |
74 | [self schedule:@selector(randomlyAddObject:) interval:1.0f]; | 82 | [self schedule:@selector(randomlyAddObject:) interval:1.0f]; |
75 | addSpeed = 1.0f; | 83 | addSpeed = 1.0f; |
84 | |||
85 | [[ClassicGameMode info] setStar:0 withMessage:@"Get 500 points"]; | ||
76 | } else if ((lastScore < 150) && (score >= 150)) | 86 | } else if ((lastScore < 150) && (score >= 150)) |
77 | { | 87 | { |
78 | [self unschedule:@selector(randomlyAddObject:)]; | 88 | [self unschedule:@selector(randomlyAddObject:)]; |
diff --git a/Classes/GameMode.h b/Classes/GameMode.h index cd0359d..cd41884 100644 --- a/Classes/GameMode.h +++ b/Classes/GameMode.h | |||
@@ -9,6 +9,7 @@ | |||
9 | #import "CCLayer.h" | 9 | #import "CCLayer.h" |
10 | #import "Cart.h" | 10 | #import "Cart.h" |
11 | #import "FallingObjectFactory.h" | 11 | #import "FallingObjectFactory.h" |
12 | #import "GameModeInfo.h" | ||
12 | 13 | ||
13 | #define GAME_SCENE 436 | 14 | #define GAME_SCENE 436 |
14 | #define GAME_LAYER 437 | 15 | #define GAME_LAYER 437 |
@@ -37,7 +38,6 @@ | |||
37 | @property (nonatomic,assign) int lives; | 38 | @property (nonatomic,assign) int lives; |
38 | @property (nonatomic,assign) int pointMultiplier; | 39 | @property (nonatomic,assign) int pointMultiplier; |
39 | @property (readonly) BOOL isPaused; | 40 | @property (readonly) BOOL isPaused; |
40 | + (CCScene*)scene; | ||
41 | - (void)tick:(ccTime)dt; | 41 | - (void)tick:(ccTime)dt; |
42 | - (BOOL)canPause; | 42 | - (BOOL)canPause; |
43 | - (void)pause; | 43 | - (void)pause; |
@@ -45,5 +45,6 @@ | |||
45 | - (void)mainmenu; | 45 | - (void)mainmenu; |
46 | - (void)scheduleDelayedAction:(void(^)(void))delayedAction delay:(float)delay; | 46 | - (void)scheduleDelayedAction:(void(^)(void))delayedAction delay:(float)delay; |
47 | - (void)runDelayedAction; | 47 | - (void)runDelayedAction; |
48 | + (GameModeInfo*)info; | ||
48 | 49 | ||
49 | @end | 50 | @end |
diff --git a/Classes/GameMode.m b/Classes/GameMode.m index 1f2451d..3e2f3ee 100644 --- a/Classes/GameMode.m +++ b/Classes/GameMode.m | |||
@@ -14,19 +14,6 @@ | |||
14 | 14 | ||
15 | @synthesize cart, score, lives, isPaused, pointMultiplier; | 15 | @synthesize cart, score, lives, isPaused, pointMultiplier; |
16 | 16 | ||
17 | + (CCScene*)scene | ||
18 | { | ||
19 | CCScene* scene = [CCScene node]; | ||
20 | |||
21 | GameMode* layer = [self node]; | ||
22 | layer.tag = GAME_LAYER; | ||
23 | [scene addChild:layer]; | ||
24 | |||
25 | scene.tag = GAME_SCENE; | ||
26 | |||
27 | return scene; | ||
28 | } | ||
29 | |||
30 | - (id)init | 17 | - (id)init |
31 | { | 18 | { |
32 | self = [super init]; | 19 | self = [super init]; |
@@ -213,6 +200,13 @@ | |||
213 | } | 200 | } |
214 | } | 201 | } |
215 | 202 | ||
203 | + (GameModeInfo*)info | ||
204 | { | ||
205 | [NSException raise:@"Unimplemented method" format:@"Method -info of GameMode subclasses must be overridden"]; | ||
206 | |||
207 | return nil; | ||
208 | } | ||
209 | |||
216 | - (void)dealloc | 210 | - (void)dealloc |
217 | { | 211 | { |
218 | [objects release]; | 212 | [objects release]; |
diff --git a/Classes/GameModeInfo.h b/Classes/GameModeInfo.h new file mode 100644 index 0000000..2262526 --- /dev/null +++ b/Classes/GameModeInfo.h | |||
@@ -0,0 +1,41 @@ | |||
1 | // | ||
2 | // GameModeInfo.h | ||
3 | // Cartographic | ||
4 | // | ||
5 | // Created by Starla Insigna on 11/28/11. | ||
6 | // Copyright (c) 2011 Four Island. All rights reserved. | ||
7 | // | ||
8 | |||
9 | #import <Foundation/Foundation.h> | ||
10 | #import "cocos2d.h" | ||
11 | |||
12 | @interface GameModeInfo : NSObject { | ||
13 | NSString* name; | ||
14 | NSString* location; | ||
15 | BOOL* stars; | ||
16 | int numOfStars; | ||
17 | BOOL unlocked; | ||
18 | UIImage* image; | ||
19 | NSString* unlockCondition; | ||
20 | Class gameClass; | ||
21 | NSString* globalHighscoreKey; | ||
22 | int starsToUnlock; | ||
23 | } | ||
24 | |||
25 | @property (readonly) NSString* name; | ||
26 | @property (readonly) NSString* location; | ||
27 | @property (readonly) int numOfStars; | ||
28 | @property (readonly) UIImage* image; | ||
29 | @property (readonly) BOOL unlocked; | ||
30 | @property (readonly) NSString* unlockCondition; | ||
31 | @property (readonly) NSString* globalHighscoreKey; | ||
32 | @property (readonly) int starsToUnlock; | ||
33 | - (id)initWithName:(NSString*)m_name location:(NSString*)m_location numOfStars:(int)m_numOfStars imageFilename:(NSString*)m_imageFilename unlocked:(BOOL)m_unlocked unlockCondition:(NSString*)m_unlockCondition gameClass:(Class)m_gameClass globalHighscoreKey:(NSString*)m_globalHighscoreKey starsToUnlock:(int)m_starsToUnlock; | ||
34 | - (void)setStar:(int)star_id withMessage:(NSString*)message; | ||
35 | - (BOOL)star:(int)star_id; | ||
36 | - (int)starsCollected; | ||
37 | - (CCScene*)scene; | ||
38 | - (void)unlock; | ||
39 | - (void)dealloc; | ||
40 | |||
41 | @end | ||
diff --git a/Classes/GameModeInfo.m b/Classes/GameModeInfo.m new file mode 100644 index 0000000..8b33fd8 --- /dev/null +++ b/Classes/GameModeInfo.m | |||
@@ -0,0 +1,128 @@ | |||
1 | // | ||
2 | // GameModeInfo.m | ||
3 | // Cartographic | ||
4 | // | ||
5 | // Created by Starla Insigna on 11/28/11. | ||
6 | // Copyright (c) 2011 Four Island. All rights reserved. | ||
7 | // | ||
8 | |||
9 | #import "GameModeInfo.h" | ||
10 | #import "CCNotifications.h" | ||
11 | #import "GameMode.h" | ||
12 | #import "GameModeManager.h" | ||
13 | #import "TestFlight.h" | ||
14 | |||
15 | @implementation GameModeInfo | ||
16 | |||
17 | @synthesize name, location, numOfStars, image, unlocked, unlockCondition, globalHighscoreKey, starsToUnlock; | ||
18 | |||
19 | - (id)initWithName:(NSString*)m_name location:(NSString*)m_location numOfStars:(int)m_numOfStars imageFilename:(NSString*)m_imageFilename unlocked:(BOOL)m_unlocked unlockCondition:(NSString*)m_unlockCondition gameClass:(Class)m_gameClass globalHighscoreKey:(NSString*)m_globalHighscoreKey starsToUnlock:(int)m_starsToUnlock | ||
20 | { | ||
21 | self = [super init]; | ||
22 | |||
23 | if (nil != self) | ||
24 | { | ||
25 | name = m_name; | ||
26 | location = m_location; | ||
27 | numOfStars = m_numOfStars; | ||
28 | image = [[UIImage alloc] initWithContentsOfFile:m_imageFilename]; | ||
29 | unlockCondition = m_unlockCondition; | ||
30 | globalHighscoreKey = m_globalHighscoreKey; | ||
31 | starsToUnlock = m_starsToUnlock; | ||
32 | |||
33 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
34 | unlocked = [defaults boolForKey:[NSString stringWithFormat:@"gameModeUnlocked-%@", name]]; | ||
35 | if (!unlocked) | ||
36 | { | ||
37 | unlocked = m_unlocked; | ||
38 | } | ||
39 | |||
40 | stars = (BOOL*) calloc(numOfStars, sizeof(BOOL)); | ||
41 | for (int i=0; i<numOfStars; i++) | ||
42 | { | ||
43 | stars[i] = [defaults boolForKey:[NSString stringWithFormat:@"gameModeStar-%@-%d", name, i]]; | ||
44 | } | ||
45 | |||
46 | if ([m_gameClass isSubclassOfClass:[GameMode class]]) | ||
47 | { | ||
48 | gameClass = m_gameClass; | ||
49 | } else { | ||
50 | [NSException raise:@"Invalid gameClass value" format:@"gameClass must be a subclass of GameMode"]; | ||
51 | } | ||
52 | } | ||
53 | |||
54 | return self; | ||
55 | } | ||
56 | |||
57 | - (void)setStar:(int)star_id withMessage:(NSString*)message | ||
58 | { | ||
59 | if (!stars[star_id]) | ||
60 | { | ||
61 | stars[star_id] = YES; | ||
62 | |||
63 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
64 | [defaults setBool:YES forKey:[NSString stringWithFormat:@"gameModeStar-%@-%d", name, star_id]]; | ||
65 | |||
66 | [[CCNotifications sharedManager] addWithTitle:@"Star Achieved!" message:message image:[NSString stringWithFormat:@"star_%d.png", star_id+1]]; | ||
67 | |||
68 | [GameModeManager sharedInstance].stars++; | ||
69 | } | ||
70 | } | ||
71 | |||
72 | - (BOOL)star:(int)star_id | ||
73 | { | ||
74 | return stars[star_id]; | ||
75 | } | ||
76 | |||
77 | - (int)starsCollected | ||
78 | { | ||
79 | int result = 0; | ||
80 | |||
81 | for (int i=0; i<numOfStars; i++) | ||
82 | { | ||
83 | if (stars[i]) | ||
84 | { | ||
85 | result++; | ||
86 | } | ||
87 | } | ||
88 | |||
89 | return result; | ||
90 | } | ||
91 | |||
92 | - (CCScene*)scene | ||
93 | { | ||
94 | CCScene* scene = [CCScene node]; | ||
95 | |||
96 | GameMode* layer = [[((GameMode*) [gameClass alloc]) init] autorelease]; | ||
97 | layer.tag = GAME_LAYER; | ||
98 | [scene addChild:layer]; | ||
99 | |||
100 | scene.tag = GAME_SCENE; | ||
101 | |||
102 | return scene; | ||
103 | } | ||
104 | |||
105 | - (void)unlock | ||
106 | { | ||
107 | if (!unlocked) | ||
108 | { | ||
109 | unlocked = YES; | ||
110 | |||
111 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
112 | [defaults setBool:YES forKey:[NSString stringWithFormat:@"gameModeUnlocked-%@", name]]; | ||
113 | |||
114 | CCTexture2D* texture = [[CCTexture2D alloc] initWithImage:image]; | ||
115 | [[CCNotifications sharedManager] addWithTitle:name message:@"You've unlocked a new game mode!" texture:texture]; | ||
116 | [texture release]; | ||
117 | |||
118 | [TestFlight passCheckpoint:[NSString stringWithFormat:@"Unlocked %@ Mode", name]]; | ||
119 | } | ||
120 | } | ||
121 | |||
122 | - (void)dealloc | ||
123 | { | ||
124 | free(stars); | ||
125 | [super dealloc]; | ||
126 | } | ||
127 | |||
128 | @end | ||
diff --git a/Classes/GameModeManager.h b/Classes/GameModeManager.h new file mode 100644 index 0000000..fdaae60 --- /dev/null +++ b/Classes/GameModeManager.h | |||
@@ -0,0 +1,20 @@ | |||
1 | // | ||
2 | // GameModeManager.h | ||
3 | // Cartographic | ||
4 | // | ||
5 | // Created by Starla Insigna on 11/29/11. | ||
6 | // Copyright (c) 2011 Four Island. All rights reserved. | ||
7 | // | ||
8 | |||
9 | #import <Foundation/Foundation.h> | ||
10 | |||
11 | @interface GameModeManager : NSObject { | ||
12 | NSArray* gameModes; | ||
13 | int stars; | ||
14 | } | ||
15 | |||
16 | @property (readonly) NSArray* gameModes; | ||
17 | @property (assign) int stars; | ||
18 | + (GameModeManager*)sharedInstance; | ||
19 | |||
20 | @end | ||
diff --git a/Classes/GameModeManager.m b/Classes/GameModeManager.m new file mode 100644 index 0000000..5a6e109 --- /dev/null +++ b/Classes/GameModeManager.m | |||
@@ -0,0 +1,74 @@ | |||
1 | // | ||
2 | // GameModeManager.m | ||
3 | // Cartographic | ||
4 | // | ||
5 | // Created by Starla Insigna on 11/29/11. | ||
6 | // Copyright (c) 2011 Four Island. All rights reserved. | ||
7 | // | ||
8 | |||
9 | #import "GameModeManager.h" | ||
10 | #import "GameModeInfo.h" | ||
11 | #import "TutorialMode.h" | ||
12 | #import "ClassicGameMode.h" | ||
13 | #import "JumpGameMode.h" | ||
14 | |||
15 | @implementation GameModeManager | ||
16 | |||
17 | @synthesize gameModes; | ||
18 | |||
19 | static GameModeManager* sharedInstance = nil; | ||
20 | |||
21 | + (GameModeManager*)sharedInstance | ||
22 | { | ||
23 | if (sharedInstance == nil) | ||
24 | { | ||
25 | sharedInstance = [[GameModeManager alloc] init]; | ||
26 | } | ||
27 | |||
28 | return sharedInstance; | ||
29 | } | ||
30 | |||
31 | - (id)init | ||
32 | { | ||
33 | self = [super init]; | ||
34 | |||
35 | if (nil != self) | ||
36 | { | ||
37 | gameModes = [[NSArray alloc] initWithObjects: | ||
38 | [TutorialMode info], | ||
39 | [ClassicGameMode info], | ||
40 | [JumpGameMode info], | ||
41 | nil]; | ||
42 | |||
43 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
44 | stars = [defaults integerForKey:@"stars"]; | ||
45 | } | ||
46 | |||
47 | return self; | ||
48 | } | ||
49 | |||
50 | - (void)setStars:(int)m_stars | ||
51 | { | ||
52 | if (stars != m_stars) | ||
53 | { | ||
54 | stars = m_stars; | ||
55 | |||
56 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
57 | [defaults setInteger:m_stars forKey:@"stars"]; | ||
58 | |||
59 | for (GameModeInfo* gameMode in gameModes) | ||
60 | { | ||
61 | if ((!gameMode.unlocked) && (stars >= gameMode.starsToUnlock)) | ||
62 | { | ||
63 | [gameMode unlock]; | ||
64 | } | ||
65 | } | ||
66 | } | ||
67 | } | ||
68 | |||
69 | - (int)stars | ||
70 | { | ||
71 | return stars; | ||
72 | } | ||
73 | |||
74 | @end | ||
diff --git a/Classes/GameModeSelection.h b/Classes/GameModeSelection.h index bdb38fb..ec6d5ad 100644 --- a/Classes/GameModeSelection.h +++ b/Classes/GameModeSelection.h | |||
@@ -8,23 +8,17 @@ | |||
8 | 8 | ||
9 | #import "cocos2d.h" | 9 | #import "cocos2d.h" |
10 | #import "GameModeSelectionDelegate.h" | 10 | #import "GameModeSelectionDelegate.h" |
11 | #import "GameModeInfo.h" | ||
11 | 12 | ||
12 | @interface GameModeSelection : CCMenuItem { | 13 | @interface GameModeSelection : CCMenuItem { |
13 | NSString* name; | 14 | GameModeInfo* gameMode; |
14 | NSString* location; | ||
15 | BOOL unlocked; | ||
16 | NSString* unlockCondition; | ||
17 | id<GameModeSelectionDelegate> delegate; | 15 | id<GameModeSelectionDelegate> delegate; |
18 | } | 16 | } |
19 | 17 | ||
20 | @property (readonly) NSString* name; | 18 | @property (readonly) GameModeInfo* gameMode; |
21 | @property (readonly) NSString* location; | ||
22 | @property (readonly) BOOL unlocked; | ||
23 | @property (nonatomic,retain) id<GameModeSelectionDelegate> delegate; | 19 | @property (nonatomic,retain) id<GameModeSelectionDelegate> delegate; |
24 | + (id)selectionWithName:(NSString*)name location:(NSString*)location filename:(NSString*)filename unlocked:(BOOL)unlocked; | 20 | + (id)selectionWithGameModeInfo:(GameModeInfo*)m_gameMode; |
25 | + (id)selectionWithName:(NSString *)name location:(NSString *)location filename:(NSString *)filename unlockCondition:(NSString*)unlockCondition; | 21 | - (id)initWithGameModeInfo:(GameModeInfo*)m_gameMode; |
26 | - (id)initWithName:(NSString*)name location:(NSString*)location filename:(NSString*)filename unlocked:(BOOL)unlocked; | ||
27 | - (id)initWithName:(NSString *)name location:(NSString *)location filename:(NSString *)filename unlockCondition:(NSString*)unlockCondition; | ||
28 | - (void)buttonTapped; | 22 | - (void)buttonTapped; |
29 | 23 | ||
30 | @end | 24 | @end |
diff --git a/Classes/GameModeSelection.m b/Classes/GameModeSelection.m index 40981b1..61004fa 100644 --- a/Classes/GameModeSelection.m +++ b/Classes/GameModeSelection.m | |||
@@ -13,19 +13,14 @@ | |||
13 | 13 | ||
14 | @implementation GameModeSelection | 14 | @implementation GameModeSelection |
15 | 15 | ||
16 | @synthesize name, location, unlocked, delegate; | 16 | @synthesize gameMode, delegate; |
17 | 17 | ||
18 | + (id)selectionWithName:(NSString*)name location:(NSString*)location filename:(NSString*)filename unlocked:(BOOL)unlocked | 18 | + (id)selectionWithGameModeInfo:(GameModeInfo*)m_gameMode |
19 | { | 19 | { |
20 | return [[[GameModeSelection alloc] initWithName:name location:location filename:filename unlocked:unlocked] autorelease]; | 20 | return [[[GameModeSelection alloc] initWithGameModeInfo:m_gameMode] autorelease]; |
21 | } | 21 | } |
22 | 22 | ||
23 | + (id)selectionWithName:(NSString *)name location:(NSString *)location filename:(NSString *)filename unlockCondition:(NSString*)unlockCondition | 23 | - (id)initWithGameModeInfo:(GameModeInfo*)m_gameMode |
24 | { | ||
25 | return [[[GameModeSelection alloc] initWithName:name location:location filename:filename unlockCondition:unlockCondition] autorelease]; | ||
26 | } | ||
27 | |||
28 | - (id)initWithName:(NSString*)m_name location:(NSString*)m_location filename:(NSString*)filename unlocked:(BOOL)m_unlocked; | ||
29 | { | 24 | { |
30 | self = [super initWithTarget:nil selector:nil]; | 25 | self = [super initWithTarget:nil selector:nil]; |
31 | 26 | ||
@@ -33,19 +28,19 @@ | |||
33 | { | 28 | { |
34 | self.anchorPoint = CGPointMake(0.5f, 0.5f); | 29 | self.anchorPoint = CGPointMake(0.5f, 0.5f); |
35 | 30 | ||
36 | name = m_name; | 31 | gameMode = m_gameMode; |
37 | location = m_location; | ||
38 | unlocked = m_unlocked; | ||
39 | 32 | ||
40 | contentSize_ = CGSizeMake(128, 320); | 33 | contentSize_ = CGSizeMake(128, 320); |
41 | 34 | ||
35 | NSString* name = gameMode.name; | ||
36 | NSString* location = gameMode.location; | ||
42 | NSString* filenameMod; | 37 | NSString* filenameMod; |
43 | 38 | ||
44 | if (unlocked) | 39 | if (gameMode.unlocked) |
45 | { | 40 | { |
46 | filenameMod = [NSString stringWithFormat:@"%@-unlocked", filename]; | 41 | filenameMod = [NSString stringWithFormat:@"%@-unlocked", name]; |
47 | } else { | 42 | } else { |
48 | filenameMod = [NSString stringWithFormat:@"%@-locked", filename]; | 43 | filenameMod = [NSString stringWithFormat:@"%@-locked", name]; |
49 | name = [@"" stringByPaddingToLength:name.length withString:@"?" startingAtIndex:0]; | 44 | name = [@"" stringByPaddingToLength:name.length withString:@"?" startingAtIndex:0]; |
50 | location = [@"" stringByPaddingToLength:location.length withString:@"?" startingAtIndex:0]; | 45 | location = [@"" stringByPaddingToLength:location.length withString:@"?" startingAtIndex:0]; |
51 | } | 46 | } |
@@ -93,7 +88,7 @@ | |||
93 | UIImage* selectionBackground = UIGraphicsGetImageFromCurrentImageContext(); | 88 | UIImage* selectionBackground = UIGraphicsGetImageFromCurrentImageContext(); |
94 | 89 | ||
95 | // Now we want to put the level image inside the frame without messing up the frame itself | 90 | // Now we want to put the level image inside the frame without messing up the frame itself |
96 | UIImage* innerPicture = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:filename ofType:@"png"]]; | 91 | UIImage* innerPicture = gameMode.image; |
97 | CGContextClipToMask(context, CGRectMake(0, 0, boxSize.width, boxSize.height), [[selectionBackground opaqueMaskFromWhiteImage] CGImage]); | 92 | CGContextClipToMask(context, CGRectMake(0, 0, boxSize.width, boxSize.height), [[selectionBackground opaqueMaskFromWhiteImage] CGImage]); |
98 | [innerPicture drawInRect:CGRectMake(6, 6, 128, 128)]; | 93 | [innerPicture drawInRect:CGRectMake(6, 6, 128, 128)]; |
99 | selectionBackground = UIGraphicsGetImageFromCurrentImageContext(); | 94 | selectionBackground = UIGraphicsGetImageFromCurrentImageContext(); |
@@ -104,7 +99,7 @@ | |||
104 | context = UIGraphicsGetCurrentContext(); | 99 | context = UIGraphicsGetCurrentContext(); |
105 | CGContextSaveGState(context); | 100 | CGContextSaveGState(context); |
106 | 101 | ||
107 | if (unlocked) | 102 | if (gameMode.unlocked) |
108 | { | 103 | { |
109 | CGContextSetShadow(context, CGSizeMake(-6, 6), 4.0f); | 104 | CGContextSetShadow(context, CGSizeMake(-6, 6), 4.0f); |
110 | [selectionBackground drawInRect:CGRectMake(10, 0, boxSize.width, boxSize.height)]; | 105 | [selectionBackground drawInRect:CGRectMake(10, 0, boxSize.width, boxSize.height)]; |
@@ -159,7 +154,7 @@ | |||
159 | titleSprite.position = ccp(-10, (boxSize.height)/2+(combinedTitleSize.height)/2); | 154 | titleSprite.position = ccp(-10, (boxSize.height)/2+(combinedTitleSize.height)/2); |
160 | [self addChild:titleSprite]; | 155 | [self addChild:titleSprite]; |
161 | 156 | ||
162 | if (unlocked) | 157 | if (gameMode.unlocked) |
163 | { | 158 | { |
164 | Highscore* localHighscore = [Highscore localHighscoreForGameMode:name]; | 159 | Highscore* localHighscore = [Highscore localHighscoreForGameMode:name]; |
165 | 160 | ||
@@ -177,7 +172,7 @@ | |||
177 | 172 | ||
178 | CGImageRef highscoreImage = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | 173 | CGImageRef highscoreImage = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; |
179 | UIGraphicsEndImageContext(); | 174 | UIGraphicsEndImageContext(); |
180 | CCSprite* highscoreSprite = [CCSprite spriteWithCGImage:highscoreImage key:[NSString stringWithFormat:@"gms-%@-highscore-%d", filename, localHighscore.score]]; | 175 | CCSprite* highscoreSprite = [CCSprite spriteWithCGImage:highscoreImage key:[NSString stringWithFormat:@"gms-%@-highscore-%d", name, localHighscore.score]]; |
181 | highscoreSprite.position = ccp(-5, 0-64-(highscoreSize.height)/2-10); | 176 | highscoreSprite.position = ccp(-5, 0-64-(highscoreSize.height)/2-10); |
182 | [self addChild:highscoreSprite]; | 177 | [self addChild:highscoreSprite]; |
183 | } | 178 | } |
@@ -187,21 +182,9 @@ | |||
187 | return self; | 182 | return self; |
188 | } | 183 | } |
189 | 184 | ||
190 | - (id)initWithName:(NSString *)m_name location:(NSString *)m_location filename:(NSString *)m_filename unlockCondition:(NSString*)m_unlockCondition | ||
191 | { | ||
192 | self = [self initWithName:m_name location:m_location filename:m_filename unlocked:NO]; | ||
193 | |||
194 | if (nil != self) | ||
195 | { | ||
196 | unlockCondition = m_unlockCondition; | ||
197 | } | ||
198 | |||
199 | return self; | ||
200 | } | ||
201 | |||
202 | - (void)buttonTapped | 185 | - (void)buttonTapped |
203 | { | 186 | { |
204 | if (unlocked) | 187 | if (gameMode.unlocked) |
205 | { | 188 | { |
206 | if (delegate != nil) | 189 | if (delegate != nil) |
207 | { | 190 | { |
@@ -210,7 +193,7 @@ | |||
210 | NSLog(@"I don't have a GameModeSelectionDelegate to call for some reason..."); | 193 | NSLog(@"I don't have a GameModeSelectionDelegate to call for some reason..."); |
211 | } | 194 | } |
212 | } else { | 195 | } else { |
213 | UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"To unlock this game mode:" message:unlockCondition delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:nil]; | 196 | UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"To unlock this game mode:" message:gameMode.unlockCondition delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:nil]; |
214 | [alertView show]; | 197 | [alertView show]; |
215 | [alertView release]; | 198 | [alertView release]; |
216 | } | 199 | } |
diff --git a/Classes/GameModeSelectionLayer.m b/Classes/GameModeSelectionLayer.m index e7b6966..e5a83f1 100644 --- a/Classes/GameModeSelectionLayer.m +++ b/Classes/GameModeSelectionLayer.m | |||
@@ -11,11 +11,10 @@ | |||
11 | #import <sqlite3.h> | 11 | #import <sqlite3.h> |
12 | #import "Cart_CollectAppDelegate.h" | 12 | #import "Cart_CollectAppDelegate.h" |
13 | #import "MainMenuLayer.h" | 13 | #import "MainMenuLayer.h" |
14 | #import "TutorialMode.h" | ||
15 | #import "ClassicGameMode.h" | ||
16 | #import "NMPanelMenu.h" | 14 | #import "NMPanelMenu.h" |
17 | #import "JumpGameMode.h" | ||
18 | #import "ZoomFadeTransition.h" | 15 | #import "ZoomFadeTransition.h" |
16 | #import "GameModeInfo.h" | ||
17 | #import "GameModeManager.h" | ||
19 | 18 | ||
20 | @implementation GameModeSelectionLayer | 19 | @implementation GameModeSelectionLayer |
21 | 20 | ||
@@ -44,31 +43,12 @@ | |||
44 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | 43 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; |
45 | gameModes = [[NSMutableArray alloc] init]; | 44 | gameModes = [[NSMutableArray alloc] init]; |
46 | 45 | ||
47 | GameModeSelection* tutorialSelection = [GameModeSelection selectionWithName:@"Tutorial" location:@"Florence" filename:@"florence" unlocked:YES]; | 46 | for (GameModeInfo* info in [[GameModeManager sharedInstance] gameModes]) |
48 | [gameModes addObject:tutorialSelection]; | ||
49 | |||
50 | GameModeSelection* collectSelection; | ||
51 | |||
52 | if ([defaults boolForKey:@"hasDoneTutorial"]) | ||
53 | { | ||
54 | collectSelection = [GameModeSelection selectionWithName:@"Collect" location:@"Paris" filename:@"paris" unlocked:YES]; | ||
55 | } else { | ||
56 | collectSelection = [GameModeSelection selectionWithName:@"Collect" location:@"Paris" filename:@"paris" unlockCondition:@"Beat the tutorial!"]; | ||
57 | } | ||
58 | |||
59 | [gameModes addObject:collectSelection]; | ||
60 | |||
61 | GameModeSelection* jumpSelection; | ||
62 | |||
63 | if ([defaults boolForKey:@"unlockedJumpMode"]) | ||
64 | { | 47 | { |
65 | jumpSelection = [GameModeSelection selectionWithName:@"Jump" location:@"Venice" filename:@"venice" unlocked:YES]; | 48 | GameModeSelection* selection = [GameModeSelection selectionWithGameModeInfo:info]; |
66 | } else { | 49 | [gameModes addObject:selection]; |
67 | jumpSelection = [GameModeSelection selectionWithName:@"Jump" location:@"Venice" filename:@"venice" unlockCondition:@"Get 3000 points in Collect!"]; | ||
68 | } | 50 | } |
69 | 51 | ||
70 | [gameModes addObject:jumpSelection]; | ||
71 | |||
72 | CCMenu* menu = [CCMenu menuWithItems:nil]; | 52 | CCMenu* menu = [CCMenu menuWithItems:nil]; |
73 | float onePanelWide = 128; | 53 | float onePanelWide = 128; |
74 | float padding = 15; | 54 | float padding = 15; |
@@ -131,24 +111,15 @@ | |||
131 | [[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]]; | 111 | [[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]]; |
132 | } | 112 | } |
133 | 113 | ||
134 | - (void)didSelectGameMode:(GameModeSelection *)gameMode | 114 | - (void)didSelectGameMode:(GameModeSelection *)selection |
135 | { | 115 | { |
136 | [scrollView setScrollEnabled:NO]; | 116 | [scrollView setScrollEnabled:NO]; |
137 | [pageControl removeFromSuperview]; | 117 | [pageControl removeFromSuperview]; |
138 | 118 | ||
139 | CGPoint opp = [scrollView convertPoint:gameMode.position toView:[[CCDirector sharedDirector] openGLView]]; | 119 | CGPoint opp = [scrollView convertPoint:selection.position toView:[[CCDirector sharedDirector] openGLView]]; |
140 | CGPoint endPosition = ccp(0-(opp.x+158), opp.y); | 120 | CGPoint endPosition = ccp(0-(opp.x+158), opp.y); |
141 | 121 | ||
142 | if ([gameMode.name isEqual:@"Tutorial"]) | 122 | [[CCDirector sharedDirector] replaceScene:[ZoomFadeTransition transitionWithDuration:5.0f scene:[selection.gameMode scene] position:endPosition]]; |
143 | { | ||
144 | [[CCDirector sharedDirector] replaceScene:[ZoomFadeTransition transitionWithDuration:5.0f scene:[TutorialMode scene] position:endPosition]]; | ||
145 | } else if ([gameMode.name isEqual:@"Collect"]) | ||
146 | { | ||
147 | [[CCDirector sharedDirector] replaceScene:[ZoomFadeTransition transitionWithDuration:5.0f scene:[ClassicGameMode scene] position:endPosition]]; | ||
148 | } else if ([gameMode.name isEqual:@"Jump"]) | ||
149 | { | ||
150 | [[CCDirector sharedDirector] replaceScene:[ZoomFadeTransition transitionWithDuration:5.0f scene:[JumpGameMode scene] position:endPosition]]; | ||
151 | } | ||
152 | } | 123 | } |
153 | 124 | ||
154 | @end | 125 | @end |
diff --git a/Classes/GameOverScene.h b/Classes/GameOverScene.h index f596211..5987c20 100755 --- a/Classes/GameOverScene.h +++ b/Classes/GameOverScene.h | |||
@@ -8,6 +8,7 @@ | |||
8 | 8 | ||
9 | #import <Foundation/Foundation.h> | 9 | #import <Foundation/Foundation.h> |
10 | #import "cocos2d.h" | 10 | #import "cocos2d.h" |
11 | #import "GameModeInfo.h" | ||
11 | 12 | ||
12 | @interface GameOverScene : CCScene <UITextFieldDelegate, UIAlertViewDelegate> { | 13 | @interface GameOverScene : CCScene <UITextFieldDelegate, UIAlertViewDelegate> { |
13 | CCLayer* theLayer; | 14 | CCLayer* theLayer; |
@@ -19,12 +20,12 @@ | |||
19 | UIButton* backButton; | 20 | UIButton* backButton; |
20 | UIButton* playButton; | 21 | UIButton* playButton; |
21 | int score; | 22 | int score; |
22 | NSString* gameMode; | 23 | GameModeInfo* gameMode; |
23 | BOOL playAgain; | 24 | BOOL playAgain; |
24 | } | 25 | } |
25 | 26 | ||
26 | + (GameOverScene*)sceneWithScore:(int)score gameMode:(NSString*)gameMode; | 27 | + (GameOverScene*)sceneWithScore:(int)score gameMode:(GameModeInfo*)gameMode; |
27 | - (id)initWithScore:(int)score gameMode:(NSString*)gameMode; | 28 | - (id)initWithScore:(int)score gameMode:(GameModeInfo*)gameMode; |
28 | - (void)newgame:(id)sender; | 29 | - (void)newgame:(id)sender; |
29 | - (void)submitScore; | 30 | - (void)submitScore; |
30 | - (void)exit; | 31 | - (void)exit; |
diff --git a/Classes/GameOverScene.m b/Classes/GameOverScene.m index a56aeac..07186c2 100755 --- a/Classes/GameOverScene.m +++ b/Classes/GameOverScene.m | |||
@@ -11,17 +11,15 @@ | |||
11 | #import <sqlite3.h> | 11 | #import <sqlite3.h> |
12 | #import "cocoslive.h" | 12 | #import "cocoslive.h" |
13 | #import "MainMenuLayer.h" | 13 | #import "MainMenuLayer.h" |
14 | #import "ClassicGameMode.h" | ||
15 | #import "JumpGameMode.h" | ||
16 | 14 | ||
17 | @implementation GameOverScene | 15 | @implementation GameOverScene |
18 | 16 | ||
19 | + (GameOverScene*)sceneWithScore:(int)score gameMode:(NSString*)gameMode | 17 | + (GameOverScene*)sceneWithScore:(int)score gameMode:(GameModeInfo*)gameMode |
20 | { | 18 | { |
21 | return [[[GameOverScene alloc] initWithScore:score gameMode:gameMode] autorelease]; | 19 | return [[[GameOverScene alloc] initWithScore:score gameMode:gameMode] autorelease]; |
22 | } | 20 | } |
23 | 21 | ||
24 | - (id)initWithScore:(int)score2 gameMode:(NSString*)gameMode2 | 22 | - (id)initWithScore:(int)m_score gameMode:(GameModeInfo*)m_gameMode |
25 | { | 23 | { |
26 | self = [super init]; | 24 | self = [super init]; |
27 | 25 | ||
@@ -37,8 +35,8 @@ | |||
37 | backgroundImage.position = ccp(240, 160); | 35 | backgroundImage.position = ccp(240, 160); |
38 | [theLayer addChild:backgroundImage z:0]; | 36 | [theLayer addChild:backgroundImage z:0]; |
39 | 37 | ||
40 | score = score2; | 38 | score = m_score; |
41 | gameMode = gameMode2; | 39 | gameMode = m_gameMode; |
42 | 40 | ||
43 | movingLayer = [[UIView alloc] initWithFrame:CGRectMake(0, -320, 480, 320)]; | 41 | movingLayer = [[UIView alloc] initWithFrame:CGRectMake(0, -320, 480, 320)]; |
44 | movingLayer.backgroundColor = [UIColor clearColor]; | 42 | movingLayer.backgroundColor = [UIColor clearColor]; |
@@ -47,7 +45,7 @@ | |||
47 | scoreField = [[UILabel alloc] initWithFrame:CGRectMake(205, 320-200, 0, 0)]; | 45 | scoreField = [[UILabel alloc] initWithFrame:CGRectMake(205, 320-200, 0, 0)]; |
48 | [scoreField setFont:[UIFont systemFontOfSize:20.0f]]; | 46 | [scoreField setFont:[UIFont systemFontOfSize:20.0f]]; |
49 | [scoreField setBackgroundColor:[UIColor clearColor]]; | 47 | [scoreField setBackgroundColor:[UIColor clearColor]]; |
50 | [scoreField setText:[NSString stringWithFormat:@"%d", score2]]; | 48 | [scoreField setText:[NSString stringWithFormat:@"%d", score]]; |
51 | CGSize labelSize = [scoreField.text sizeWithFont:scoreField.font constrainedToSize:CGSizeMake(160, 31) lineBreakMode:UILineBreakModeClip]; | 49 | CGSize labelSize = [scoreField.text sizeWithFont:scoreField.font constrainedToSize:CGSizeMake(160, 31) lineBreakMode:UILineBreakModeClip]; |
52 | [scoreField setFrame:CGRectMake(scoreField.frame.origin.x, scoreField.frame.origin.y, labelSize.width, labelSize.height)]; | 50 | [scoreField setFrame:CGRectMake(scoreField.frame.origin.x, scoreField.frame.origin.y, labelSize.width, labelSize.height)]; |
53 | [movingLayer addSubview:scoreField]; | 51 | [movingLayer addSubview:scoreField]; |
@@ -103,7 +101,7 @@ | |||
103 | textField.enabled = NO; | 101 | textField.enabled = NO; |
104 | submitSwitch.enabled = NO; | 102 | submitSwitch.enabled = NO; |
105 | 103 | ||
106 | const char* sqlQuery = [[NSString stringWithFormat:@"INSERT INTO highscores (name, score, gameMode) VALUES (\"%@\",%d,\"%@\")", [textField text], score, gameMode] UTF8String]; | 104 | const char* sqlQuery = [[NSString stringWithFormat:@"INSERT INTO highscores (name, score, gameMode) VALUES (\"%@\",%d,\"%@\")", [textField text], score, gameMode.name] UTF8String]; |
107 | sqlite3_stmt* compiled_statement; | 105 | sqlite3_stmt* compiled_statement; |
108 | 106 | ||
109 | if (sqlite3_prepare_v2([Cart_CollectAppDelegate database], sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK) | 107 | if (sqlite3_prepare_v2([Cart_CollectAppDelegate database], sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK) |
@@ -128,14 +126,7 @@ | |||
128 | 126 | ||
129 | CLScoreServerPost* server = [[CLScoreServerPost alloc] initWithGameName:@"Cart Collect" gameKey:@"38f440a074b3264386455a36b2706d8f" delegate:self]; | 127 | CLScoreServerPost* server = [[CLScoreServerPost alloc] initWithGameName:@"Cart Collect" gameKey:@"38f440a074b3264386455a36b2706d8f" delegate:self]; |
130 | NSMutableDictionary* dict = [[NSMutableDictionary alloc] init]; | 128 | NSMutableDictionary* dict = [[NSMutableDictionary alloc] init]; |
131 | 129 | [dict setObject:gameMode.globalHighscoreKey forKey:@"cc_category"]; | |
132 | if ([gameMode isEqual:@"Collect"]) | ||
133 | { | ||
134 | [dict setObject:@"Classic" forKey:@"cc_category"]; | ||
135 | } else { | ||
136 | [dict setObject:gameMode forKey:@"cc_category"]; | ||
137 | } | ||
138 | |||
139 | [dict setObject:[textField text] forKey:@"cc_playername"]; | 130 | [dict setObject:[textField text] forKey:@"cc_playername"]; |
140 | [dict setObject:[NSNumber numberWithInt:score] forKey:@"cc_score"]; | 131 | [dict setObject:[NSNumber numberWithInt:score] forKey:@"cc_score"]; |
141 | [server sendScore:dict]; | 132 | [server sendScore:dict]; |
@@ -224,13 +215,7 @@ | |||
224 | 215 | ||
225 | if (playAgain) | 216 | if (playAgain) |
226 | { | 217 | { |
227 | if ([gameMode isEqual:@"Collect"]) | 218 | [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:3.0f scene:[gameMode scene] withColor:ccc3(0, 0, 0)]]; |
228 | { | ||
229 | [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:3.0f scene:[ClassicGameMode scene] withColor:ccc3(0, 0, 0)]]; | ||
230 | } else if ([gameMode isEqual:@"Jump"]) | ||
231 | { | ||
232 | [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:3.0f scene:[JumpGameMode scene] withColor:ccc3(0, 0, 0)]]; | ||
233 | } | ||
234 | } else { | 219 | } else { |
235 | [[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]]; | 220 | [[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]]; |
236 | } | 221 | } |
diff --git a/Classes/JumpGameMode.m b/Classes/JumpGameMode.m index a5c2b8f..b1c5989 100644 --- a/Classes/JumpGameMode.m +++ b/Classes/JumpGameMode.m | |||
@@ -35,6 +35,26 @@ typedef enum { | |||
35 | kPointMultiplierObject | 35 | kPointMultiplierObject |
36 | } FallingObjects; | 36 | } FallingObjects; |
37 | 37 | ||
38 | static GameModeInfo* info; | ||
39 | |||
40 | + (GameModeInfo*)info | ||
41 | { | ||
42 | if (info == nil) | ||
43 | { | ||
44 | info = [[GameModeInfo alloc] initWithName:@"Jump" | ||
45 | location:@"Venice" | ||
46 | numOfStars:3 | ||
47 | imageFilename:[[NSBundle mainBundle] pathForResource:@"venice" ofType:@"png"] | ||
48 | unlocked:NO | ||
49 | unlockCondition:@"Get 2000 points in Collect!" | ||
50 | gameClass:[JumpGameMode class] | ||
51 | globalHighscoreKey:@"Jump" | ||
52 | starsToUnlock:2]; | ||
53 | } | ||
54 | |||
55 | return info; | ||
56 | } | ||
57 | |||
38 | - (id)init | 58 | - (id)init |
39 | { | 59 | { |
40 | self = [super init]; | 60 | self = [super init]; |
@@ -208,7 +228,7 @@ typedef enum { | |||
208 | { | 228 | { |
209 | [self unscheduleAllSelectors]; | 229 | [self unscheduleAllSelectors]; |
210 | 230 | ||
211 | [[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInT transitionWithDuration:1.5f scene:[GameOverScene sceneWithScore:score gameMode:@"Jump"]]]; | 231 | [[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInT transitionWithDuration:1.5f scene:[GameOverScene sceneWithScore:score gameMode:[JumpGameMode info]]]]; |
212 | } | 232 | } |
213 | 233 | ||
214 | if (wave) | 234 | if (wave) |
diff --git a/Classes/TutorialMode.m b/Classes/TutorialMode.m index 156b939..54f4e16 100644 --- a/Classes/TutorialMode.m +++ b/Classes/TutorialMode.m | |||
@@ -10,6 +10,7 @@ | |||
10 | #import "FallingObject.h" | 10 | #import "FallingObject.h" |
11 | #import "GameModeSelectionLayer.h" | 11 | #import "GameModeSelectionLayer.h" |
12 | #import "SimpleAudioEngine.h" | 12 | #import "SimpleAudioEngine.h" |
13 | #import "ClassicGameMode.h" | ||
13 | 14 | ||
14 | // Item tags: | 15 | // Item tags: |
15 | // 2000 - first dropped item | 16 | // 2000 - first dropped item |
@@ -30,6 +31,26 @@ typedef enum { | |||
30 | 31 | ||
31 | @synthesize currentTutorial; | 32 | @synthesize currentTutorial; |
32 | 33 | ||
34 | static GameModeInfo* info; | ||
35 | |||
36 | + (GameModeInfo*)info | ||
37 | { | ||
38 | if (info == nil) | ||
39 | { | ||
40 | info = [[GameModeInfo alloc] initWithName:@"Tutorial" | ||
41 | location:@"Florence" | ||
42 | numOfStars:0 | ||
43 | imageFilename:[[NSBundle mainBundle] pathForResource:@"florence" ofType:@"png"] | ||
44 | unlocked:YES | ||
45 | unlockCondition:nil | ||
46 | gameClass:[TutorialMode class] | ||
47 | globalHighscoreKey:nil | ||
48 | starsToUnlock:0]; | ||
49 | } | ||
50 | |||
51 | return info; | ||
52 | } | ||
53 | |||
33 | - (id)init | 54 | - (id)init |
34 | { | 55 | { |
35 | self = [super init]; | 56 | self = [super init]; |
@@ -357,8 +378,7 @@ typedef enum { | |||
357 | 378 | ||
358 | [self unschedule:@selector(randomlyAddObject:)]; | 379 | [self unschedule:@selector(randomlyAddObject:)]; |
359 | 380 | ||
360 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | 381 | [[ClassicGameMode info] unlock]; |
361 | [defaults setBool:YES forKey:@"hasDoneTutorial"]; | ||
362 | 382 | ||
363 | return; | 383 | return; |
364 | } else { | 384 | } else { |