diff options
Diffstat (limited to 'Classes')
| -rw-r--r-- | Classes/GameModeSelection.h | 8 | ||||
| -rw-r--r-- | Classes/GameModeSelection.m | 195 | ||||
| -rw-r--r-- | Classes/GameModeSelectionLayer.m | 15 | ||||
| -rw-r--r-- | Classes/UIImage+ColorMasking.h | 15 | ||||
| -rw-r--r-- | Classes/UIImage+ColorMasking.m | 77 | 
5 files changed, 247 insertions, 63 deletions
| diff --git a/Classes/GameModeSelection.h b/Classes/GameModeSelection.h index 66d0a5a..f6aaeff 100644 --- a/Classes/GameModeSelection.h +++ b/Classes/GameModeSelection.h | |||
| @@ -12,19 +12,15 @@ | |||
| 12 | NSString* name; | 12 | NSString* name; | 
| 13 | NSString* location; | 13 | NSString* location; | 
| 14 | BOOL unlocked; | 14 | BOOL unlocked; | 
| 15 | int highscore; | ||
| 16 | NSString* unlockCondition; | 15 | NSString* unlockCondition; | 
| 17 | |||
| 18 | CCLabelBMFont* nameLabel; | ||
| 19 | CCLabelBMFont* otherLabel; | ||
| 20 | } | 16 | } | 
| 21 | 17 | ||
| 22 | @property (readonly) NSString* name; | 18 | @property (readonly) NSString* name; | 
| 23 | @property (readonly) NSString* location; | 19 | @property (readonly) NSString* location; | 
| 24 | @property (readonly) BOOL unlocked; | 20 | @property (readonly) BOOL unlocked; | 
| 25 | @property (nonatomic,assign) int highscore; | ||
| 26 | @property (nonatomic,retain) NSString* unlockCondition; | ||
| 27 | - (id)initWithName:(NSString*)name location:(NSString*)location filename:(NSString*)filename unlocked:(BOOL)unlocked; | 21 | - (id)initWithName:(NSString*)name location:(NSString*)location filename:(NSString*)filename unlocked:(BOOL)unlocked; | 
| 22 | - (id)initWithName:(NSString *)name location:(NSString *)location filename:(NSString *)filename highscore:(int)highscore; | ||
| 23 | - (id)initWithName:(NSString *)name location:(NSString *)location filename:(NSString *)filename unlockCondition:(NSString*)unlockCondition; | ||
| 28 | - (void)buttonTapped; | 24 | - (void)buttonTapped; | 
| 29 | 25 | ||
| 30 | @end | 26 | @end | 
| diff --git a/Classes/GameModeSelection.m b/Classes/GameModeSelection.m index 0816828..fc6797a 100644 --- a/Classes/GameModeSelection.m +++ b/Classes/GameModeSelection.m | |||
| @@ -9,10 +9,11 @@ | |||
| 9 | #import "GameModeSelection.h" | 9 | #import "GameModeSelection.h" | 
| 10 | #import "TutorialMode.h" | 10 | #import "TutorialMode.h" | 
| 11 | #import "ClassicGameMode.h" | 11 | #import "ClassicGameMode.h" | 
| 12 | #import "UIImage+ColorMasking.h" | ||
| 12 | 13 | ||
| 13 | @implementation GameModeSelection | 14 | @implementation GameModeSelection | 
| 14 | 15 | ||
| 15 | @synthesize name, location, unlocked, highscore, unlockCondition; | 16 | @synthesize name, location, unlocked; | 
| 16 | 17 | ||
| 17 | - (id)initWithName:(NSString*)m_name location:(NSString*)m_location filename:(NSString*)filename unlocked:(BOOL)m_unlocked; | 18 | - (id)initWithName:(NSString*)m_name location:(NSString*)m_location filename:(NSString*)filename unlocked:(BOOL)m_unlocked; | 
| 18 | { | 19 | { | 
| @@ -26,92 +27,186 @@ | |||
| 26 | location = m_location; | 27 | location = m_location; | 
| 27 | unlocked = m_unlocked; | 28 | unlocked = m_unlocked; | 
| 28 | 29 | ||
| 29 | if (!unlocked) | 30 | NSString* filenameMod; | 
| 31 | |||
| 32 | if (unlocked) | ||
| 30 | { | 33 | { | 
| 34 | filenameMod = [NSString stringWithFormat:@"%@-unlocked", filename]; | ||
| 35 | } else { | ||
| 36 | filenameMod = [NSString stringWithFormat:@"%@-locked", filename]; | ||
| 31 | name = [@"" stringByPaddingToLength:name.length withString:@"?" startingAtIndex:0]; | 37 | name = [@"" stringByPaddingToLength:name.length withString:@"?" startingAtIndex:0]; | 
| 32 | location = [@"" stringByPaddingToLength:location.length withString:@"?" startingAtIndex:0]; | 38 | location = [@"" stringByPaddingToLength:location.length withString:@"?" startingAtIndex:0]; | 
| 33 | } | 39 | } | 
| 34 | 40 | ||
| 35 | nameLabel = [CCLabelBMFont labelWithString:[NSString stringWithFormat:@"%@ (%@)", location, name] fntFile:@"levelnames.fnt"]; | 41 | // First, create the frame that we will put the level picture inside | 
| 42 | CGImageRef framestuff = [[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"framestuff" ofType:@"png"]] CGImage]; | ||
| 43 | CGImageRef topLeftRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 0, 8, 8)); | ||
| 44 | CGImageRef topRightRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 0, 8, 8)); | ||
| 45 | CGImageRef bottomLeftRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 8, 8, 8)); | ||
| 46 | CGImageRef bottomRightRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 8, 8, 8)); | ||
| 47 | CGImageRef topBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 16, 8, 8)); | ||
| 48 | CGImageRef leftBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 16, 8, 8)); | ||
| 49 | CGImageRef rightBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 24, 8, 8)); | ||
| 50 | CGImageRef bottomBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 24, 8, 8)); | ||
| 51 | UIImage* topLeft = [UIImage imageWithCGImage:topLeftRef]; | ||
| 52 | UIImage* topRight = [UIImage imageWithCGImage:topRightRef]; | ||
| 53 | UIImage* bottomLeft = [UIImage imageWithCGImage:bottomLeftRef]; | ||
| 54 | UIImage* bottomRight = [UIImage imageWithCGImage:bottomRightRef]; | ||
| 55 | UIImage* topBorder = [UIImage imageWithCGImage:topBorderRef]; | ||
| 56 | UIImage* leftBorder = [UIImage imageWithCGImage:leftBorderRef]; | ||
| 57 | UIImage* rightBorder = [UIImage imageWithCGImage:rightBorderRef]; | ||
| 58 | UIImage* bottomBorder = [UIImage imageWithCGImage:bottomBorderRef]; | ||
| 59 | CGImageRelease(topLeftRef); | ||
| 60 | CGImageRelease(topRightRef); | ||
| 61 | CGImageRelease(bottomLeftRef); | ||
| 62 | CGImageRelease(bottomRightRef); | ||
| 63 | CGImageRelease(topBorderRef); | ||
| 64 | CGImageRelease(leftBorderRef); | ||
| 65 | CGImageRelease(rightBorderRef); | ||
| 66 | CGImageRelease(bottomBorderRef); | ||
| 36 | 67 | ||
| 37 | [self addChild:nameLabel]; | 68 | CGSize boxSize = CGSizeMake(128+12, 128+12); | 
| 38 | nameLabel.position = ccp(0, -32-nameLabel.contentSize.height); | 69 | UIGraphicsBeginImageContext(boxSize); | 
| 70 | CGContextRef context = UIGraphicsGetCurrentContext(); | ||
| 71 | [topLeft drawInRect:CGRectMake(0, 0, 8, 8)]; | ||
| 72 | [topBorder drawInRect:CGRectMake(8, 0, boxSize.width-16, 8)]; | ||
| 73 | [topRight drawInRect:CGRectMake(8+boxSize.width-16, 0, 8, 8)]; | ||
| 74 | [rightBorder drawInRect:CGRectMake(8+boxSize.width-16, 8, 8, boxSize.height-16)]; | ||
| 75 | [bottomRight drawInRect:CGRectMake(8+boxSize.width-16, 8+boxSize.height-16, 8, 8)]; | ||
| 76 | [bottomBorder drawInRect:CGRectMake(8, 8+boxSize.height-16, boxSize.width-16, 8)]; | ||
| 77 | [bottomLeft drawInRect:CGRectMake(0, 8+boxSize.height-16, 8, 8)]; | ||
| 78 | [leftBorder drawInRect:CGRectMake(0, 8, 8, boxSize.height-16)]; | ||
| 79 | CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]); | ||
| 80 | CGContextFillRect(context, CGRectMake(8, 8, boxSize.width-16, boxSize.height-16)); | ||
| 81 | UIImage* selectionBackground = UIGraphicsGetImageFromCurrentImageContext(); | ||
| 39 | 82 | ||
| 83 | // Now we want to put the level image inside the frame without messing up the frame itself | ||
| 40 | UIImage* innerPicture = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:filename ofType:@"png"]]; | 84 | UIImage* innerPicture = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:filename ofType:@"png"]]; | 
| 41 | UIGraphicsBeginImageContext(CGSizeMake(128, 128)); | 85 | CGContextClipToMask(context, CGRectMake(0, 0, boxSize.width, boxSize.height), [[selectionBackground opaqueMaskFromWhiteImage] CGImage]); | 
| 42 | CGContextRef context = UIGraphicsGetCurrentContext(); | 86 | [innerPicture drawInRect:CGRectMake(6, 6, 128, 128)]; | 
| 43 | UIGraphicsPushContext(context); | 87 | selectionBackground = UIGraphicsGetImageFromCurrentImageContext(); | 
| 88 | UIGraphicsEndImageContext(); | ||
| 89 | |||
| 90 | // The frame needs a shadow, so let's redraw it in a new context | ||
| 91 | UIGraphicsBeginImageContext(CGSizeMake(boxSize.width+10, boxSize.height+10)); | ||
| 92 | context = UIGraphicsGetCurrentContext(); | ||
| 93 | CGContextSaveGState(context); | ||
| 44 | 94 | ||
| 45 | if (unlocked) | 95 | if (unlocked) | 
| 46 | { | 96 | { | 
| 47 | [innerPicture drawInRect:CGRectMake(0, 0, 128, 128)]; | 97 | CGContextSetShadow(context, CGSizeMake(-6, 6), 4.0f); | 
| 98 | [selectionBackground drawInRect:CGRectMake(10, 0, boxSize.width, boxSize.height)]; | ||
| 48 | } else { | 99 | } else { | 
| 100 | // Draw the picture in grayscale if the level has not yet been unlocked | ||
| 101 | CGContextClipToMask(context, CGRectMake(10, 0, boxSize.width, boxSize.height), [selectionBackground CGImage]); | ||
| 49 | CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]); | 102 | CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]); | 
| 50 | CGContextFillRect(context, CGRectMake(0, 0, 128, 128)); | 103 | CGContextFillRect(context, CGRectMake(10, 0, boxSize.width, boxSize.height)); | 
| 51 | [innerPicture drawInRect:CGRectMake(0, 0, 128, 128) blendMode:kCGBlendModeLuminosity alpha:1.0]; | 104 | CGContextRestoreGState(context); | 
| 105 | |||
| 106 | CGContextSaveGState(context); | ||
| 107 | CGContextSetShadow(context, CGSizeMake(-6, 6), 4.0f); | ||
| 108 | [selectionBackground drawInRect:CGRectMake(10, 0, boxSize.width, boxSize.height) blendMode:kCGBlendModeLuminosity alpha:1.0]; | ||
| 52 | } | 109 | } | 
| 53 | 110 | ||
| 54 | UIGraphicsPopContext(); | 111 | CGContextRestoreGState(context); | 
| 55 | CGImageRef innerPictureRef = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | 112 | CGImageRef pictureRef = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | 
| 56 | 113 | ||
| 57 | if (unlocked) | 114 | CCSprite* picture = [CCSprite spriteWithCGImage:pictureRef key:[NSString stringWithFormat:@"gms-%@", filenameMod]]; | 
| 58 | { | ||
| 59 | CCSprite* picture = [CCSprite spriteWithCGImage:innerPictureRef key:[NSString stringWithFormat:@"gms-%@", filename]]; | ||
| 60 | UIGraphicsPushContext(context); | ||
| 61 | CGContextSetFillColorWithColor(context, [[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5] CGColor]); | ||
| 62 | CGContextFillRect(context, CGRectMake(0, 0, 128, 128)); | ||
| 63 | UIGraphicsPopContext(); | ||
| 64 | CGImageRef selectedButtonRef = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | ||
| 65 | CCSprite* selectedButton = [CCSprite spriteWithCGImage:selectedButtonRef key:[NSString stringWithFormat:@"gms-%@-selected", filename]]; | ||
| 66 | |||
| 67 | CCMenuItemSprite* pictureMenuItem = [CCMenuItemSprite itemFromNormalSprite:picture selectedSprite:selectedButton target:self selector:@selector(buttonTapped)]; | ||
| 68 | CCMenu* theMenu = [CCMenu menuWithItems:pictureMenuItem, nil]; | ||
| 69 | theMenu.position = ccp(0, 32); | ||
| 70 | [self addChild:theMenu]; | ||
| 71 | } else { | ||
| 72 | CCSprite* picture = [CCSprite spriteWithCGImage:innerPictureRef key:[NSString stringWithFormat:@"gms-%@-locked", filename]]; | ||
| 73 | picture.position = ccp(0, 32); | ||
| 74 | [self addChild:picture]; | ||
| 75 | } | ||
| 76 | 115 | ||
| 116 | // We're also going to need a "selected" image state for the button | ||
| 117 | CGContextSaveGState(context); | ||
| 118 | CGContextClipToMask(context, CGRectMake(10, 0, boxSize.width, boxSize.height), [selectionBackground CGImage]); | ||
| 119 | CGContextSetFillColorWithColor(context, [[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5] CGColor]); | ||
| 120 | CGContextFillRect(context, CGRectMake(10, 0, boxSize.width, boxSize.height)); | ||
| 121 | CGContextRestoreGState(context); | ||
| 122 | CGImageRef selectedButtonRef = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | ||
| 77 | UIGraphicsEndImageContext(); | 123 | UIGraphicsEndImageContext(); | 
| 124 | CCSprite* selectedButton = [CCSprite spriteWithCGImage:selectedButtonRef key:[NSString stringWithFormat:@"gms-%@-selected", filenameMod]]; | ||
| 125 | |||
| 126 | CCMenuItemSprite* pictureMenuItem = [CCMenuItemSprite itemFromNormalSprite:picture selectedSprite:selectedButton target:self selector:@selector(buttonTapped)]; | ||
| 127 | CCMenu* theMenu = [CCMenu menuWithItems:pictureMenuItem, nil]; | ||
| 128 | theMenu.position = ccp(-5, 0); | ||
| 129 | [self addChild:theMenu]; | ||
| 130 | |||
| 131 | // Render the titles | ||
| 132 | UIFont* titleFont = [UIFont fontWithName:@"AmericanTypewriter-Bold" size:18.0f]; | ||
| 133 | CGSize titleSize = [location sizeWithFont:titleFont constrainedToSize:CGSizeMake(128, 0)]; | ||
| 134 | UIFont* subtitleFont = [UIFont fontWithName:@"AmericanTypewriter" size:18.0f]; | ||
| 135 | CGSize subtitleSize = [name sizeWithFont:subtitleFont constrainedToSize:CGSizeMake(128, 0)]; | ||
| 136 | CGSize combinedTitleSize = CGSizeMake(128, titleSize.height + 10 + subtitleSize.height + 10); | ||
| 137 | |||
| 138 | UIGraphicsBeginImageContext(combinedTitleSize); | ||
| 139 | context = UIGraphicsGetCurrentContext(); | ||
| 140 | CGContextSetShadow(context, CGSizeMake(-6, 6), 4.0f); | ||
| 141 | [location drawInRect:CGRectMake(10, 0, 128, titleSize.height) withFont:titleFont lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentCenter]; | ||
| 142 | [name drawInRect:CGRectMake(10, titleSize.height, 128, subtitleSize.height) withFont:subtitleFont lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentCenter]; | ||
| 143 | |||
| 144 | CGImageRef titleImage = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | ||
| 145 | UIGraphicsEndImageContext(); | ||
| 146 | CCSprite* titleSprite = [CCSprite spriteWithCGImage:titleImage key:[NSString stringWithFormat:@"gms-%@-title", filenameMod]]; | ||
| 147 | titleSprite.position = ccp(-10, (boxSize.height)/2+(combinedTitleSize.height)/2); | ||
| 148 | [self addChild:titleSprite]; | ||
| 78 | } | 149 | } | 
| 79 | 150 | ||
| 80 | return self; | 151 | return self; | 
| 81 | } | 152 | } | 
| 82 | 153 | ||
| 83 | - (void)setHighscore:(int)m_highscore | 154 | - (id)initWithName:(NSString *)m_name location:(NSString *)m_location filename:(NSString *)m_filename highscore:(int)m_highscore | 
| 84 | { | 155 | { | 
| 85 | if (unlocked) | 156 | self = [self initWithName:m_name location:m_location filename:m_filename unlocked:YES]; | 
| 157 | |||
| 158 | if (nil != self) | ||
| 86 | { | 159 | { | 
| 87 | highscore = m_highscore; | 160 | if (m_highscore != 0) | 
| 88 | 161 | { | |
| 89 | otherLabel = [CCLabelBMFont labelWithString:[NSString stringWithFormat:@"Highscore: %d", highscore] fntFile:@"leveldescriptions.fnt"]; | 162 | // Render the highscore label | 
| 90 | otherLabel.position = ccp(0, -32-nameLabel.contentSize.height-otherLabel.contentSize.height); | 163 | NSString* highscoreString = [NSString stringWithFormat:@"Highscore: %d", m_highscore]; | 
| 91 | [self addChild:otherLabel]; | 164 | UIFont* highscoreFont = [UIFont fontWithName:@"AmericanTypewriter" size:16.0f]; | 
| 165 | CGSize highscoreSize = [highscoreString sizeWithFont:highscoreFont]; | ||
| 166 | |||
| 167 | UIGraphicsBeginImageContext(CGSizeMake(highscoreSize.width+10, highscoreSize.height+10)); | ||
| 168 | CGContextRef context = UIGraphicsGetCurrentContext(); | ||
| 169 | CGContextSetShadow(context, CGSizeMake(-6, 6), 4.0f); | ||
| 170 | [highscoreString drawInRect:CGRectMake(10, 0, highscoreSize.width, highscoreSize.height) withFont:highscoreFont]; | ||
| 171 | |||
| 172 | CGImageRef highscoreImage = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | ||
| 173 | UIGraphicsEndImageContext(); | ||
| 174 | CCSprite* highscoreSprite = [CCSprite spriteWithCGImage:highscoreImage key:[NSString stringWithFormat:@"gms-%@-highscore", m_filename]]; | ||
| 175 | highscoreSprite.position = ccp((128-highscoreSize.width)/2, 0-64-(highscoreSize.height)/2-10); | ||
| 176 | [self addChild:highscoreSprite]; | ||
| 177 | } | ||
| 92 | } | 178 | } | 
| 179 | |||
| 180 | return self; | ||
| 93 | } | 181 | } | 
| 94 | 182 | ||
| 95 | - (void)setUnlockCondition:(NSString *)m_unlockCondition | 183 | - (id)initWithName:(NSString *)m_name location:(NSString *)m_location filename:(NSString *)m_filename unlockCondition:(NSString*)m_unlockCondition | 
| 96 | { | 184 | { | 
| 97 | if (!unlocked) | 185 | self = [self initWithName:m_name location:m_location filename:m_filename unlocked:NO]; | 
| 186 | |||
| 187 | if (nil != self) | ||
| 98 | { | 188 | { | 
| 99 | unlockCondition = m_unlockCondition; | 189 | unlockCondition = m_unlockCondition; | 
| 100 | |||
| 101 | otherLabel = [CCLabelBMFont labelWithString:unlockCondition fntFile:@"leveldescriptions.fnt"]; | ||
| 102 | otherLabel.position = ccp(0, -32-nameLabel.contentSize.height-otherLabel.contentSize.height); | ||
| 103 | [self addChild:otherLabel]; | ||
| 104 | } | 190 | } | 
| 191 | |||
| 192 | return self; | ||
| 105 | } | 193 | } | 
| 106 | 194 | ||
| 107 | - (void)buttonTapped | 195 | - (void)buttonTapped | 
| 108 | { | 196 | { | 
| 109 | if ([name isEqual:@"Tutorial"]) | 197 | if (unlocked) | 
| 110 | { | ||
| 111 | [[CCDirector sharedDirector] replaceScene:[TutorialMode scene]]; | ||
| 112 | } else if ([name isEqual:@"Collect"]) | ||
| 113 | { | 198 | { | 
| 114 | [[CCDirector sharedDirector] replaceScene:[ClassicGameMode scene]]; | 199 | if ([name isEqual:@"Tutorial"]) | 
| 200 | { | ||
| 201 | [[CCDirector sharedDirector] replaceScene:[TutorialMode scene]]; | ||
| 202 | } else if ([name isEqual:@"Collect"]) | ||
| 203 | { | ||
| 204 | [[CCDirector sharedDirector] replaceScene:[ClassicGameMode scene]]; | ||
| 205 | } | ||
| 206 | } else { | ||
| 207 | UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"To unlock this game mode:" message:unlockCondition delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:nil]; | ||
| 208 | [alertView show]; | ||
| 209 | [alertView release]; | ||
| 115 | } | 210 | } | 
| 116 | } | 211 | } | 
| 117 | 212 | ||
| diff --git a/Classes/GameModeSelectionLayer.m b/Classes/GameModeSelectionLayer.m index 3e1995e..a90606e 100644 --- a/Classes/GameModeSelectionLayer.m +++ b/Classes/GameModeSelectionLayer.m | |||
| @@ -42,27 +42,28 @@ | |||
| 42 | [self addChild:tutorialSelection]; | 42 | [self addChild:tutorialSelection]; | 
| 43 | 43 | ||
| 44 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | 44 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | 
| 45 | GameModeSelection* collectSelection = [[[GameModeSelection alloc] initWithName:@"Collect" location:@"Paris" filename:@"paris" unlocked:[defaults boolForKey:@"hasDoneTutorial"]] autorelease]; | 45 | GameModeSelection* collectSelection; | 
| 46 | collectSelection.position = ccp(400-32, 160); | ||
| 47 | 46 | ||
| 48 | if (collectSelection.unlocked) | 47 | if ([defaults boolForKey:@"hasDoneTutorial"]) | 
| 49 | { | 48 | { | 
| 50 | const char* sqlQuery = "SELECT * FROM highscores ORDER BY score DESC LIMIT 1"; | 49 | const char* sqlQuery = "SELECT * FROM highscores ORDER BY score DESC LIMIT 1"; | 
| 51 | sqlite3_stmt* compiled_statement; | 50 | sqlite3_stmt* compiled_statement; | 
| 51 | int score = 0; | ||
| 52 | 52 | ||
| 53 | if (sqlite3_prepare_v2([Cart_CollectAppDelegate database], sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK) | 53 | if (sqlite3_prepare_v2([Cart_CollectAppDelegate database], sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK) | 
| 54 | { | 54 | { | 
| 55 | if (sqlite3_step(compiled_statement) == SQLITE_ROW) | 55 | if (sqlite3_step(compiled_statement) == SQLITE_ROW) | 
| 56 | { | 56 | { | 
| 57 | int score = sqlite3_column_int(compiled_statement, 2); | 57 | score = sqlite3_column_int(compiled_statement, 2); | 
| 58 | |||
| 59 | [collectSelection setHighscore:score]; | ||
| 60 | } | 58 | } | 
| 61 | } | 59 | } | 
| 60 | |||
| 61 | collectSelection = [[[GameModeSelection alloc] initWithName:@"Collect" location:@"Paris" filename:@"paris" highscore:score] autorelease]; | ||
| 62 | } else { | 62 | } else { | 
| 63 | [collectSelection setUnlockCondition:@"Beat the tutorial!"]; | 63 | collectSelection = [[[GameModeSelection alloc] initWithName:@"Collect" location:@"Paris" filename:@"paris" unlockCondition:@"Beat the tutorial!"] autorelease]; | 
| 64 | } | 64 | } | 
| 65 | 65 | ||
| 66 | collectSelection.position = ccp(320+32,160); | ||
| 66 | [self addChild:collectSelection]; | 67 | [self addChild:collectSelection]; | 
| 67 | 68 | ||
| 68 | CCMenuItemImage* newgameMenuItem = [CCMenuItemImage itemFromNormalImage:@"back.png" selectedImage:@"back2.png" target:self selector:@selector(mainmenu)]; | 69 | CCMenuItemImage* newgameMenuItem = [CCMenuItemImage itemFromNormalImage:@"back.png" selectedImage:@"back2.png" target:self selector:@selector(mainmenu)]; | 
| diff --git a/Classes/UIImage+ColorMasking.h b/Classes/UIImage+ColorMasking.h new file mode 100644 index 0000000..d25fafb --- /dev/null +++ b/Classes/UIImage+ColorMasking.h | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | // | ||
| 2 | // UIImage+ColorMasking.h | ||
| 3 | // Cartographic | ||
| 4 | // | ||
| 5 | // Created by Starla Insigna on 8/22/11. | ||
| 6 | // Copyright 2011 Four Island. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <UIKit/UIKit.h> | ||
| 10 | |||
| 11 | @interface UIImage (ColorMasking) | ||
| 12 | |||
| 13 | - (UIImage *)opaqueMaskFromWhiteImage; | ||
| 14 | |||
| 15 | @end | ||
| diff --git a/Classes/UIImage+ColorMasking.m b/Classes/UIImage+ColorMasking.m new file mode 100644 index 0000000..e4da8c8 --- /dev/null +++ b/Classes/UIImage+ColorMasking.m | |||
| @@ -0,0 +1,77 @@ | |||
| 1 | // | ||
| 2 | // UIImage+ColorMasking.m | ||
| 3 | // Cartographic | ||
| 4 | // | ||
| 5 | // Created by Starla Insigna on 8/22/11. | ||
| 6 | // Copyright 2011 Four Island. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "UIImage+ColorMasking.h" | ||
| 10 | |||
| 11 | @implementation UIImage (ColorMasking) | ||
| 12 | |||
| 13 | typedef enum { | ||
| 14 | ALPHA = 0, | ||
| 15 | BLUE = 1, | ||
| 16 | GREEN = 2, | ||
| 17 | RED = 3 | ||
| 18 | } PIXELS; | ||
| 19 | |||
| 20 | - (UIImage *)opaqueMaskFromWhiteImage | ||
| 21 | { | ||
| 22 | CGSize size = [self size]; | ||
| 23 | int width = size.width; | ||
| 24 | int height = size.height; | ||
| 25 | |||
| 26 | // the pixels will be painted to this array | ||
| 27 | uint32_t *pixels = (uint32_t *) malloc(width * height * sizeof(uint32_t)); | ||
| 28 | |||
| 29 | // clear the pixels so any transparency is preserved | ||
| 30 | memset(pixels, 0, width * height * sizeof(uint32_t)); | ||
| 31 | |||
| 32 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); | ||
| 33 | |||
| 34 | // create a context with RGBA pixels | ||
| 35 | CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * sizeof(uint32_t), colorSpace, | ||
| 36 | kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast); | ||
| 37 | |||
| 38 | // paint the bitmap to our context which will fill in the pixels array | ||
| 39 | CGContextDrawImage(context, CGRectMake(0, 0, width, height), [self CGImage]); | ||
| 40 | |||
| 41 | for(int y = 0; y < height; y++) { | ||
| 42 | for(int x = 0; x < width; x++) { | ||
| 43 | uint8_t *rgbaPixel = (uint8_t *) &pixels[y * width + x]; | ||
| 44 | |||
| 45 | if ((rgbaPixel[RED] == 255) && (rgbaPixel[GREEN] == 255) && (rgbaPixel[BLUE] == 255) && (rgbaPixel[ALPHA] == 255)) | ||
| 46 | { | ||
| 47 | rgbaPixel[RED] = 255; | ||
| 48 | rgbaPixel[GREEN] = 255; | ||
| 49 | rgbaPixel[BLUE] = 255; | ||
| 50 | rgbaPixel[ALPHA] = 255; | ||
| 51 | } else { | ||
| 52 | rgbaPixel[RED] = 0; | ||
| 53 | rgbaPixel[GREEN] = 0; | ||
| 54 | rgbaPixel[BLUE] = 0; | ||
| 55 | rgbaPixel[ALPHA] = 0; | ||
| 56 | } | ||
| 57 | } | ||
| 58 | } | ||
| 59 | |||
| 60 | // create a new CGImageRef from our context with the modified pixels | ||
| 61 | CGImageRef image = CGBitmapContextCreateImage(context); | ||
| 62 | |||
| 63 | // we're done with the context, color space, and pixels | ||
| 64 | CGContextRelease(context); | ||
| 65 | CGColorSpaceRelease(colorSpace); | ||
| 66 | free(pixels); | ||
| 67 | |||
| 68 | // make a new UIImage to return | ||
| 69 | UIImage *resultUIImage = [UIImage imageWithCGImage:image]; | ||
| 70 | |||
| 71 | // we're done with image now too | ||
| 72 | CGImageRelease(image); | ||
| 73 | |||
| 74 | return resultUIImage; | ||
| 75 | } | ||
| 76 | |||
| 77 | @end | ||
