diff options
| author | Starla Insigna <starla4444@gmail.com> | 2011-07-30 11:19:14 -0400 |
|---|---|---|
| committer | Starla Insigna <starla4444@gmail.com> | 2011-07-30 11:19:14 -0400 |
| commit | 9cd57b731ab1c666d4a1cb725538fdc137763d12 (patch) | |
| tree | 5bac45ae5157a1cb10c6e45500cbf72789917980 /Classes | |
| download | cartcollect-9cd57b731ab1c666d4a1cb725538fdc137763d12.tar.gz cartcollect-9cd57b731ab1c666d4a1cb725538fdc137763d12.tar.bz2 cartcollect-9cd57b731ab1c666d4a1cb725538fdc137763d12.zip | |
Initial commit (version 0.2.1)
Diffstat (limited to 'Classes')
| -rwxr-xr-x | Classes/Bottle.h | 19 | ||||
| -rwxr-xr-x | Classes/Bottle.m | 32 | ||||
| -rwxr-xr-x | Classes/Cart_CollectAppDelegate.h | 23 | ||||
| -rwxr-xr-x | Classes/Cart_CollectAppDelegate.m | 212 | ||||
| -rwxr-xr-x | Classes/Cherry.h | 19 | ||||
| -rwxr-xr-x | Classes/Cherry.m | 32 | ||||
| -rwxr-xr-x | Classes/FallingObject.h | 21 | ||||
| -rwxr-xr-x | Classes/FallingObject.m | 34 | ||||
| -rwxr-xr-x | Classes/GameConfig.h | 45 | ||||
| -rwxr-xr-x | Classes/GameLayer.h | 38 | ||||
| -rwxr-xr-x | Classes/GameLayer.m | 301 | ||||
| -rwxr-xr-x | Classes/GameOverLayer.h | 32 | ||||
| -rwxr-xr-x | Classes/GameOverLayer.m | 196 | ||||
| -rwxr-xr-x | Classes/Highscore.h | 25 | ||||
| -rwxr-xr-x | Classes/Highscore.m | 37 | ||||
| -rwxr-xr-x | Classes/HighscoreListController.h | 32 | ||||
| -rwxr-xr-x | Classes/HighscoreListController.m | 371 | ||||
| -rwxr-xr-x | Classes/MainMenuLayer.h | 24 | ||||
| -rwxr-xr-x | Classes/MainMenuLayer.m | 68 | ||||
| -rwxr-xr-x | Classes/OneUp.h | 18 | ||||
| -rwxr-xr-x | Classes/OneUp.m | 27 | ||||
| -rwxr-xr-x | Classes/PauseLayer.h | 22 | ||||
| -rwxr-xr-x | Classes/PauseLayer.m | 68 | ||||
| -rwxr-xr-x | Classes/Rock.h | 18 | ||||
| -rwxr-xr-x | Classes/Rock.m | 27 | ||||
| -rwxr-xr-x | Classes/RootViewController.h | 16 | ||||
| -rwxr-xr-x | Classes/RootViewController.m | 152 | ||||
| -rwxr-xr-x | Classes/ValuableObject.h | 15 |
28 files changed, 1924 insertions, 0 deletions
| diff --git a/Classes/Bottle.h b/Classes/Bottle.h new file mode 100755 index 0000000..37c41d5 --- /dev/null +++ b/Classes/Bottle.h | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | // | ||
| 2 | // Bottle.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/19/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <Foundation/Foundation.h> | ||
| 10 | #import "FallingObject.h" | ||
| 11 | #import "ValuableObject.h" | ||
| 12 | |||
| 13 | @interface Bottle : FallingObject <ValuableObject> { | ||
| 14 | |||
| 15 | } | ||
| 16 | |||
| 17 | - (id)init; | ||
| 18 | |||
| 19 | @end | ||
| diff --git a/Classes/Bottle.m b/Classes/Bottle.m new file mode 100755 index 0000000..bae2716 --- /dev/null +++ b/Classes/Bottle.m | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | // | ||
| 2 | // Bottle.m | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/19/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "Bottle.h" | ||
| 10 | |||
| 11 | |||
| 12 | @implementation Bottle | ||
| 13 | |||
| 14 | - (id)init | ||
| 15 | { | ||
| 16 | self = [super init]; | ||
| 17 | |||
| 18 | if (nil != self) | ||
| 19 | { | ||
| 20 | sprite = [CCSprite spriteWithFile:@"bottle.png"]; | ||
| 21 | weight = 6; | ||
| 22 | } | ||
| 23 | |||
| 24 | return self; | ||
| 25 | } | ||
| 26 | |||
| 27 | - (int)pointValue | ||
| 28 | { | ||
| 29 | return 25; | ||
| 30 | } | ||
| 31 | |||
| 32 | @end | ||
| diff --git a/Classes/Cart_CollectAppDelegate.h b/Classes/Cart_CollectAppDelegate.h new file mode 100755 index 0000000..0ef23a7 --- /dev/null +++ b/Classes/Cart_CollectAppDelegate.h | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | // | ||
| 2 | // Cart_CollectAppDelegate.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/18/11. | ||
| 6 | // Copyright __MyCompanyName__ 2011. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <UIKit/UIKit.h> | ||
| 10 | #import <sqlite3.h> | ||
| 11 | |||
| 12 | @class RootViewController; | ||
| 13 | |||
| 14 | @interface Cart_CollectAppDelegate : NSObject <UIApplicationDelegate> { | ||
| 15 | UIWindow *window; | ||
| 16 | RootViewController *viewController; | ||
| 17 | } | ||
| 18 | |||
| 19 | @property (nonatomic, retain) UIWindow *window; | ||
| 20 | @property (nonatomic, retain) RootViewController* viewController; | ||
| 21 | + (sqlite3*)database; | ||
| 22 | |||
| 23 | @end | ||
| diff --git a/Classes/Cart_CollectAppDelegate.m b/Classes/Cart_CollectAppDelegate.m new file mode 100755 index 0000000..201422f --- /dev/null +++ b/Classes/Cart_CollectAppDelegate.m | |||
| @@ -0,0 +1,212 @@ | |||
| 1 | // | ||
| 2 | // Cart_CollectAppDelegate.m | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/18/11. | ||
| 6 | // Copyright __MyCompanyName__ 2011. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "cocos2d.h" | ||
| 10 | |||
| 11 | #import "Cart_CollectAppDelegate.h" | ||
| 12 | #import "GameConfig.h" | ||
| 13 | #import "GameLayer.h" | ||
| 14 | #import "RootViewController.h" | ||
| 15 | #import "MainMenuLayer.h" | ||
| 16 | |||
| 17 | @implementation Cart_CollectAppDelegate | ||
| 18 | |||
| 19 | @synthesize window, viewController; | ||
| 20 | |||
| 21 | - (void) removeStartupFlicker | ||
| 22 | { | ||
| 23 | // | ||
| 24 | // THIS CODE REMOVES THE STARTUP FLICKER | ||
| 25 | // | ||
| 26 | // Uncomment the following code if you Application only supports landscape mode | ||
| 27 | // | ||
| 28 | #if GAME_AUTOROTATION == kGameAutorotationUIViewController | ||
| 29 | |||
| 30 | // CC_ENABLE_DEFAULT_GL_STATES(); | ||
| 31 | // CCDirector *director = [CCDirector sharedDirector]; | ||
| 32 | // CGSize size = [director winSize]; | ||
| 33 | // CCSprite *sprite = [CCSprite spriteWithFile:@"Default.png"]; | ||
| 34 | // sprite.position = ccp(size.width/2, size.height/2); | ||
| 35 | // sprite.rotation = -90; | ||
| 36 | // [sprite visit]; | ||
| 37 | // [[director openGLView] swapBuffers]; | ||
| 38 | // CC_ENABLE_DEFAULT_GL_STATES(); | ||
| 39 | |||
| 40 | #endif // GAME_AUTOROTATION == kGameAutorotationUIViewController | ||
| 41 | } | ||
| 42 | |||
| 43 | - (void) applicationDidFinishLaunching:(UIApplication*)application | ||
| 44 | { | ||
| 45 | [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; | ||
| 46 | |||
| 47 | NSMutableDictionary* registerDefaults = [NSMutableDictionary dictionaryWithObjectsAndKeys: | ||
| 48 | @"", @"username", | ||
| 49 | [NSNumber numberWithBool:YES], @"submitScore", | ||
| 50 | nil]; | ||
| 51 | [[NSUserDefaults standardUserDefaults] registerDefaults:registerDefaults]; | ||
| 52 | |||
| 53 | // Init the window | ||
| 54 | window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; | ||
| 55 | |||
| 56 | // Try to use CADisplayLink director | ||
| 57 | // if it fails (SDK < 3.1) use the default director | ||
| 58 | if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] ) | ||
| 59 | [CCDirector setDirectorType:kCCDirectorTypeDefault]; | ||
| 60 | |||
| 61 | |||
| 62 | CCDirector *director = [CCDirector sharedDirector]; | ||
| 63 | |||
| 64 | // Init the View Controller | ||
| 65 | viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil]; | ||
| 66 | viewController.wantsFullScreenLayout = YES; | ||
| 67 | |||
| 68 | // | ||
| 69 | // Create the EAGLView manually | ||
| 70 | // 1. Create a RGB565 format. Alternative: RGBA8 | ||
| 71 | // 2. depth format of 0 bit. Use 16 or 24 bit for 3d effects, like CCPageTurnTransition | ||
| 72 | // | ||
| 73 | // | ||
| 74 | EAGLView *glView = [EAGLView viewWithFrame:[window bounds] | ||
| 75 | pixelFormat:kEAGLColorFormatRGB565 // kEAGLColorFormatRGBA8 | ||
| 76 | depthFormat:0 // GL_DEPTH_COMPONENT16_OES | ||
| 77 | ]; | ||
| 78 | |||
| 79 | // attach the openglView to the director | ||
| 80 | [director setOpenGLView:glView]; | ||
| 81 | |||
| 82 | // // Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices | ||
| 83 | //if( ! [director enableRetinaDisplay:YES] ) | ||
| 84 | // CCLOG(@"Retina Display Not supported"); | ||
| 85 | |||
| 86 | // | ||
| 87 | // VERY IMPORTANT: | ||
| 88 | // If the rotation is going to be controlled by a UIViewController | ||
| 89 | // then the device orientation should be "Portrait". | ||
| 90 | // | ||
| 91 | // IMPORTANT: | ||
| 92 | // By default, this template only supports Landscape orientations. | ||
| 93 | // Edit the RootViewController.m file to edit the supported orientations. | ||
| 94 | // | ||
| 95 | #if GAME_AUTOROTATION == kGameAutorotationUIViewController | ||
| 96 | [director setDeviceOrientation:kCCDeviceOrientationPortrait]; | ||
| 97 | #else | ||
| 98 | [director setDeviceOrientation:kCCDeviceOrientationPortrait]; | ||
| 99 | #endif | ||
| 100 | |||
| 101 | [director setAnimationInterval:1.0/60]; | ||
| 102 | //[director setDisplayFPS:YES]; | ||
| 103 | |||
| 104 | |||
| 105 | // make the OpenGLView a child of the view controller | ||
| 106 | [viewController setView:glView]; | ||
| 107 | |||
| 108 | // make the View Controller a child of the main window | ||
| 109 | [window addSubview: viewController.view]; | ||
| 110 | |||
| 111 | [window makeKeyAndVisible]; | ||
| 112 | |||
| 113 | // Default texture format for PNG/BMP/TIFF/JPEG/GIF images | ||
| 114 | // It can be RGBA8888, RGBA4444, RGB5_A1, RGB565 | ||
| 115 | // You can change anytime. | ||
| 116 | [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888]; | ||
| 117 | |||
| 118 | |||
| 119 | // Removes the startup flicker | ||
| 120 | [self removeStartupFlicker]; | ||
| 121 | |||
| 122 | // Run the intro Scene | ||
| 123 | [[CCDirector sharedDirector] runWithScene: [MainMenuLayer scene]]; | ||
| 124 | } | ||
| 125 | |||
| 126 | |||
| 127 | - (void)applicationWillResignActive:(UIApplication *)application { | ||
| 128 | [[CCDirector sharedDirector] pause]; | ||
| 129 | } | ||
| 130 | |||
| 131 | - (void)applicationDidBecomeActive:(UIApplication *)application { | ||
| 132 | [[CCDirector sharedDirector] resume]; | ||
| 133 | } | ||
| 134 | |||
| 135 | - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { | ||
| 136 | [[CCDirector sharedDirector] purgeCachedData]; | ||
| 137 | } | ||
| 138 | |||
| 139 | -(void) applicationDidEnterBackground:(UIApplication*)application { | ||
| 140 | [[CCDirector sharedDirector] stopAnimation]; | ||
| 141 | |||
| 142 | if ([[CCDirector sharedDirector] runningScene].tag == 436) | ||
| 143 | { | ||
| 144 | [[CCDirector sharedDirector] replaceScene:[PauseLayer sceneWithScene:[[CCDirector sharedDirector] runningScene]]]; | ||
| 145 | } | ||
| 146 | } | ||
| 147 | |||
| 148 | -(void) applicationWillEnterForeground:(UIApplication*)application { | ||
| 149 | [[CCDirector sharedDirector] startAnimation]; | ||
| 150 | } | ||
| 151 | |||
| 152 | - (void)applicationWillTerminate:(UIApplication *)application { | ||
| 153 | CCDirector *director = [CCDirector sharedDirector]; | ||
| 154 | |||
| 155 | sqlite3_close([Cart_CollectAppDelegate database]); | ||
| 156 | |||
| 157 | [[director openGLView] removeFromSuperview]; | ||
| 158 | |||
| 159 | [viewController release]; | ||
| 160 | |||
| 161 | [window release]; | ||
| 162 | |||
| 163 | [director end]; | ||
| 164 | } | ||
| 165 | |||
| 166 | - (void)applicationSignificantTimeChange:(UIApplication *)application { | ||
| 167 | [[CCDirector sharedDirector] setNextDeltaTimeZero:YES]; | ||
| 168 | } | ||
| 169 | |||
| 170 | - (void)dealloc { | ||
| 171 | //[[CCDirector sharedDirector] release]; | ||
| 172 | [window release]; | ||
| 173 | [super dealloc]; | ||
| 174 | } | ||
| 175 | |||
| 176 | + (sqlite3*)database | ||
| 177 | { | ||
| 178 | static sqlite3* database = nil; | ||
| 179 | |||
| 180 | if (database == nil) | ||
| 181 | { | ||
| 182 | NSString* databaseName = @"cartdata.sqlite3"; | ||
| 183 | NSArray* documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); | ||
| 184 | NSString* documentsDir = [documentPaths objectAtIndex:0]; | ||
| 185 | NSString* databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; | ||
| 186 | NSFileManager* fileManager = [NSFileManager defaultManager]; | ||
| 187 | NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults]; | ||
| 188 | |||
| 189 | if (![fileManager fileExistsAtPath:databasePath]) | ||
| 190 | { | ||
| 191 | NSString* databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName]; | ||
| 192 | [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil]; | ||
| 193 | //[fileManager release]; | ||
| 194 | |||
| 195 | [userDefaults setInteger:1 forKey:@"databaseVersion"]; | ||
| 196 | } | ||
| 197 | |||
| 198 | if ([userDefaults integerForKey:@"databaseVersion"] < 1) | ||
| 199 | { | ||
| 200 | // Upgrade the database to version 1, which is completely unnecessary as no prior version exists | ||
| 201 | } | ||
| 202 | |||
| 203 | if (sqlite3_open([databasePath UTF8String], &database) != SQLITE_OK) | ||
| 204 | { | ||
| 205 | NSLog(@"Failed to open database"); | ||
| 206 | } | ||
| 207 | } | ||
| 208 | |||
| 209 | return database; | ||
| 210 | } | ||
| 211 | |||
| 212 | @end | ||
| diff --git a/Classes/Cherry.h b/Classes/Cherry.h new file mode 100755 index 0000000..65437f5 --- /dev/null +++ b/Classes/Cherry.h | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | // | ||
| 2 | // Cherry.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/19/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <Foundation/Foundation.h> | ||
| 10 | #import "FallingObject.h" | ||
| 11 | #import "ValuableObject.h" | ||
| 12 | |||
| 13 | @interface Cherry : FallingObject <ValuableObject> { | ||
| 14 | |||
| 15 | } | ||
| 16 | |||
| 17 | - (id)init; | ||
| 18 | |||
| 19 | @end | ||
| diff --git a/Classes/Cherry.m b/Classes/Cherry.m new file mode 100755 index 0000000..f53c86e --- /dev/null +++ b/Classes/Cherry.m | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | // | ||
| 2 | // Cherry.m | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/19/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "Cherry.h" | ||
| 10 | |||
| 11 | |||
| 12 | @implementation Cherry | ||
| 13 | |||
| 14 | - (id)init | ||
| 15 | { | ||
| 16 | self = [super init]; | ||
| 17 | |||
| 18 | if (nil != self) | ||
| 19 | { | ||
| 20 | sprite = [CCSprite spriteWithFile:@"cherry.png"]; | ||
| 21 | weight = 5; | ||
| 22 | } | ||
| 23 | |||
| 24 | return self; | ||
| 25 | } | ||
| 26 | |||
| 27 | - (int)pointValue | ||
| 28 | { | ||
| 29 | return 10; | ||
| 30 | } | ||
| 31 | |||
| 32 | @end | ||
| diff --git a/Classes/FallingObject.h b/Classes/FallingObject.h new file mode 100755 index 0000000..a1ac56e --- /dev/null +++ b/Classes/FallingObject.h | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | // | ||
| 2 | // GameObject.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/19/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <Foundation/Foundation.h> | ||
| 10 | #import "cocos2d.h" | ||
| 11 | |||
| 12 | @interface FallingObject : NSObject { | ||
| 13 | CCSprite* sprite; | ||
| 14 | int weight; | ||
| 15 | } | ||
| 16 | |||
| 17 | @property (readonly) CCSprite* sprite; | ||
| 18 | @property (readonly) int weight; | ||
| 19 | - (id)init; | ||
| 20 | |||
| 21 | @end | ||
| diff --git a/Classes/FallingObject.m b/Classes/FallingObject.m new file mode 100755 index 0000000..297b426 --- /dev/null +++ b/Classes/FallingObject.m | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | // | ||
| 2 | // GameObject.m | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/19/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "FallingObject.h" | ||
| 10 | |||
| 11 | |||
| 12 | @implementation FallingObject | ||
| 13 | |||
| 14 | @synthesize sprite, weight; | ||
| 15 | |||
| 16 | - (id)init | ||
| 17 | { | ||
| 18 | self = [super init]; | ||
| 19 | |||
| 20 | if (nil != self) | ||
| 21 | { | ||
| 22 | |||
| 23 | } | ||
| 24 | |||
| 25 | return self; | ||
| 26 | } | ||
| 27 | |||
| 28 | - (void)dealloc | ||
| 29 | { | ||
| 30 | [sprite release]; | ||
| 31 | [super dealloc]; | ||
| 32 | } | ||
| 33 | |||
| 34 | @end \ No newline at end of file | ||
| diff --git a/Classes/GameConfig.h b/Classes/GameConfig.h new file mode 100755 index 0000000..1dd3e99 --- /dev/null +++ b/Classes/GameConfig.h | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | // | ||
| 2 | // GameConfig.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/18/11. | ||
| 6 | // Copyright __MyCompanyName__ 2011. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #ifndef __GAME_CONFIG_H | ||
| 10 | #define __GAME_CONFIG_H | ||
| 11 | |||
| 12 | // | ||
| 13 | // Supported Autorotations: | ||
| 14 | // None, | ||
| 15 | // UIViewController, | ||
| 16 | // CCDirector | ||
| 17 | // | ||
| 18 | #define kGameAutorotationNone 0 | ||
| 19 | #define kGameAutorotationCCDirector 1 | ||
| 20 | #define kGameAutorotationUIViewController 2 | ||
| 21 | |||
| 22 | // | ||
| 23 | // Define here the type of autorotation that you want for your game | ||
| 24 | // | ||
| 25 | |||
| 26 | // 3rd generation and newer devices: Rotate using UIViewController. Rotation should be supported on iPad apps. | ||
| 27 | // TIP: | ||
| 28 | // To improve the performance, you should set this value to "kGameAutorotationNone" or "kGameAutorotationCCDirector" | ||
| 29 | #if defined(__ARM_NEON__) || TARGET_IPHONE_SIMULATOR | ||
| 30 | #define GAME_AUTOROTATION kGameAutorotationUIViewController | ||
| 31 | |||
| 32 | // ARMv6 (1st and 2nd generation devices): Don't rotate. It is very expensive | ||
| 33 | #elif __arm__ | ||
| 34 | #define GAME_AUTOROTATION kGameAutorotationNone | ||
| 35 | |||
| 36 | |||
| 37 | // Ignore this value on Mac | ||
| 38 | #elif defined(__MAC_OS_X_VERSION_MAX_ALLOWED) | ||
| 39 | |||
| 40 | #else | ||
| 41 | #error(unknown architecture) | ||
| 42 | #endif | ||
| 43 | |||
| 44 | #endif // __GAME_CONFIG_H | ||
| 45 | |||
| diff --git a/Classes/GameLayer.h b/Classes/GameLayer.h new file mode 100755 index 0000000..88a1406 --- /dev/null +++ b/Classes/GameLayer.h | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | // | ||
| 2 | // GameLayer.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/18/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <Foundation/Foundation.h> | ||
| 10 | #import "cocos2d.h" | ||
| 11 | #import "FallingObject.h" | ||
| 12 | #import "Cherry.h" | ||
| 13 | #import "Bottle.h" | ||
| 14 | #import "OneUp.h" | ||
| 15 | #import "Rock.h" | ||
| 16 | #import "GameOverLayer.h" | ||
| 17 | #import "ValuableObject.h" | ||
| 18 | #import "PauseLayer.h" | ||
| 19 | #import "CocosDenshion.h" | ||
| 20 | #import "SimpleAudioEngine.h" | ||
| 21 | |||
| 22 | @interface GameLayer : CCLayer { | ||
| 23 | NSMutableSet* objects; | ||
| 24 | float accelX; | ||
| 25 | CCLabelBMFont* scoreLabel; | ||
| 26 | CCLabelBMFont* livesLabel; | ||
| 27 | int score; | ||
| 28 | int lives; | ||
| 29 | float addSpeed; | ||
| 30 | CCSprite* cartSprite; | ||
| 31 | } | ||
| 32 | |||
| 33 | + (CCScene*)scene; | ||
| 34 | - (id)init; | ||
| 35 | - (void)updateLabels; | ||
| 36 | - (void)pause; | ||
| 37 | |||
| 38 | @end | ||
| diff --git a/Classes/GameLayer.m b/Classes/GameLayer.m new file mode 100755 index 0000000..32ca483 --- /dev/null +++ b/Classes/GameLayer.m | |||
| @@ -0,0 +1,301 @@ | |||
| 1 | // | ||
| 2 | // GameLayer.m | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/18/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "GameLayer.h" | ||
| 10 | |||
| 11 | |||
| 12 | @implementation GameLayer | ||
| 13 | |||
| 14 | + (CCScene*)scene | ||
| 15 | { | ||
| 16 | CCScene* scene = [CCScene node]; | ||
| 17 | |||
| 18 | CCLayerColor* backgroundLayer = [CCLayerColor layerWithColor:ccc4(255, 255, 255, 255)]; | ||
| 19 | [scene addChild:backgroundLayer]; | ||
| 20 | |||
| 21 | GameLayer* layer = [GameLayer node]; | ||
| 22 | [scene addChild:layer]; | ||
| 23 | |||
| 24 | scene.tag = 436; | ||
| 25 | |||
| 26 | return scene; | ||
| 27 | } | ||
| 28 | |||
| 29 | - (void)tick:(ccTime)dt | ||
| 30 | { | ||
| 31 | // Move the cart based on acceleration gathered from accelerometer | ||
| 32 | cartSprite.position = ccp(MIN(MAX(cartSprite.position.x+accelX, 16),464), cartSprite.position.y); | ||
| 33 | |||
| 34 | int lastScore = score; | ||
| 35 | |||
| 36 | for (FallingObject* object in objects) | ||
| 37 | { | ||
| 38 | // Move objects down | ||
| 39 | object.sprite.position = ccp(object.sprite.position.x, object.sprite.position.y-object.weight); | ||
| 40 | |||
| 41 | // Cart collision detection | ||
| 42 | CGSize first = [cartSprite boundingBox].size; | ||
| 43 | CGSize second = [object.sprite boundingBox].size; | ||
| 44 | |||
| 45 | if (cartSprite.position.x > (object.sprite.position.x - second.width/2 - first.width/2)) | ||
| 46 | { | ||
| 47 | if (cartSprite.position.x < (object.sprite.position.x + second.width/2 + first.width/2)) | ||
| 48 | { | ||
| 49 | if (cartSprite.position.y > (object.sprite.position.y - second.height/2 - first.height/2)) | ||
| 50 | { | ||
| 51 | if (cartSprite.position.y < (object.sprite.position.y + second.height/2 + first.height/2)) | ||
| 52 | { | ||
| 53 | [object retain]; | ||
| 54 | [objects removeObject:object]; | ||
| 55 | |||
| 56 | // If a cart collides with an object, it's going to vanish no matter what | ||
| 57 | [object.sprite.parent removeChild:object.sprite cleanup:YES]; | ||
| 58 | |||
| 59 | NSString* audioFile = nil; | ||
| 60 | if ([object isKindOfClass:[OneUp class]]) | ||
| 61 | { | ||
| 62 | audioFile = [[NSBundle mainBundle] pathForResource:@"1up" ofType:@"wav"]; | ||
| 63 | lives++; | ||
| 64 | } else if ([object isKindOfClass:[Rock class]]) | ||
| 65 | { | ||
| 66 | audioFile = [[NSBundle mainBundle] pathForResource:@"Damage1" ofType:@"wav"]; | ||
| 67 | lives--; | ||
| 68 | } else if ([object conformsToProtocol:@protocol(ValuableObject)]) { | ||
| 69 | audioFile = [[NSBundle mainBundle] pathForResource:@"Item1" ofType:@"wav"]; | ||
| 70 | score += [((FallingObject<ValuableObject>*)object) pointValue]; | ||
| 71 | } | ||
| 72 | |||
| 73 | if (audioFile != nil) | ||
| 74 | { | ||
| 75 | [[SimpleAudioEngine sharedEngine] playEffect:audioFile]; | ||
| 76 | } | ||
| 77 | |||
| 78 | [self updateLabels]; | ||
| 79 | |||
| 80 | continue; // Don't check for collision with floor | ||
| 81 | } | ||
| 82 | } | ||
| 83 | } | ||
| 84 | } | ||
| 85 | |||
| 86 | // Collision detection with floor | ||
| 87 | if (object.sprite.position.y - (object.sprite.contentSize.height/2) < 0) | ||
| 88 | { | ||
| 89 | [object retain]; | ||
| 90 | [objects removeObject:object]; | ||
| 91 | |||
| 92 | [object.sprite.parent removeChild:object.sprite cleanup:YES]; | ||
| 93 | |||
| 94 | if ([object conformsToProtocol:@protocol(ValuableObject)]) | ||
| 95 | { | ||
| 96 | NSString* audioFile = [[NSBundle mainBundle] pathForResource:@"Damage1" ofType:@"wav"]; | ||
| 97 | [[SimpleAudioEngine sharedEngine] playEffect:audioFile]; | ||
| 98 | |||
| 99 | lives--; | ||
| 100 | |||
| 101 | [self updateLabels]; | ||
| 102 | } | ||
| 103 | } | ||
| 104 | } | ||
| 105 | |||
| 106 | if (lives == 0) | ||
| 107 | { | ||
| 108 | [self unschedule:@selector(randomlyAddObject:)]; | ||
| 109 | [self unschedule:@selector(tick:)]; | ||
| 110 | [[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInT transitionWithDuration:1.5f scene:[GameOverLayer sceneWithScore:score]]]; | ||
| 111 | } else if (score > lastScore) | ||
| 112 | { | ||
| 113 | if ((lastScore < 6500) && (score >= 6500)) | ||
| 114 | { | ||
| 115 | [self unschedule:@selector(randomlyAddObject:)]; | ||
| 116 | [self schedule:@selector(randomlyAddObject:) interval:0.6f]; | ||
| 117 | addSpeed = 0.6f; | ||
| 118 | } else if ((lastScore < 4500) && (score >= 4500)) | ||
| 119 | { | ||
| 120 | [self unschedule:@selector(randomlyAddObject:)]; | ||
| 121 | [self schedule:@selector(randomlyAddObject:) interval:0.7f]; | ||
| 122 | addSpeed = 0.7f; | ||
| 123 | } else if ((lastScore < 2500) && (score >= 2500)) | ||
| 124 | { | ||
| 125 | [self unschedule:@selector(randomlyAddObject:)]; | ||
| 126 | [self schedule:@selector(randomlyAddObject:) interval:0.8f]; | ||
| 127 | addSpeed = 0.8f; | ||
| 128 | } else if ((lastScore < 1500) && (score >= 1500)) | ||
| 129 | { | ||
| 130 | [self unschedule:@selector(randomlyAddObject:)]; | ||
| 131 | [self schedule:@selector(randomlyAddObject:) interval:0.9f]; | ||
| 132 | addSpeed = 0.9f; | ||
| 133 | } else if ((lastScore < 500) && (score >= 500)) | ||
| 134 | { | ||
| 135 | [self unschedule:@selector(randomlyAddObject:)]; | ||
| 136 | [self schedule:@selector(randomlyAddObject:) interval:1.0f]; | ||
| 137 | addSpeed = 1.0f; | ||
| 138 | } else if ((lastScore < 150) && (score >= 150)) | ||
| 139 | { | ||
| 140 | [self unschedule:@selector(randomlyAddObject:)]; | ||
| 141 | [self schedule:@selector(randomlyAddObject:) interval:2.0f]; | ||
| 142 | addSpeed = 2.0f; | ||
| 143 | } | ||
| 144 | } | ||
| 145 | } | ||
| 146 | |||
| 147 | - (void)randomlyAddObject:(ccTime)dt | ||
| 148 | { | ||
| 149 | FallingObject* object; | ||
| 150 | int oneuppercent = 98 - (lives == 1 ? 1 : 0); | ||
| 151 | |||
| 152 | if (score < 1000) | ||
| 153 | { | ||
| 154 | int randomval = arc4random()%100; | ||
| 155 | |||
| 156 | if (randomval < 65) | ||
| 157 | { | ||
| 158 | object = [[Cherry alloc] init]; | ||
| 159 | } else if (randomval < oneuppercent) | ||
| 160 | { | ||
| 161 | object = [[Bottle alloc] init]; | ||
| 162 | } else { | ||
| 163 | object = [[OneUp alloc] init]; | ||
| 164 | } | ||
| 165 | } else { | ||
| 166 | int randomval = arc4random()%100; | ||
| 167 | |||
| 168 | if (randomval < 40) | ||
| 169 | { | ||
| 170 | object = [[Cherry alloc] init]; | ||
| 171 | } else if (randomval < 70) | ||
| 172 | { | ||
| 173 | object = [[Rock alloc] init]; | ||
| 174 | } else if (randomval < oneuppercent) | ||
| 175 | { | ||
| 176 | object = [[Bottle alloc] init]; | ||
| 177 | } else { | ||
| 178 | object = [[OneUp alloc] init]; | ||
| 179 | } | ||
| 180 | } | ||
| 181 | |||
| 182 | int objectX = arc4random()%448+16; | ||
| 183 | object.sprite.position = ccp(objectX, 360); | ||
| 184 | object.sprite.scale = 1; | ||
| 185 | [self addChild:object.sprite]; | ||
| 186 | |||
| 187 | [objects addObject:object]; | ||
| 188 | [object release]; | ||
| 189 | |||
| 190 | if (score >= 2000) | ||
| 191 | { | ||
| 192 | if (arc4random() % 100 > 80) | ||
| 193 | { | ||
| 194 | object = [[Rock alloc] init]; | ||
| 195 | |||
| 196 | objectX = arc4random()%448+16; | ||
| 197 | object.sprite.position = ccp(objectX, 360); | ||
| 198 | object.sprite.scale = 1; | ||
| 199 | [self addChild:object.sprite]; | ||
| 200 | |||
| 201 | [objects addObject:object]; | ||
| 202 | [object release]; | ||
| 203 | } | ||
| 204 | } | ||
| 205 | |||
| 206 | if (score >= 4000) | ||
| 207 | { | ||
| 208 | if (arc4random() % 100 > 80) | ||
| 209 | { | ||
| 210 | object = [[Rock alloc] init]; | ||
| 211 | |||
| 212 | objectX = arc4random()%448+16; | ||
| 213 | object.sprite.position = ccp(objectX, 360); | ||
| 214 | object.sprite.scale = 1; | ||
| 215 | [self addChild:object.sprite]; | ||
| 216 | |||
| 217 | [objects addObject:object]; | ||
| 218 | [object release]; | ||
| 219 | } | ||
| 220 | } | ||
| 221 | } | ||
| 222 | |||
| 223 | - (id)init | ||
| 224 | { | ||
| 225 | self = [super init]; | ||
| 226 | |||
| 227 | int winWidth = [CCDirector sharedDirector].winSize.width; | ||
| 228 | //int winHeight = [CCDirector sharedDirector].winSize.height; | ||
| 229 | int cartScale = 2; | ||
| 230 | |||
| 231 | if (self != nil) | ||
| 232 | { | ||
| 233 | CCSprite* backgroundImage = [CCSprite spriteWithFile:@"SeaBeach.png"]; | ||
| 234 | backgroundImage.position = ccp(240, 160); | ||
| 235 | [self addChild:backgroundImage z:0]; | ||
| 236 | |||
| 237 | isAccelerometerEnabled_ = YES; | ||
| 238 | |||
| 239 | //cart = [[Cart alloc] init]; | ||
| 240 | cartSprite = [CCSprite spriteWithFile:@"cart.png"]; | ||
| 241 | cartSprite.position = ccp(winWidth/2, 22); | ||
| 242 | cartSprite.scale = cartScale; | ||
| 243 | [self addChild:cartSprite]; | ||
| 244 | |||
| 245 | objects = [[NSMutableSet alloc] init]; | ||
| 246 | |||
| 247 | score = 0; | ||
| 248 | lives = 3; | ||
| 249 | |||
| 250 | scoreLabel = [CCLabelBMFont labelWithString:@"Score: 0" fntFile:@"helvetica2.fnt"]; | ||
| 251 | scoreLabel.position = ccp(50, 300); | ||
| 252 | [self addChild:scoreLabel]; | ||
| 253 | |||
| 254 | livesLabel = [CCLabelBMFont labelWithString:@"Lives: 3" fntFile:@"helvetica2.fnt"]; | ||
| 255 | livesLabel.position = ccp(50, 280); | ||
| 256 | [self addChild:livesLabel]; | ||
| 257 | |||
| 258 | CCMenuItemImage* pauseButton = [CCMenuItemImage itemFromNormalImage:@"pause2.png" selectedImage:@"pause.png" target:self selector:@selector(pause)]; | ||
| 259 | CCMenu* pauseMenu = [CCMenu menuWithItems:pauseButton, nil]; | ||
| 260 | [pauseMenu setPosition:ccp(480-8-16, 320-8-16)]; | ||
| 261 | [self addChild:pauseMenu]; | ||
| 262 | |||
| 263 | addSpeed = 2.5f; | ||
| 264 | } | ||
| 265 | |||
| 266 | return self; | ||
| 267 | } | ||
| 268 | |||
| 269 | -(void) onEnter | ||
| 270 | { | ||
| 271 | [super onEnter]; | ||
| 272 | |||
| 273 | [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 60)]; | ||
| 274 | [self schedule:@selector(tick:) interval:1.0f/60.0f]; | ||
| 275 | [self schedule:@selector(randomlyAddObject:) interval:addSpeed]; | ||
| 276 | } | ||
| 277 | |||
| 278 | - (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration | ||
| 279 | { | ||
| 280 | static float prevY=0; | ||
| 281 | |||
| 282 | #define kFilterFactor 0.05f | ||
| 283 | |||
| 284 | float accelY = -((float) acceleration.y * kFilterFactor + (1- kFilterFactor)*prevY); | ||
| 285 | |||
| 286 | prevY = accelY; | ||
| 287 | accelX = accelY * 750; | ||
| 288 | } | ||
| 289 | |||
| 290 | - (void)updateLabels | ||
| 291 | { | ||
| 292 | [scoreLabel setString:[NSString stringWithFormat:@"Score: %d", score]]; | ||
| 293 | [livesLabel setString:[NSString stringWithFormat:@"Lives: %d", lives]]; | ||
| 294 | } | ||
| 295 | |||
| 296 | - (void)pause | ||
| 297 | { | ||
| 298 | [[CCDirector sharedDirector] replaceScene:[PauseLayer sceneWithScene:[[CCDirector sharedDirector] runningScene]]]; | ||
| 299 | } | ||
| 300 | |||
| 301 | @end | ||
| diff --git a/Classes/GameOverLayer.h b/Classes/GameOverLayer.h new file mode 100755 index 0000000..ea533ac --- /dev/null +++ b/Classes/GameOverLayer.h | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | // | ||
| 2 | // GameOverLayer.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/19/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <Foundation/Foundation.h> | ||
| 10 | #import "cocos2d.h" | ||
| 11 | #import "Cart_CollectAppDelegate.h" | ||
| 12 | #import <sqlite3.h> | ||
| 13 | #import "cocoslive.h" | ||
| 14 | |||
| 15 | @class MainMenuLayer; | ||
| 16 | |||
| 17 | @interface GameOverLayer : CCLayer <UITextFieldDelegate, UIAlertViewDelegate> { | ||
| 18 | UILabel* scoreField; | ||
| 19 | UITextField* textField; | ||
| 20 | UISwitch* submitSwitch; | ||
| 21 | UIActivityIndicatorView* activityIndicator; | ||
| 22 | UIButton* backButton; | ||
| 23 | int score; | ||
| 24 | } | ||
| 25 | |||
| 26 | + (CCScene*)sceneWithScore:(int)score; | ||
| 27 | - (id)initWithScore:(int)score; | ||
| 28 | - (void)newgame; | ||
| 29 | - (void)submitScore; | ||
| 30 | - (void)exit; | ||
| 31 | |||
| 32 | @end | ||
| diff --git a/Classes/GameOverLayer.m b/Classes/GameOverLayer.m new file mode 100755 index 0000000..65b11e1 --- /dev/null +++ b/Classes/GameOverLayer.m | |||
| @@ -0,0 +1,196 @@ | |||
| 1 | // | ||
| 2 | // GameOverLayer.m | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/19/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "GameOverLayer.h" | ||
| 10 | |||
| 11 | |||
| 12 | @implementation GameOverLayer | ||
| 13 | |||
| 14 | + (CCScene*)sceneWithScore:(int)score | ||
| 15 | { | ||
| 16 | CCScene* scene = [CCScene node]; | ||
| 17 | |||
| 18 | CCLayerColor* backgroundLayer = [CCLayerColor layerWithColor:ccc4(255, 255, 255, 255)]; | ||
| 19 | [scene addChild:backgroundLayer]; | ||
| 20 | |||
| 21 | GameOverLayer* layer = [[[GameOverLayer alloc] initWithScore:score] autorelease]; | ||
| 22 | [scene addChild:layer]; | ||
| 23 | |||
| 24 | return scene; | ||
| 25 | } | ||
| 26 | |||
| 27 | - (id)initWithScore:(int)score2 | ||
| 28 | { | ||
| 29 | self = [super init]; | ||
| 30 | |||
| 31 | if (nil != self) | ||
| 32 | { | ||
| 33 | CCSprite* backgroundImage = [CCSprite spriteWithFile:@"Morning1.png"]; | ||
| 34 | backgroundImage.position = ccp(240, 160); | ||
| 35 | [self addChild:backgroundImage z:0]; | ||
| 36 | |||
| 37 | score = score2; | ||
| 38 | |||
| 39 | scoreField = [[UILabel alloc] initWithFrame:CGRectMake(205, 320-200-320, 0, 0)]; | ||
| 40 | [scoreField setFont:[UIFont systemFontOfSize:20.0f]]; | ||
| 41 | [scoreField setBackgroundColor:[UIColor clearColor]]; | ||
| 42 | [scoreField setText:[NSString stringWithFormat:@"%d", score2]]; | ||
| 43 | CGSize labelSize = [scoreField.text sizeWithFont:scoreField.font constrainedToSize:CGSizeMake(160, 31) lineBreakMode:UILineBreakModeClip]; | ||
| 44 | [scoreField setFrame:CGRectMake(scoreField.frame.origin.x, scoreField.frame.origin.y, labelSize.width, labelSize.height)]; | ||
| 45 | [[[CCDirector sharedDirector] openGLView] addSubview:scoreField]; | ||
| 46 | |||
| 47 | textField = [[UITextField alloc] initWithFrame:CGRectMake(205, 320-247-320, 216, 31)]; | ||
| 48 | [textField setFont:[UIFont systemFontOfSize:20.0f]]; | ||
| 49 | [textField setBackgroundColor:[UIColor clearColor]]; | ||
| 50 | [textField setDelegate:self]; | ||
| 51 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
| 52 | [textField setText:[defaults objectForKey:@"username"]]; | ||
| 53 | [[[CCDirector sharedDirector] openGLView] addSubview:textField]; | ||
| 54 | |||
| 55 | submitSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(211, 320-161-320, 0, 0)]; | ||
| 56 | [submitSwitch setOn:[defaults boolForKey:@"submitScore"]]; | ||
| 57 | [[[CCDirector sharedDirector] openGLView] addSubview:submitSwitch]; | ||
| 58 | |||
| 59 | activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(480-20-10, 320-20-10, 20, 20)]; | ||
| 60 | [[[CCDirector sharedDirector] openGLView] addSubview:activityIndicator]; | ||
| 61 | |||
| 62 | backButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; | ||
| 63 | [backButton setFrame:CGRectMake(240-154/2, 320-60-15-320, 154, 31)]; | ||
| 64 | [backButton setTitle:@"Back to Main Menu" forState:UIControlStateNormal]; | ||
| 65 | [backButton addTarget:self action:@selector(newgame) forControlEvents:UIControlEventTouchUpInside]; | ||
| 66 | [backButton.titleLabel setFont:[UIFont systemFontOfSize:16.0]]; | ||
| 67 | [backButton.titleLabel setTextColor:[UIColor blackColor]]; | ||
| 68 | |||
| 69 | [[[CCDirector sharedDirector] openGLView] addSubview:backButton]; | ||
| 70 | } | ||
| 71 | |||
| 72 | return self; | ||
| 73 | } | ||
| 74 | |||
| 75 | - (void)onEnter | ||
| 76 | { | ||
| 77 | [UIView beginAnimations:nil context:NULL]; | ||
| 78 | [UIView setAnimationDuration:1.5f]; | ||
| 79 | [UIView setAnimationCurve:UIViewAnimationCurveLinear]; | ||
| 80 | scoreField.transform = CGAffineTransformMakeTranslation(0, 320); | ||
| 81 | textField.transform = CGAffineTransformMakeTranslation(0, 320); | ||
| 82 | submitSwitch.transform = CGAffineTransformMakeTranslation(0, 320); | ||
| 83 | backButton.transform = CGAffineTransformMakeTranslation(0, 320); | ||
| 84 | [UIView commitAnimations]; | ||
| 85 | } | ||
| 86 | |||
| 87 | - (void)newgame | ||
| 88 | { | ||
| 89 | backButton.enabled = NO; | ||
| 90 | textField.enabled = NO; | ||
| 91 | submitSwitch.enabled = NO; | ||
| 92 | |||
| 93 | const char* sqlQuery = [[NSString stringWithFormat:@"INSERT INTO highscores (name, score) VALUES (\"%@\",%d)", [textField text], score] UTF8String]; | ||
| 94 | sqlite3_stmt* compiled_statement; | ||
| 95 | |||
| 96 | if (sqlite3_prepare_v2([Cart_CollectAppDelegate database], sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK) | ||
| 97 | { | ||
| 98 | sqlite3_step(compiled_statement); | ||
| 99 | NSLog(@"awesome, %@", [textField text]); | ||
| 100 | } else { | ||
| 101 | NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg([Cart_CollectAppDelegate database])); | ||
| 102 | } | ||
| 103 | |||
| 104 | if (submitSwitch.on) | ||
| 105 | { | ||
| 106 | [self submitScore]; | ||
| 107 | } else { | ||
| 108 | [self exit]; | ||
| 109 | } | ||
| 110 | } | ||
| 111 | |||
| 112 | - (void)submitScore | ||
| 113 | { | ||
| 114 | [activityIndicator startAnimating]; | ||
| 115 | |||
| 116 | CLScoreServerPost* server = [[CLScoreServerPost alloc] initWithGameName:@"Cart Collect" gameKey:@"38f440a074b3264386455a36b2706d8f" delegate:self]; | ||
| 117 | NSMutableDictionary* dict = [[NSMutableDictionary alloc] init]; | ||
| 118 | [dict setObject:@"Classic" forKey:@"cc_category"]; | ||
| 119 | [dict setObject:[textField text] forKey:@"cc_playername"]; | ||
| 120 | [dict setObject:[NSNumber numberWithInt:score] forKey:@"cc_score"]; | ||
| 121 | [server sendScore:dict]; | ||
| 122 | [server release]; | ||
| 123 | [dict release]; | ||
| 124 | } | ||
| 125 | |||
| 126 | - (BOOL)textFieldShouldReturn:(UITextField *)m_textField | ||
| 127 | { | ||
| 128 | [m_textField resignFirstResponder]; | ||
| 129 | |||
| 130 | return YES; | ||
| 131 | } | ||
| 132 | |||
| 133 | - (void)scorePostOk:(id)sender | ||
| 134 | { | ||
| 135 | [activityIndicator stopAnimating]; | ||
| 136 | |||
| 137 | // Score post successful | ||
| 138 | [self exit]; | ||
| 139 | } | ||
| 140 | |||
| 141 | - (void)scorePostFail:(id)sender | ||
| 142 | { | ||
| 143 | [activityIndicator stopAnimating]; | ||
| 144 | |||
| 145 | // score post failed | ||
| 146 | tPostStatus status = [sender postStatus]; | ||
| 147 | if( status == kPostStatusPostFailed ) { | ||
| 148 | NSLog(@"SERVER ERROR"); | ||
| 149 | // an error with the server ? | ||
| 150 | // try again | ||
| 151 | }else if( status == kPostStatusConnectionFailed ) { | ||
| 152 | NSLog(@"CONNECTION FAILURE"); | ||
| 153 | // a error establishing the connection ? | ||
| 154 | // turn-on wifi, and then try again | ||
| 155 | } | ||
| 156 | |||
| 157 | UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"Whoops" message:@"There was an error posting your score. Please make sure you have Internet access." delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Cancel", nil]; | ||
| 158 | [alertView show]; | ||
| 159 | [alertView release]; | ||
| 160 | } | ||
| 161 | |||
| 162 | - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex | ||
| 163 | { | ||
| 164 | if (buttonIndex == 0) | ||
| 165 | { | ||
| 166 | [self submitScore]; | ||
| 167 | } else if (buttonIndex == 1) | ||
| 168 | { | ||
| 169 | [self exit]; | ||
| 170 | } | ||
| 171 | } | ||
| 172 | |||
| 173 | - (void)exit | ||
| 174 | { | ||
| 175 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
| 176 | [defaults setObject:[textField text] forKey:@"username"]; | ||
| 177 | [defaults setBool:submitSwitch.on forKey:@"submitScore"]; | ||
| 178 | |||
| 179 | [submitSwitch removeFromSuperview]; | ||
| 180 | [submitSwitch release]; | ||
| 181 | |||
| 182 | [textField removeFromSuperview]; | ||
| 183 | [textField release]; | ||
| 184 | |||
| 185 | [scoreField removeFromSuperview]; | ||
| 186 | [scoreField release]; | ||
| 187 | |||
| 188 | [activityIndicator removeFromSuperview]; | ||
| 189 | [activityIndicator release]; | ||
| 190 | |||
| 191 | [backButton removeFromSuperview]; | ||
| 192 | |||
| 193 | [[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]]; | ||
| 194 | } | ||
| 195 | |||
| 196 | @end | ||
| diff --git a/Classes/Highscore.h b/Classes/Highscore.h new file mode 100755 index 0000000..4cab75f --- /dev/null +++ b/Classes/Highscore.h | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | // | ||
| 2 | // Highscore.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/20/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <Foundation/Foundation.h> | ||
| 10 | #import <sqlite3.h> | ||
| 11 | #import "Cart_CollectAppDelegate.h" | ||
| 12 | #import "cocoslive.h" | ||
| 13 | |||
| 14 | @interface Highscore : NSObject { | ||
| 15 | NSString* name; | ||
| 16 | int score; | ||
| 17 | NSDate* date; | ||
| 18 | } | ||
| 19 | |||
| 20 | @property (readonly) NSString* name; | ||
| 21 | @property (readonly) int score; | ||
| 22 | @property (readonly) NSDate* date; | ||
| 23 | - (id)initWithName:(NSString*)name score:(int)score date:(NSDate*)date; | ||
| 24 | |||
| 25 | @end | ||
| diff --git a/Classes/Highscore.m b/Classes/Highscore.m new file mode 100755 index 0000000..7239cca --- /dev/null +++ b/Classes/Highscore.m | |||
| @@ -0,0 +1,37 @@ | |||
| 1 | // | ||
| 2 | // Highscore.m | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/20/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "Highscore.h" | ||
| 10 | |||
| 11 | |||
| 12 | @implementation Highscore | ||
| 13 | |||
| 14 | @synthesize name, score, date; | ||
| 15 | |||
| 16 | - (id)initWithName:(NSString*)m_name score:(int)m_score date:(NSDate*)m_date | ||
| 17 | { | ||
| 18 | self = [super init]; | ||
| 19 | |||
| 20 | if (nil != self) | ||
| 21 | { | ||
| 22 | name = [m_name retain]; | ||
| 23 | score = m_score; | ||
| 24 | date = [m_date retain]; | ||
| 25 | } | ||
| 26 | |||
| 27 | return self; | ||
| 28 | } | ||
| 29 | |||
| 30 | - (void)dealloc | ||
| 31 | { | ||
| 32 | [name release]; | ||
| 33 | [date release]; | ||
| 34 | [super dealloc]; | ||
| 35 | } | ||
| 36 | |||
| 37 | @end | ||
| diff --git a/Classes/HighscoreListController.h b/Classes/HighscoreListController.h new file mode 100755 index 0000000..f673609 --- /dev/null +++ b/Classes/HighscoreListController.h | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | // | ||
| 2 | // HighscoreListController.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/20/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <UIKit/UIKit.h> | ||
| 10 | #import "Highscore.h" | ||
| 11 | #import "cocoslive.h" | ||
| 12 | #import "RootViewController.h" | ||
| 13 | |||
| 14 | @interface HighscoreListController : UITableViewController { | ||
| 15 | UINavigationBar* navigationBar; | ||
| 16 | UINavigationItem* myNavigationItem; | ||
| 17 | NSArray* localHighscores; | ||
| 18 | NSArray* globalHighscores; | ||
| 19 | BOOL showGlobal; | ||
| 20 | BOOL loadingGlobal; | ||
| 21 | UIView* loadingView; | ||
| 22 | UIActivityIndicatorView* activity; | ||
| 23 | UILabel* statusText; | ||
| 24 | UITableView* tableView; | ||
| 25 | } | ||
| 26 | |||
| 27 | - (void)back; | ||
| 28 | - (void)switchLists:(id)sender; | ||
| 29 | - (void)scoreRequestOk:(id)sender; | ||
| 30 | - (void)scoreRequestFail:(id)sender; | ||
| 31 | |||
| 32 | @end | ||
| diff --git a/Classes/HighscoreListController.m b/Classes/HighscoreListController.m new file mode 100755 index 0000000..9980727 --- /dev/null +++ b/Classes/HighscoreListController.m | |||
| @@ -0,0 +1,371 @@ | |||
| 1 | // | ||
| 2 | // HighscoreListController.m | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/20/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "HighscoreListController.h" | ||
| 10 | |||
| 11 | |||
| 12 | @implementation HighscoreListController | ||
| 13 | |||
| 14 | |||
| 15 | #pragma mark - | ||
| 16 | #pragma mark Initialization | ||
| 17 | |||
| 18 | - (id)initWithStyle:(UITableViewStyle)style { | ||
| 19 | // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. | ||
| 20 | self = [super initWithStyle:style]; | ||
| 21 | if (self) { | ||
| 22 | NSMutableArray* highscores = [NSMutableArray arrayWithCapacity:15]; | ||
| 23 | const char* sqlQuery = "SELECT * FROM highscores ORDER BY score DESC LIMIT 15"; | ||
| 24 | sqlite3_stmt* compiled_statement; | ||
| 25 | |||
| 26 | if (sqlite3_prepare_v2([Cart_CollectAppDelegate database], sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK) | ||
| 27 | { | ||
| 28 | while (sqlite3_step(compiled_statement) == SQLITE_ROW) | ||
| 29 | { | ||
| 30 | NSString* name = [NSString stringWithUTF8String:(char*)sqlite3_column_text(compiled_statement, 1)]; | ||
| 31 | int score = sqlite3_column_int(compiled_statement, 2); | ||
| 32 | |||
| 33 | NSDate* date = nil; | ||
| 34 | char* dateStr = (char*)sqlite3_column_text(compiled_statement, 3); | ||
| 35 | if (dateStr != NULL) | ||
| 36 | { | ||
| 37 | NSString* theDate = [NSString stringWithUTF8String:dateStr]; | ||
| 38 | NSDateComponents* comps = [[NSDateComponents alloc] init]; | ||
| 39 | [comps setYear:[[theDate substringToIndex:4] intValue]]; | ||
| 40 | [comps setMonth:[[theDate substringWithRange:NSMakeRange(5, 2)] intValue]]; | ||
| 41 | [comps setDay:[[theDate substringWithRange:NSMakeRange(8, 2)] intValue]]; | ||
| 42 | [comps setHour:[[theDate substringWithRange:NSMakeRange(11, 2)] intValue]]; | ||
| 43 | [comps setMinute:[[theDate substringWithRange:NSMakeRange(14, 2)] intValue]]; | ||
| 44 | [comps setSecond:[[theDate substringWithRange:NSMakeRange(17, 2)] intValue]]; | ||
| 45 | date = [[NSCalendar currentCalendar] dateFromComponents:comps]; | ||
| 46 | date = [date dateByAddingTimeInterval:[[NSTimeZone localTimeZone] secondsFromGMT]]; | ||
| 47 | [comps release]; | ||
| 48 | } | ||
| 49 | |||
| 50 | Highscore* highscore = [[Highscore alloc] initWithName:name score:score date:date]; | ||
| 51 | [highscores addObject:highscore]; | ||
| 52 | [highscore release]; | ||
| 53 | } | ||
| 54 | } | ||
| 55 | |||
| 56 | localHighscores = [highscores copy]; | ||
| 57 | |||
| 58 | navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; | ||
| 59 | myNavigationItem = [[UINavigationItem alloc] initWithTitle:@"Highscores"]; | ||
| 60 | UIBarButtonItem* barButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(back)]; | ||
| 61 | myNavigationItem.leftBarButtonItem = barButton; | ||
| 62 | [barButton release]; | ||
| 63 | |||
| 64 | UISegmentedControl* segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Local", @"Global", nil]]; | ||
| 65 | segmentedControl.selectedSegmentIndex = 0; | ||
| 66 | segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; | ||
| 67 | [segmentedControl addTarget:self action:@selector(switchLists:) forControlEvents:UIControlEventValueChanged]; | ||
| 68 | UIBarButtonItem* barButton2 = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl]; | ||
| 69 | [segmentedControl release]; | ||
| 70 | myNavigationItem.rightBarButtonItem = barButton2; | ||
| 71 | [barButton2 release]; | ||
| 72 | |||
| 73 | [navigationBar pushNavigationItem:myNavigationItem animated:NO]; | ||
| 74 | |||
| 75 | showGlobal = NO; | ||
| 76 | loadingGlobal = NO; | ||
| 77 | |||
| 78 | tableView = [(UITableView*)self.view retain]; | ||
| 79 | UIView* parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; | ||
| 80 | [tableView setFrame:CGRectMake(0, 44, 320, 480-44)]; | ||
| 81 | [parentView addSubview:navigationBar]; | ||
| 82 | [parentView addSubview:tableView]; | ||
| 83 | self.view = parentView; | ||
| 84 | [parentView release]; | ||
| 85 | } | ||
| 86 | return self; | ||
| 87 | } | ||
| 88 | |||
| 89 | |||
| 90 | #pragma mark - | ||
| 91 | #pragma mark View lifecycle | ||
| 92 | |||
| 93 | /* | ||
| 94 | - (void)viewDidLoad { | ||
| 95 | [super viewDidLoad]; | ||
| 96 | |||
| 97 | // Uncomment the following line to display an Edit button in the navigation bar for this view controller. | ||
| 98 | // self.navigationItem.rightBarButtonItem = self.editButtonItem; | ||
| 99 | } | ||
| 100 | */ | ||
| 101 | |||
| 102 | /* | ||
| 103 | - (void)viewWillAppear:(BOOL)animated { | ||
| 104 | [super viewWillAppear:animated]; | ||
| 105 | } | ||
| 106 | */ | ||
| 107 | /* | ||
| 108 | - (void)viewDidAppear:(BOOL)animated { | ||
| 109 | [super viewDidAppear:animated]; | ||
| 110 | } | ||
| 111 | */ | ||
| 112 | /* | ||
| 113 | - (void)viewWillDisappear:(BOOL)animated { | ||
| 114 | [super viewWillDisappear:animated]; | ||
| 115 | } | ||
| 116 | */ | ||
| 117 | /* | ||
| 118 | - (void)viewDidDisappear:(BOOL)animated { | ||
| 119 | [super viewDidDisappear:animated]; | ||
| 120 | } | ||
| 121 | */ | ||
| 122 | /* | ||
| 123 | // Override to allow orientations other than the default portrait orientation. | ||
| 124 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { | ||
| 125 | // Return YES for supported orientations. | ||
| 126 | return YES; | ||
| 127 | } | ||
| 128 | */ | ||
| 129 | |||
| 130 | |||
| 131 | #pragma mark - | ||
| 132 | #pragma mark Table view data source | ||
| 133 | |||
| 134 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { | ||
| 135 | // Return the number of sections. | ||
| 136 | return 1; | ||
| 137 | } | ||
| 138 | |||
| 139 | |||
| 140 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { | ||
| 141 | // Return the number of rows in the section. | ||
| 142 | if (showGlobal) | ||
| 143 | { | ||
| 144 | return [globalHighscores count]; | ||
| 145 | } else { | ||
| 146 | return [localHighscores count]; | ||
| 147 | } | ||
| 148 | } | ||
| 149 | |||
| 150 | |||
| 151 | // Customize the appearance of table view cells. | ||
| 152 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath | ||
| 153 | { | ||
| 154 | NSString* cellIdentifier; | ||
| 155 | Highscore* highscore; | ||
| 156 | |||
| 157 | // Configure the cell... | ||
| 158 | if (showGlobal) | ||
| 159 | { | ||
| 160 | cellIdentifier = [NSString stringWithFormat:@"Global %d", [indexPath row]]; | ||
| 161 | highscore = [globalHighscores objectAtIndex:[indexPath row]]; | ||
| 162 | } else { | ||
| 163 | cellIdentifier = [NSString stringWithFormat:@"Local %d", [indexPath row]]; | ||
| 164 | highscore = [localHighscores objectAtIndex:[indexPath row]]; | ||
| 165 | } | ||
| 166 | |||
| 167 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; | ||
| 168 | if (cell == nil) { | ||
| 169 | cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier] autorelease]; | ||
| 170 | } | ||
| 171 | |||
| 172 | cell.textLabel.text = highscore.name; | ||
| 173 | |||
| 174 | if (highscore.date != nil) | ||
| 175 | { | ||
| 176 | NSDate* todayDate = [NSDate date]; | ||
| 177 | double ti = [highscore.date timeIntervalSinceDate:todayDate]; | ||
| 178 | ti = ti * -1; | ||
| 179 | |||
| 180 | if (ti < 1) | ||
| 181 | { | ||
| 182 | cell.detailTextLabel.text = @"What is this I don't even"; | ||
| 183 | } else if (ti < 60) | ||
| 184 | { | ||
| 185 | cell.detailTextLabel.text = @"Less than a minute ago"; | ||
| 186 | } else if (ti < 3600) | ||
| 187 | { | ||
| 188 | int diff = round(ti / 60); | ||
| 189 | cell.detailTextLabel.text = [NSString stringWithFormat:@"%d minutes ago", diff]; | ||
| 190 | } else if (ti < 86400) | ||
| 191 | { | ||
| 192 | int diff = round(ti / 60 / 60); | ||
| 193 | cell.detailTextLabel.text = [NSString stringWithFormat:@"%d hours ago", diff]; | ||
| 194 | } else { | ||
| 195 | NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; | ||
| 196 | [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; | ||
| 197 | [dateFormatter setDateStyle:NSDateFormatterLongStyle]; | ||
| 198 | cell.detailTextLabel.text = [dateFormatter stringFromDate:highscore.date]; | ||
| 199 | [dateFormatter release]; | ||
| 200 | } | ||
| 201 | } | ||
| 202 | |||
| 203 | UILabel* scoreLabel = [[UILabel alloc] init]; | ||
| 204 | scoreLabel.text = [NSString stringWithFormat:@"%d", highscore.score]; | ||
| 205 | CGSize labelSize = [scoreLabel.text sizeWithFont:scoreLabel.font constrainedToSize:CGSizeMake(160, 44) lineBreakMode:UILineBreakModeClip]; | ||
| 206 | scoreLabel.frame = CGRectMake(320-10-labelSize.width, 22-labelSize.height/2, labelSize.width, labelSize.height); | ||
| 207 | [cell addSubview:scoreLabel]; | ||
| 208 | [scoreLabel release]; | ||
| 209 | |||
| 210 | cell.selectionStyle = UITableViewCellSelectionStyleNone; | ||
| 211 | |||
| 212 | return cell; | ||
| 213 | } | ||
| 214 | |||
| 215 | |||
| 216 | /* | ||
| 217 | // Override to support conditional editing of the table view. | ||
| 218 | - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { | ||
| 219 | // Return NO if you do not want the specified item to be editable. | ||
| 220 | return YES; | ||
| 221 | } | ||
| 222 | */ | ||
| 223 | |||
| 224 | |||
| 225 | /* | ||
| 226 | // Override to support editing the table view. | ||
| 227 | - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { | ||
| 228 | |||
| 229 | if (editingStyle == UITableViewCellEditingStyleDelete) { | ||
| 230 | // Delete the row from the data source. | ||
| 231 | [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; | ||
| 232 | } | ||
| 233 | else if (editingStyle == UITableViewCellEditingStyleInsert) { | ||
| 234 | // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view. | ||
| 235 | } | ||
| 236 | } | ||
| 237 | */ | ||
| 238 | |||
| 239 | |||
| 240 | /* | ||
| 241 | // Override to support rearranging the table view. | ||
| 242 | - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { | ||
| 243 | } | ||
| 244 | */ | ||
| 245 | |||
| 246 | |||
| 247 | /* | ||
| 248 | // Override to support conditional rearranging of the table view. | ||
| 249 | - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { | ||
| 250 | // Return NO if you do not want the item to be re-orderable. | ||
| 251 | return YES; | ||
| 252 | } | ||
| 253 | */ | ||
| 254 | |||
| 255 | |||
| 256 | #pragma mark - | ||
| 257 | #pragma mark Table view delegate | ||
| 258 | |||
| 259 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { | ||
| 260 | // Navigation logic may go here. Create and push another view controller. | ||
| 261 | /* | ||
| 262 | <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil]; | ||
| 263 | // ... | ||
| 264 | // Pass the selected object to the new view controller. | ||
| 265 | [self.navigationController pushViewController:detailViewController animated:YES]; | ||
| 266 | [detailViewController release]; | ||
| 267 | */ | ||
| 268 | } | ||
| 269 | |||
| 270 | |||
| 271 | #pragma mark - | ||
| 272 | #pragma mark Memory management | ||
| 273 | |||
| 274 | - (void)didReceiveMemoryWarning { | ||
| 275 | // Releases the view if it doesn't have a superview. | ||
| 276 | [super didReceiveMemoryWarning]; | ||
| 277 | |||
| 278 | // Relinquish ownership any cached data, images, etc. that aren't in use. | ||
| 279 | } | ||
| 280 | |||
| 281 | - (void)viewDidUnload { | ||
| 282 | // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand. | ||
| 283 | // For example: self.myOutlet = nil; | ||
| 284 | } | ||
| 285 | |||
| 286 | |||
| 287 | - (void)dealloc { | ||
| 288 | [super dealloc]; | ||
| 289 | } | ||
| 290 | |||
| 291 | - (void)back | ||
| 292 | { | ||
| 293 | RootViewController* viewController = [[[UIApplication sharedApplication] delegate] viewController]; | ||
| 294 | [[[[UIApplication sharedApplication] delegate] window] setRootViewController:viewController]; | ||
| 295 | } | ||
| 296 | |||
| 297 | - (void)switchLists:(id)sender | ||
| 298 | { | ||
| 299 | if ([(UISegmentedControl*)sender selectedSegmentIndex] == 0) | ||
| 300 | { | ||
| 301 | if (loadingGlobal) | ||
| 302 | { | ||
| 303 | [loadingView removeFromSuperview]; | ||
| 304 | [self.view addSubview:tableView]; | ||
| 305 | } | ||
| 306 | |||
| 307 | showGlobal = NO; | ||
| 308 | [tableView reloadData]; | ||
| 309 | } else { | ||
| 310 | if (globalHighscores == nil) | ||
| 311 | { | ||
| 312 | loadingGlobal = YES; | ||
| 313 | |||
| 314 | loadingView = [[UIView alloc] initWithFrame:CGRectMake(0, 44, 320, 480-44)]; | ||
| 315 | activity = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(150, 228-44, 20, 20)]; | ||
| 316 | activity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; | ||
| 317 | statusText = [[UILabel alloc] initWithFrame:CGRectMake(0, 256-44, 320, 21)]; | ||
| 318 | statusText.text = @"Downloading highscores..."; | ||
| 319 | statusText.textAlignment = UITextAlignmentCenter; | ||
| 320 | |||
| 321 | [loadingView addSubview:activity]; | ||
| 322 | [loadingView addSubview:statusText]; | ||
| 323 | [loadingView setBackgroundColor:[UIColor whiteColor]]; | ||
| 324 | [activity startAnimating]; | ||
| 325 | [tableView removeFromSuperview]; | ||
| 326 | [self.view addSubview:loadingView]; | ||
| 327 | |||
| 328 | CLScoreServerRequest* request = [[CLScoreServerRequest alloc] initWithGameName:@"Cart Collect" delegate:self]; | ||
| 329 | tQueryFlags flags = kQueryFlagIgnore; | ||
| 330 | [request requestScores:kQueryAllTime limit:15 offset:0 flags:flags category:@"Classic"]; | ||
| 331 | [request release]; | ||
| 332 | } else { | ||
| 333 | showGlobal = YES; | ||
| 334 | [tableView reloadData]; | ||
| 335 | } | ||
| 336 | } | ||
| 337 | } | ||
| 338 | |||
| 339 | - (void)scoreRequestOk:(id)sender | ||
| 340 | { | ||
| 341 | NSArray* highscores = [sender parseScores]; | ||
| 342 | NSMutableArray* highscoreTemp = [[NSMutableArray alloc] init]; | ||
| 343 | |||
| 344 | for (NSDictionary* data in highscores) | ||
| 345 | { | ||
| 346 | NSString* name = [data objectForKey:@"cc_playername"]; | ||
| 347 | int score = [[data objectForKey:@"cc_score"] intValue]; | ||
| 348 | NSDate* date = [NSDate dateWithTimeIntervalSince1970:[[data objectForKey:@"cc_when"] intValue]]; | ||
| 349 | Highscore* highscore = [[Highscore alloc] initWithName:name score:score date:date]; | ||
| 350 | [highscoreTemp addObject:highscore]; | ||
| 351 | [highscore release]; | ||
| 352 | } | ||
| 353 | |||
| 354 | globalHighscores = [highscoreTemp copy]; | ||
| 355 | [highscoreTemp release]; | ||
| 356 | |||
| 357 | loadingGlobal = NO; | ||
| 358 | [loadingView removeFromSuperview]; | ||
| 359 | [self.view addSubview:tableView]; | ||
| 360 | showGlobal = YES; | ||
| 361 | [tableView reloadData]; | ||
| 362 | } | ||
| 363 | |||
| 364 | - (void)scoreRequestFail:(id)sender | ||
| 365 | { | ||
| 366 | [activity stopAnimating]; | ||
| 367 | [statusText setText:@"Unable to download highscores."]; | ||
| 368 | } | ||
| 369 | |||
| 370 | @end | ||
| 371 | |||
| diff --git a/Classes/MainMenuLayer.h b/Classes/MainMenuLayer.h new file mode 100755 index 0000000..fc4f82f --- /dev/null +++ b/Classes/MainMenuLayer.h | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | // | ||
| 2 | // MainMenuLayer.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/20/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <Foundation/Foundation.h> | ||
| 10 | #import "cocos2d.h" | ||
| 11 | #import "HighscoreListController.h" | ||
| 12 | |||
| 13 | @class GameLayer; | ||
| 14 | |||
| 15 | @interface MainMenuLayer : CCLayer { | ||
| 16 | |||
| 17 | } | ||
| 18 | |||
| 19 | + (CCScene*)scene; | ||
| 20 | - (id)init; | ||
| 21 | - (void)newgame; | ||
| 22 | - (void)highscores; | ||
| 23 | |||
| 24 | @end | ||
| diff --git a/Classes/MainMenuLayer.m b/Classes/MainMenuLayer.m new file mode 100755 index 0000000..ac7f4a7 --- /dev/null +++ b/Classes/MainMenuLayer.m | |||
| @@ -0,0 +1,68 @@ | |||
| 1 | // | ||
| 2 | // MainMenuLayer.m | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/20/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "MainMenuLayer.h" | ||
| 10 | |||
| 11 | |||
| 12 | @implementation MainMenuLayer | ||
| 13 | |||
| 14 | + (CCScene*)scene | ||
| 15 | { | ||
| 16 | CCScene* scene = [CCScene node]; | ||
| 17 | |||
| 18 | MainMenuLayer* layer = [MainMenuLayer node]; | ||
| 19 | [scene addChild:layer]; | ||
| 20 | |||
| 21 | return scene; | ||
| 22 | } | ||
| 23 | |||
| 24 | - (id)init | ||
| 25 | { | ||
| 26 | self = [super init]; | ||
| 27 | |||
| 28 | if (nil != self) | ||
| 29 | { | ||
| 30 | CCSprite* backgroundImage = [CCSprite spriteWithFile:@"SeaBeach.png"]; | ||
| 31 | backgroundImage.position = ccp(240,160); | ||
| 32 | [self addChild:backgroundImage]; | ||
| 33 | |||
| 34 | CCLabelBMFont* titleText = [CCLabelBMFont labelWithString:@"Cart Collect - The Game!" fntFile:@"getoffthatboatrightnowyounglady.fnt"]; | ||
| 35 | titleText.position = ccp(240, 320-64); | ||
| 36 | [self addChild:titleText]; | ||
| 37 | |||
| 38 | //CCLabelBMFont* menuItemLabel1 = [CCLabelBMFont labelWithString:@"New Game" fntFile:@"getoffthatboatrightnowyounglady.fnt"]; | ||
| 39 | //CCMenuItemLabel* menuItem1 = [CCMenuItemLabel itemWithLabel:menuItemLabel1 target:self selector:@selector(newgame)]; | ||
| 40 | |||
| 41 | //CCLabelBMFont* menuItemLabel2 = [CCLabelBMFont labelWithString:@"Highscores" fntFile:@"getoffthatboatrightnowyounglady.fnt"]; | ||
| 42 | //CCMenuItemLabel* menuItem2 = [CCMenuItemLabel itemWithLabel:menuItemLabel2 target:self selector:@selector(highscores)]; | ||
| 43 | |||
| 44 | CCMenuItemImage* menuItem1 = [CCMenuItemImage itemFromNormalImage:@"newgame.png" selectedImage:@"newgame2.png" target:self selector:@selector(newgame)]; | ||
| 45 | CCMenuItemImage* menuItem2 = [CCMenuItemImage itemFromNormalImage:@"highscores.png" selectedImage:@"highscores2.png" target:self selector:@selector(highscores)]; | ||
| 46 | |||
| 47 | CCMenu* menu = [CCMenu menuWithItems:menuItem1, menuItem2, nil]; | ||
| 48 | [menu alignItemsVertically]; | ||
| 49 | menu.position = ccp(240, 100); | ||
| 50 | [self addChild:menu]; | ||
| 51 | } | ||
| 52 | |||
| 53 | return self; | ||
| 54 | } | ||
| 55 | |||
| 56 | - (void)newgame | ||
| 57 | { | ||
| 58 | [[CCDirector sharedDirector] replaceScene:[GameLayer scene]]; | ||
| 59 | } | ||
| 60 | |||
| 61 | - (void)highscores | ||
| 62 | { | ||
| 63 | HighscoreListController* listController = [[HighscoreListController alloc] initWithStyle:UITableViewStylePlain]; | ||
| 64 | [[[[UIApplication sharedApplication] delegate] window] setRootViewController:listController]; | ||
| 65 | [listController release]; | ||
| 66 | } | ||
| 67 | |||
| 68 | @end | ||
| diff --git a/Classes/OneUp.h b/Classes/OneUp.h new file mode 100755 index 0000000..8bd4c66 --- /dev/null +++ b/Classes/OneUp.h | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | // | ||
| 2 | // OneUp.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/19/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <Foundation/Foundation.h> | ||
| 10 | #import "FallingObject.h" | ||
| 11 | |||
| 12 | @interface OneUp : FallingObject { | ||
| 13 | |||
| 14 | } | ||
| 15 | |||
| 16 | - (id)init; | ||
| 17 | |||
| 18 | @end | ||
| diff --git a/Classes/OneUp.m b/Classes/OneUp.m new file mode 100755 index 0000000..e09935c --- /dev/null +++ b/Classes/OneUp.m | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | // | ||
| 2 | // OneUp.m | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/19/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "OneUp.h" | ||
| 10 | |||
| 11 | |||
| 12 | @implementation OneUp | ||
| 13 | |||
| 14 | - (id)init | ||
| 15 | { | ||
| 16 | self = [super init]; | ||
| 17 | |||
| 18 | if (nil != self) | ||
| 19 | { | ||
| 20 | sprite = [CCSprite spriteWithFile:@"oneup.png"]; | ||
| 21 | weight = 10; | ||
| 22 | } | ||
| 23 | |||
| 24 | return self; | ||
| 25 | } | ||
| 26 | |||
| 27 | @end | ||
| diff --git a/Classes/PauseLayer.h b/Classes/PauseLayer.h new file mode 100755 index 0000000..aae5d6c --- /dev/null +++ b/Classes/PauseLayer.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | // | ||
| 2 | // PauseLayer.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/20/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <Foundation/Foundation.h> | ||
| 10 | #import "cocos2d.h" | ||
| 11 | #import "GameLayer.h" | ||
| 12 | |||
| 13 | @interface PauseLayer : CCLayer { | ||
| 14 | CCScene* game; | ||
| 15 | } | ||
| 16 | |||
| 17 | + (CCScene*)sceneWithScene:(CCScene*)scene; | ||
| 18 | - (id)initWithScene:(CCScene*)scene; | ||
| 19 | - (void)unpause; | ||
| 20 | - (void)newgame; | ||
| 21 | |||
| 22 | @end | ||
| diff --git a/Classes/PauseLayer.m b/Classes/PauseLayer.m new file mode 100755 index 0000000..53574b2 --- /dev/null +++ b/Classes/PauseLayer.m | |||
| @@ -0,0 +1,68 @@ | |||
| 1 | // | ||
| 2 | // PauseLayer.m | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/20/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "PauseLayer.h" | ||
| 10 | |||
| 11 | @implementation PauseLayer | ||
| 12 | |||
| 13 | + (CCScene*)sceneWithScene:(CCScene*)scene2 | ||
| 14 | { | ||
| 15 | CCScene* scene = [CCScene node]; | ||
| 16 | |||
| 17 | CCLayerColor* backgroundLayer = [CCLayerColor layerWithColor:ccc4(255, 255, 255, 255)]; | ||
| 18 | CCSprite* backgroundImage = [CCSprite spriteWithFile:@"SeaBeach.png"]; | ||
| 19 | backgroundImage.position = ccp(240,160); | ||
| 20 | [backgroundLayer addChild:backgroundImage]; | ||
| 21 | [scene addChild:backgroundLayer]; | ||
| 22 | |||
| 23 | CCLayerColor* backgroundLayer2 = [CCLayerColor layerWithColor:ccc4(0, 0, 0, 127)]; | ||
| 24 | [scene addChild:backgroundLayer2]; | ||
| 25 | |||
| 26 | PauseLayer* layer = [[[PauseLayer alloc] initWithScene:scene2] autorelease]; | ||
| 27 | [scene addChild:layer]; | ||
| 28 | |||
| 29 | return scene; | ||
| 30 | } | ||
| 31 | |||
| 32 | - (id)initWithScene:(CCScene*)scene | ||
| 33 | { | ||
| 34 | self = [super init]; | ||
| 35 | |||
| 36 | if (nil != self) | ||
| 37 | { | ||
| 38 | game = [scene retain]; | ||
| 39 | |||
| 40 | CCLabelBMFont* scoreLabel = [CCLabelBMFont labelWithString:@"PAUSE" fntFile:@"helvetica.fnt"]; | ||
| 41 | scoreLabel.position = ccp(240,90); | ||
| 42 | [self addChild:scoreLabel]; | ||
| 43 | |||
| 44 | CCMenuItemImage* pauseButton = [CCMenuItemImage itemFromNormalImage:@"pause2.png" selectedImage:@"pause.png" target:self selector:@selector(unpause)]; | ||
| 45 | CCMenu* pauseMenu = [CCMenu menuWithItems:pauseButton, nil]; | ||
| 46 | [pauseMenu setPosition:ccp(480-8-16, 320-8-16)]; | ||
| 47 | [self addChild:pauseMenu]; | ||
| 48 | |||
| 49 | CCMenuItemImage* newgameMenuItem = [CCMenuItemImage itemFromNormalImage:@"back.png" selectedImage:@"back2.png" target:self selector:@selector(newgame)]; | ||
| 50 | CCMenu* myMenu = [CCMenu menuWithItems:newgameMenuItem, nil]; | ||
| 51 | myMenu.position = ccp(240, 60); | ||
| 52 | [self addChild:myMenu]; | ||
| 53 | } | ||
| 54 | |||
| 55 | return self; | ||
| 56 | } | ||
| 57 | |||
| 58 | - (void)unpause | ||
| 59 | { | ||
| 60 | [[CCDirector sharedDirector] replaceScene:game]; | ||
| 61 | } | ||
| 62 | |||
| 63 | - (void)newgame | ||
| 64 | { | ||
| 65 | [[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]]; | ||
| 66 | } | ||
| 67 | |||
| 68 | @end | ||
| diff --git a/Classes/Rock.h b/Classes/Rock.h new file mode 100755 index 0000000..7382d99 --- /dev/null +++ b/Classes/Rock.h | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | // | ||
| 2 | // Rock.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/19/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <Foundation/Foundation.h> | ||
| 10 | #import "FallingObject.h" | ||
| 11 | |||
| 12 | @interface Rock : FallingObject { | ||
| 13 | |||
| 14 | } | ||
| 15 | |||
| 16 | - (id)init; | ||
| 17 | |||
| 18 | @end | ||
| diff --git a/Classes/Rock.m b/Classes/Rock.m new file mode 100755 index 0000000..a3b3b9e --- /dev/null +++ b/Classes/Rock.m | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | // | ||
| 2 | // Rock.m | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/19/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "Rock.h" | ||
| 10 | |||
| 11 | |||
| 12 | @implementation Rock | ||
| 13 | |||
| 14 | - (id)init | ||
| 15 | { | ||
| 16 | self = [super init]; | ||
| 17 | |||
| 18 | if (nil != self) | ||
| 19 | { | ||
| 20 | sprite = [CCSprite spriteWithFile:@"rock.png"]; | ||
| 21 | weight = 7; | ||
| 22 | } | ||
| 23 | |||
| 24 | return self; | ||
| 25 | } | ||
| 26 | |||
| 27 | @end | ||
| diff --git a/Classes/RootViewController.h b/Classes/RootViewController.h new file mode 100755 index 0000000..956c133 --- /dev/null +++ b/Classes/RootViewController.h | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | // | ||
| 2 | // RootViewController.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/18/11. | ||
| 6 | // Copyright __MyCompanyName__ 2011. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <UIKit/UIKit.h> | ||
| 10 | |||
| 11 | |||
| 12 | @interface RootViewController : UIViewController { | ||
| 13 | |||
| 14 | } | ||
| 15 | |||
| 16 | @end | ||
| diff --git a/Classes/RootViewController.m b/Classes/RootViewController.m new file mode 100755 index 0000000..edd67cb --- /dev/null +++ b/Classes/RootViewController.m | |||
| @@ -0,0 +1,152 @@ | |||
| 1 | // | ||
| 2 | // RootViewController.m | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/18/11. | ||
| 6 | // Copyright __MyCompanyName__ 2011. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | // | ||
| 10 | // RootViewController + iAd | ||
| 11 | // If you want to support iAd, use this class as the controller of your iAd | ||
| 12 | // | ||
| 13 | |||
| 14 | #import "cocos2d.h" | ||
| 15 | |||
| 16 | #import "RootViewController.h" | ||
| 17 | #import "GameConfig.h" | ||
| 18 | |||
| 19 | @implementation RootViewController | ||
| 20 | |||
| 21 | /* | ||
| 22 | // The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. | ||
| 23 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { | ||
| 24 | if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { | ||
| 25 | // Custom initialization | ||
| 26 | } | ||
| 27 | return self; | ||
| 28 | } | ||
| 29 | */ | ||
| 30 | |||
| 31 | /* | ||
| 32 | // Implement loadView to create a view hierarchy programmatically, without using a nib. | ||
| 33 | - (void)loadView { | ||
| 34 | } | ||
| 35 | */ | ||
| 36 | |||
| 37 | /* | ||
| 38 | // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. | ||
| 39 | - (void)viewDidLoad { | ||
| 40 | [super viewDidLoad]; | ||
| 41 | } | ||
| 42 | */ | ||
| 43 | |||
| 44 | |||
| 45 | // Override to allow orientations other than the default portrait orientation. | ||
| 46 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { | ||
| 47 | |||
| 48 | // | ||
| 49 | // There are 2 ways to support auto-rotation: | ||
| 50 | // - The OpenGL / cocos2d way | ||
| 51 | // - Faster, but doesn't rotate the UIKit objects | ||
| 52 | // - The ViewController way | ||
| 53 | // - A bit slower, but the UiKit objects are placed in the right place | ||
| 54 | // | ||
| 55 | |||
| 56 | #if GAME_AUTOROTATION==kGameAutorotationNone | ||
| 57 | // | ||
| 58 | // EAGLView won't be autorotated. | ||
| 59 | // Since this method should return YES in at least 1 orientation, | ||
| 60 | // we return YES only in the Portrait orientation | ||
| 61 | // | ||
| 62 | return ( interfaceOrientation == kCCDeviceOrientationLandscapeLeft ); | ||
| 63 | |||
| 64 | #elif GAME_AUTOROTATION==kGameAutorotationCCDirector | ||
| 65 | // | ||
| 66 | // EAGLView will be rotated by cocos2d | ||
| 67 | // | ||
| 68 | // Sample: Autorotate only in landscape mode | ||
| 69 | // | ||
| 70 | if( interfaceOrientation == UIInterfaceOrientationLandscapeLeft ) { | ||
| 71 | [[CCDirector sharedDirector] setDeviceOrientation: kCCDeviceOrientationLandscapeRight]; | ||
| 72 | } else if( interfaceOrientation == UIInterfaceOrientationLandscapeRight) { | ||
| 73 | [[CCDirector sharedDirector] setDeviceOrientation: kCCDeviceOrientationLandscapeLeft]; | ||
| 74 | } | ||
| 75 | |||
| 76 | // Since this method should return YES in at least 1 orientation, | ||
| 77 | // we return YES only in the Portrait orientation | ||
| 78 | return ( interfaceOrientation == UIInterfaceOrientationPortrait ); | ||
| 79 | |||
| 80 | #elif GAME_AUTOROTATION == kGameAutorotationUIViewController | ||
| 81 | // | ||
| 82 | // EAGLView will be rotated by the UIViewController | ||
| 83 | // | ||
| 84 | // Sample: Autorotate only in landscpe mode | ||
| 85 | // | ||
| 86 | // return YES for the supported orientations | ||
| 87 | |||
| 88 | return ( UIInterfaceOrientationIsLandscape( interfaceOrientation ) ); | ||
| 89 | |||
| 90 | #else | ||
| 91 | #error Unknown value in GAME_AUTOROTATION | ||
| 92 | |||
| 93 | #endif // GAME_AUTOROTATION | ||
| 94 | |||
| 95 | |||
| 96 | // Shold not happen | ||
| 97 | return NO; | ||
| 98 | } | ||
| 99 | |||
| 100 | // | ||
| 101 | // This callback only will be called when GAME_AUTOROTATION == kGameAutorotationUIViewController | ||
| 102 | // | ||
| 103 | #if GAME_AUTOROTATION == kGameAutorotationUIViewController | ||
| 104 | -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration | ||
| 105 | { | ||
| 106 | // | ||
| 107 | // Assuming that the main window has the size of the screen | ||
| 108 | // BUG: This won't work if the EAGLView is not fullscreen | ||
| 109 | /// | ||
| 110 | CGRect screenRect = [[UIScreen mainScreen] bounds]; | ||
| 111 | CGRect rect; | ||
| 112 | |||
| 113 | if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) | ||
| 114 | rect = screenRect; | ||
| 115 | |||
| 116 | else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) | ||
| 117 | rect.size = CGSizeMake( screenRect.size.height, screenRect.size.width ); | ||
| 118 | |||
| 119 | CCDirector *director = [CCDirector sharedDirector]; | ||
| 120 | EAGLView *glView = [director openGLView]; | ||
| 121 | float contentScaleFactor = [director contentScaleFactor]; | ||
| 122 | |||
| 123 | if( contentScaleFactor != 1 ) { | ||
| 124 | rect.size.width *= contentScaleFactor; | ||
| 125 | rect.size.height *= contentScaleFactor; | ||
| 126 | } | ||
| 127 | glView.frame = rect; | ||
| 128 | } | ||
| 129 | #endif // GAME_AUTOROTATION == kGameAutorotationUIViewController | ||
| 130 | |||
| 131 | |||
| 132 | - (void)didReceiveMemoryWarning { | ||
| 133 | // Releases the view if it doesn't have a superview. | ||
| 134 | [super didReceiveMemoryWarning]; | ||
| 135 | |||
| 136 | // Release any cached data, images, etc that aren't in use. | ||
| 137 | } | ||
| 138 | |||
| 139 | - (void)viewDidUnload { | ||
| 140 | [super viewDidUnload]; | ||
| 141 | // Release any retained subviews of the main view. | ||
| 142 | // e.g. self.myOutlet = nil; | ||
| 143 | } | ||
| 144 | |||
| 145 | |||
| 146 | - (void)dealloc { | ||
| 147 | [super dealloc]; | ||
| 148 | } | ||
| 149 | |||
| 150 | |||
| 151 | @end | ||
| 152 | |||
| diff --git a/Classes/ValuableObject.h b/Classes/ValuableObject.h new file mode 100755 index 0000000..ccefbbd --- /dev/null +++ b/Classes/ValuableObject.h | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | // | ||
| 2 | // ValuableObject.h | ||
| 3 | // Cart Collect | ||
| 4 | // | ||
| 5 | // Created by iD Student Account on 7/20/11. | ||
| 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <Foundation/Foundation.h> | ||
| 10 | |||
| 11 | @protocol ValuableObject | ||
| 12 | |||
| 13 | - (int)pointValue; | ||
| 14 | |||
| 15 | @end | ||
