diff options
| -rwxr-xr-x | Cartographic.xcodeproj/project.pbxproj | 10 | ||||
| -rw-r--r-- | Classes/Cart.h | 2 | ||||
| -rw-r--r-- | Classes/Cart.m | 15 | ||||
| -rwxr-xr-x | Classes/Cart_CollectAppDelegate.m | 3 | ||||
| -rw-r--r-- | Classes/GameMode.h | 6 | ||||
| -rw-r--r-- | Classes/GameMode.m | 69 | ||||
| -rwxr-xr-x | Classes/HighscoreListController.m | 22 | ||||
| -rw-r--r-- | Classes/JumpGameMode.m | 46 | ||||
| -rwxr-xr-x | Resources/Info.plist | 4 |
9 files changed, 132 insertions, 45 deletions
| diff --git a/Cartographic.xcodeproj/project.pbxproj b/Cartographic.xcodeproj/project.pbxproj index 464cf44..32912ef 100755 --- a/Cartographic.xcodeproj/project.pbxproj +++ b/Cartographic.xcodeproj/project.pbxproj | |||
| @@ -104,6 +104,7 @@ | |||
| 104 | 6C19F1651401917900F9CCD3 /* feedback2.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C19F1641401917900F9CCD3 /* feedback2.png */; }; | 104 | 6C19F1651401917900F9CCD3 /* feedback2.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C19F1641401917900F9CCD3 /* feedback2.png */; }; |
| 105 | 6C29041013EAEB590032DA0F /* TutorialBubble.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C29040F13EAEB590032DA0F /* TutorialBubble.m */; }; | 105 | 6C29041013EAEB590032DA0F /* TutorialBubble.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C29040F13EAEB590032DA0F /* TutorialBubble.m */; }; |
| 106 | 6C29041213EAEC8A0032DA0F /* framestuff.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C29041113EAEC8A0032DA0F /* framestuff.png */; }; | 106 | 6C29041213EAEC8A0032DA0F /* framestuff.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C29041113EAEC8A0032DA0F /* framestuff.png */; }; |
| 107 | 6C2A07781436100C007AB76C /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C2A07771436100C007AB76C /* CoreMotion.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; | ||
| 107 | 6C39CFE013FC2708002B21AF /* tutorial.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFDF13FC2708002B21AF /* tutorial.png */; }; | 108 | 6C39CFE013FC2708002B21AF /* tutorial.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFDF13FC2708002B21AF /* tutorial.png */; }; |
| 108 | 6C39CFE213FC2713002B21AF /* tutorial2.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFE113FC2713002B21AF /* tutorial2.png */; }; | 109 | 6C39CFE213FC2713002B21AF /* tutorial2.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFE113FC2713002B21AF /* tutorial2.png */; }; |
| 109 | 6C39CFE513FC4635002B21AF /* JumpGameMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C39CFE413FC4635002B21AF /* JumpGameMode.m */; }; | 110 | 6C39CFE513FC4635002B21AF /* JumpGameMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C39CFE413FC4635002B21AF /* JumpGameMode.m */; }; |
| @@ -434,6 +435,7 @@ | |||
| 434 | 6C29040E13EAEB590032DA0F /* TutorialBubble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TutorialBubble.h; sourceTree = "<group>"; }; | 435 | 6C29040E13EAEB590032DA0F /* TutorialBubble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TutorialBubble.h; sourceTree = "<group>"; }; |
| 435 | 6C29040F13EAEB590032DA0F /* TutorialBubble.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TutorialBubble.m; sourceTree = "<group>"; }; | 436 | 6C29040F13EAEB590032DA0F /* TutorialBubble.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TutorialBubble.m; sourceTree = "<group>"; }; |
| 436 | 6C29041113EAEC8A0032DA0F /* framestuff.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = framestuff.png; sourceTree = "<group>"; }; | 437 | 6C29041113EAEC8A0032DA0F /* framestuff.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = framestuff.png; sourceTree = "<group>"; }; |
| 438 | 6C2A07771436100C007AB76C /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; }; | ||
| 437 | 6C39CFDF13FC2708002B21AF /* tutorial.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial.png; sourceTree = "<group>"; }; | 439 | 6C39CFDF13FC2708002B21AF /* tutorial.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial.png; sourceTree = "<group>"; }; |
| 438 | 6C39CFE113FC2713002B21AF /* tutorial2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial2.png; sourceTree = "<group>"; }; | 440 | 6C39CFE113FC2713002B21AF /* tutorial2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial2.png; sourceTree = "<group>"; }; |
| 439 | 6C39CFE313FC4635002B21AF /* JumpGameMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JumpGameMode.h; sourceTree = "<group>"; }; | 441 | 6C39CFE313FC4635002B21AF /* JumpGameMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JumpGameMode.h; sourceTree = "<group>"; }; |
| @@ -670,6 +672,7 @@ | |||
| 670 | isa = PBXFrameworksBuildPhase; | 672 | isa = PBXFrameworksBuildPhase; |
| 671 | buildActionMask = 2147483647; | 673 | buildActionMask = 2147483647; |
| 672 | files = ( | 674 | files = ( |
| 675 | 6C2A07781436100C007AB76C /* CoreMotion.framework in Frameworks */, | ||
| 673 | DCCBF1B70F6022AE0040855A /* CoreGraphics.framework in Frameworks */, | 676 | DCCBF1B70F6022AE0040855A /* CoreGraphics.framework in Frameworks */, |
| 674 | DCCBF1B90F6022AE0040855A /* Foundation.framework in Frameworks */, | 677 | DCCBF1B90F6022AE0040855A /* Foundation.framework in Frameworks */, |
| 675 | DCCBF1BB0F6022AE0040855A /* OpenGLES.framework in Frameworks */, | 678 | DCCBF1BB0F6022AE0040855A /* OpenGLES.framework in Frameworks */, |
| @@ -740,6 +743,7 @@ | |||
| 740 | children = ( | 743 | children = ( |
| 741 | 6C88B69314119B5A0049E402 /* libTestFlight.a */, | 744 | 6C88B69314119B5A0049E402 /* libTestFlight.a */, |
| 742 | 3F8395D013D746200059AEE8 /* libsqlite3.0.dylib */, | 745 | 3F8395D013D746200059AEE8 /* libsqlite3.0.dylib */, |
| 746 | 6C2A07771436100C007AB76C /* CoreMotion.framework */, | ||
| 743 | DCCBF1B60F6022AE0040855A /* CoreGraphics.framework */, | 747 | DCCBF1B60F6022AE0040855A /* CoreGraphics.framework */, |
| 744 | DCCBF1B80F6022AE0040855A /* Foundation.framework */, | 748 | DCCBF1B80F6022AE0040855A /* Foundation.framework */, |
| 745 | DCCBF1BA0F6022AE0040855A /* OpenGLES.framework */, | 749 | DCCBF1BA0F6022AE0040855A /* OpenGLES.framework */, |
| @@ -1680,6 +1684,7 @@ | |||
| 1680 | INFOPLIST_FILE = Resources/Info.plist; | 1684 | INFOPLIST_FILE = Resources/Info.plist; |
| 1681 | INFOPLIST_PREFIX_HEADER = Versioning.h; | 1685 | INFOPLIST_PREFIX_HEADER = Versioning.h; |
| 1682 | INFOPLIST_PREPROCESS = YES; | 1686 | INFOPLIST_PREPROCESS = YES; |
| 1687 | IPHONEOS_DEPLOYMENT_TARGET = 3.0; | ||
| 1683 | LIBRARY_SEARCH_PATHS = ( | 1688 | LIBRARY_SEARCH_PATHS = ( |
| 1684 | "$(inherited)", | 1689 | "$(inherited)", |
| 1685 | "\"$(SRCROOT)\"", | 1690 | "\"$(SRCROOT)\"", |
| @@ -1689,6 +1694,7 @@ | |||
| 1689 | "-ObjC", | 1694 | "-ObjC", |
| 1690 | ); | 1695 | ); |
| 1691 | PRODUCT_NAME = Cartographic; | 1696 | PRODUCT_NAME = Cartographic; |
| 1697 | SDKROOT = iphoneos; | ||
| 1692 | TARGETED_DEVICE_FAMILY = 1; | 1698 | TARGETED_DEVICE_FAMILY = 1; |
| 1693 | WARNING_CFLAGS = "-Wall"; | 1699 | WARNING_CFLAGS = "-Wall"; |
| 1694 | }; | 1700 | }; |
| @@ -1712,6 +1718,7 @@ | |||
| 1712 | INFOPLIST_FILE = Resources/Info.plist; | 1718 | INFOPLIST_FILE = Resources/Info.plist; |
| 1713 | INFOPLIST_PREFIX_HEADER = Versioning.h; | 1719 | INFOPLIST_PREFIX_HEADER = Versioning.h; |
| 1714 | INFOPLIST_PREPROCESS = YES; | 1720 | INFOPLIST_PREPROCESS = YES; |
| 1721 | IPHONEOS_DEPLOYMENT_TARGET = 3.0; | ||
| 1715 | LIBRARY_SEARCH_PATHS = ( | 1722 | LIBRARY_SEARCH_PATHS = ( |
| 1716 | "$(inherited)", | 1723 | "$(inherited)", |
| 1717 | "\"$(SRCROOT)\"", | 1724 | "\"$(SRCROOT)\"", |
| @@ -1721,6 +1728,7 @@ | |||
| 1721 | "-ObjC", | 1728 | "-ObjC", |
| 1722 | ); | 1729 | ); |
| 1723 | PRODUCT_NAME = Cartographic; | 1730 | PRODUCT_NAME = Cartographic; |
| 1731 | SDKROOT = iphoneos; | ||
| 1724 | TARGETED_DEVICE_FAMILY = 1; | 1732 | TARGETED_DEVICE_FAMILY = 1; |
| 1725 | WARNING_CFLAGS = "-Wall"; | 1733 | WARNING_CFLAGS = "-Wall"; |
| 1726 | }; | 1734 | }; |
| @@ -1815,6 +1823,7 @@ | |||
| 1815 | INFOPLIST_FILE = Resources/Info.plist; | 1823 | INFOPLIST_FILE = Resources/Info.plist; |
| 1816 | INFOPLIST_PREFIX_HEADER = Versioning.h; | 1824 | INFOPLIST_PREFIX_HEADER = Versioning.h; |
| 1817 | INFOPLIST_PREPROCESS = YES; | 1825 | INFOPLIST_PREPROCESS = YES; |
| 1826 | IPHONEOS_DEPLOYMENT_TARGET = 3.0; | ||
| 1818 | LIBRARY_SEARCH_PATHS = ( | 1827 | LIBRARY_SEARCH_PATHS = ( |
| 1819 | "$(inherited)", | 1828 | "$(inherited)", |
| 1820 | "\"$(SRCROOT)\"", | 1829 | "\"$(SRCROOT)\"", |
| @@ -1824,6 +1833,7 @@ | |||
| 1824 | "-ObjC", | 1833 | "-ObjC", |
| 1825 | ); | 1834 | ); |
| 1826 | PRODUCT_NAME = Cartographic; | 1835 | PRODUCT_NAME = Cartographic; |
| 1836 | SDKROOT = iphoneos; | ||
| 1827 | TARGETED_DEVICE_FAMILY = 1; | 1837 | TARGETED_DEVICE_FAMILY = 1; |
| 1828 | WARNING_CFLAGS = "-Wall"; | 1838 | WARNING_CFLAGS = "-Wall"; |
| 1829 | }; | 1839 | }; |
| diff --git a/Classes/Cart.h b/Classes/Cart.h index 1058025..af463f2 100644 --- a/Classes/Cart.h +++ b/Classes/Cart.h | |||
| @@ -26,6 +26,6 @@ | |||
| 26 | @property (assign) BOOL boundedByScreen; | 26 | @property (assign) BOOL boundedByScreen; |
| 27 | - (id)initWithSprite:(CCSprite*)sprite; | 27 | - (id)initWithSprite:(CCSprite*)sprite; |
| 28 | - (void)tick; | 28 | - (void)tick; |
| 29 | - (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration; | 29 | - (void)deviceDidRotate:(double)pitch; |
| 30 | 30 | ||
| 31 | @end | 31 | @end |
| diff --git a/Classes/Cart.m b/Classes/Cart.m index 0344bdf..f9da181 100644 --- a/Classes/Cart.m +++ b/Classes/Cart.m | |||
| @@ -54,7 +54,7 @@ | |||
| 54 | if ((delegate != nil) && ([delegate respondsToSelector:@selector(cartShouldFall:)])) | 54 | if ((delegate != nil) && ([delegate respondsToSelector:@selector(cartShouldFall:)])) |
| 55 | { | 55 | { |
| 56 | int bottom = [delegate cartShouldFall:self]; | 56 | int bottom = [delegate cartShouldFall:self]; |
| 57 | sprite.position = ccp(sprite.position.x, MAX(bottom, sprite.position.y-6)); | 57 | sprite.position = ccp(sprite.position.x, MAX(bottom, sprite.position.y-8)); |
| 58 | } else { | 58 | } else { |
| 59 | NSLog(@"Falling is set on a cart without a compatible game mode."); | 59 | NSLog(@"Falling is set on a cart without a compatible game mode."); |
| 60 | } | 60 | } |
| @@ -62,15 +62,14 @@ | |||
| 62 | } | 62 | } |
| 63 | } | 63 | } |
| 64 | 64 | ||
| 65 | - (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration | 65 | #define kFilterFactor 0.05f |
| 66 | |||
| 67 | - (void)deviceDidRotate:(double)pitch | ||
| 66 | { | 68 | { |
| 67 | static float prevY=0; | 69 | static float prevY=0; |
| 68 | 70 | float accelY = -((float) pitch * kFilterFactor + (1- kFilterFactor)*prevY); | |
| 69 | #define kFilterFactor 0.05f | 71 | |
| 70 | 72 | prevY = accelY; | |
| 71 | float accelY = -((float) acceleration.y * kFilterFactor + (1- kFilterFactor)*prevY); | ||
| 72 | |||
| 73 | prevY = accelY; | ||
| 74 | accelX = accelY * 750; | 73 | accelX = accelY * 750; |
| 75 | } | 74 | } |
| 76 | 75 | ||
| diff --git a/Classes/Cart_CollectAppDelegate.m b/Classes/Cart_CollectAppDelegate.m index 25a2aa4..c92d231 100755 --- a/Classes/Cart_CollectAppDelegate.m +++ b/Classes/Cart_CollectAppDelegate.m | |||
| @@ -114,7 +114,8 @@ | |||
| 114 | [viewController setView:glView]; | 114 | [viewController setView:glView]; |
| 115 | 115 | ||
| 116 | // make the View Controller a child of the main window | 116 | // make the View Controller a child of the main window |
| 117 | [window addSubview: viewController.view]; | 117 | [window setRootViewController:viewController]; |
| 118 | //[window addSubview: viewController.view]; | ||
| 118 | 119 | ||
| 119 | [window makeKeyAndVisible]; | 120 | [window makeKeyAndVisible]; |
| 120 | 121 | ||
| diff --git a/Classes/GameMode.h b/Classes/GameMode.h index cd41884..e208d49 100644 --- a/Classes/GameMode.h +++ b/Classes/GameMode.h | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #import "Cart.h" | 10 | #import "Cart.h" |
| 11 | #import "FallingObjectFactory.h" | 11 | #import "FallingObjectFactory.h" |
| 12 | #import "GameModeInfo.h" | 12 | #import "GameModeInfo.h" |
| 13 | #import <CoreMotion/CoreMotion.h> | ||
| 13 | 14 | ||
| 14 | #define GAME_SCENE 436 | 15 | #define GAME_SCENE 436 |
| 15 | #define GAME_LAYER 437 | 16 | #define GAME_LAYER 437 |
| @@ -31,6 +32,10 @@ | |||
| 31 | void (^delayedAction)(void); | 32 | void (^delayedAction)(void); |
| 32 | 33 | ||
| 33 | BOOL isPaused; | 34 | BOOL isPaused; |
| 35 | |||
| 36 | BOOL hasGyroscope; | ||
| 37 | double pitch; | ||
| 38 | CMMotionManager* motionManager; | ||
| 34 | } | 39 | } |
| 35 | 40 | ||
| 36 | @property (readonly) Cart* cart; | 41 | @property (readonly) Cart* cart; |
| @@ -46,5 +51,6 @@ | |||
| 46 | - (void)scheduleDelayedAction:(void(^)(void))delayedAction delay:(float)delay; | 51 | - (void)scheduleDelayedAction:(void(^)(void))delayedAction delay:(float)delay; |
| 47 | - (void)runDelayedAction; | 52 | - (void)runDelayedAction; |
| 48 | + (GameModeInfo*)info; | 53 | + (GameModeInfo*)info; |
| 54 | - (void)setPitch:(double)m_pitch; | ||
| 49 | 55 | ||
| 50 | @end | 56 | @end |
| diff --git a/Classes/GameMode.m b/Classes/GameMode.m index 3e2f3ee..49d0053 100644 --- a/Classes/GameMode.m +++ b/Classes/GameMode.m | |||
| @@ -20,8 +20,6 @@ | |||
| 20 | 20 | ||
| 21 | if (nil != self) | 21 | if (nil != self) |
| 22 | { | 22 | { |
| 23 | isAccelerometerEnabled_ = YES; | ||
| 24 | |||
| 25 | objects = [[NSMutableSet alloc] init]; | 23 | objects = [[NSMutableSet alloc] init]; |
| 26 | 24 | ||
| 27 | cart = [[Cart alloc] initWithSprite:[CCSprite spriteWithFile:@"cart.png"]]; | 25 | cart = [[Cart alloc] initWithSprite:[CCSprite spriteWithFile:@"cart.png"]]; |
| @@ -53,6 +51,26 @@ | |||
| 53 | } | 51 | } |
| 54 | 52 | ||
| 55 | isPaused = NO; | 53 | isPaused = NO; |
| 54 | |||
| 55 | Class cmClass = (NSClassFromString(@"CMMotionManager")); | ||
| 56 | if (cmClass) | ||
| 57 | { | ||
| 58 | motionManager = [[CMMotionManager alloc] init]; | ||
| 59 | |||
| 60 | if (motionManager.gyroAvailable) | ||
| 61 | { | ||
| 62 | [motionManager setDeviceMotionUpdateInterval:1.0f/60.0f]; | ||
| 63 | isAccelerometerEnabled_ = NO; | ||
| 64 | hasGyroscope = YES; | ||
| 65 | } else { | ||
| 66 | isAccelerometerEnabled_ = YES; | ||
| 67 | motionManager = nil; | ||
| 68 | hasGyroscope = NO; | ||
| 69 | } | ||
| 70 | } else { | ||
| 71 | isAccelerometerEnabled_ = YES; | ||
| 72 | hasGyroscope = NO; | ||
| 73 | } | ||
| 56 | } | 74 | } |
| 57 | 75 | ||
| 58 | return self; | 76 | return self; |
| @@ -60,19 +78,39 @@ | |||
| 60 | 78 | ||
| 61 | - (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration | 79 | - (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration |
| 62 | { | 80 | { |
| 63 | [cart accelerometer:accelerometer didAccelerate:acceleration]; | 81 | self.pitch = acceleration.y; |
| 64 | } | 82 | } |
| 65 | 83 | ||
| 66 | - (void)onEnterTransitionDidFinish | 84 | - (void)onEnterTransitionDidFinish |
| 67 | { | 85 | { |
| 68 | [super onEnterTransitionDidFinish]; | 86 | [super onEnterTransitionDidFinish]; |
| 69 | 87 | ||
| 70 | [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 60)]; | 88 | if (hasGyroscope) |
| 89 | { | ||
| 90 | [motionManager startDeviceMotionUpdates]; | ||
| 91 | } else { | ||
| 92 | [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 60)]; | ||
| 93 | } | ||
| 94 | |||
| 71 | [self schedule:@selector(tick:) interval:1.0f/60.0f]; | 95 | [self schedule:@selector(tick:) interval:1.0f/60.0f]; |
| 72 | } | 96 | } |
| 73 | 97 | ||
| 98 | - (void)onExit | ||
| 99 | { | ||
| 100 | if (hasGyroscope) | ||
| 101 | { | ||
| 102 | [motionManager stopDeviceMotionUpdates]; | ||
| 103 | } | ||
| 104 | } | ||
| 105 | |||
| 74 | - (void)tick:(ccTime)dt | 106 | - (void)tick:(ccTime)dt |
| 75 | { | 107 | { |
| 108 | if (hasGyroscope) | ||
| 109 | { | ||
| 110 | CMDeviceMotion* motion = [motionManager deviceMotion]; | ||
| 111 | self.pitch = -motion.attitude.pitch; | ||
| 112 | } | ||
| 113 | |||
| 76 | [cart tick]; | 114 | [cart tick]; |
| 77 | 115 | ||
| 78 | NSMutableSet* discardedObjects = [NSMutableSet set]; | 116 | NSMutableSet* discardedObjects = [NSMutableSet set]; |
| @@ -100,6 +138,11 @@ | |||
| 100 | 138 | ||
| 101 | [self pauseSchedulerAndActions]; | 139 | [self pauseSchedulerAndActions]; |
| 102 | 140 | ||
| 141 | if (hasGyroscope) | ||
| 142 | { | ||
| 143 | [motionManager stopDeviceMotionUpdates]; | ||
| 144 | } | ||
| 145 | |||
| 103 | shadedLayer = [CCLayerColor layerWithColor:ccc4(0, 0, 0, 127)]; | 146 | shadedLayer = [CCLayerColor layerWithColor:ccc4(0, 0, 0, 127)]; |
| 104 | [[[CCDirector sharedDirector] runningScene] addChild:shadedLayer]; | 147 | [[[CCDirector sharedDirector] runningScene] addChild:shadedLayer]; |
| 105 | 148 | ||
| @@ -132,6 +175,11 @@ | |||
| 132 | shadedLayer = nil; | 175 | shadedLayer = nil; |
| 133 | pauseLayer = nil; | 176 | pauseLayer = nil; |
| 134 | 177 | ||
| 178 | if (hasGyroscope) | ||
| 179 | { | ||
| 180 | [motionManager startDeviceMotionUpdates]; | ||
| 181 | } | ||
| 182 | |||
| 135 | [self resumeSchedulerAndActions]; | 183 | [self resumeSchedulerAndActions]; |
| 136 | 184 | ||
| 137 | isPaused = NO; | 185 | isPaused = NO; |
| @@ -202,9 +250,16 @@ | |||
| 202 | 250 | ||
| 203 | + (GameModeInfo*)info | 251 | + (GameModeInfo*)info |
| 204 | { | 252 | { |
| 205 | [NSException raise:@"Unimplemented method" format:@"Method -info of GameMode subclasses must be overridden"]; | 253 | [NSException raise:@"Unimplemented method" format:@"Method -info of GameMode subclasses must be overridden"]; |
| 206 | 254 | ||
| 207 | return nil; | 255 | return nil; |
| 256 | } | ||
| 257 | |||
| 258 | - (void)setPitch:(double)m_pitch | ||
| 259 | { | ||
| 260 | pitch = m_pitch; | ||
| 261 | |||
| 262 | [cart deviceDidRotate:pitch]; | ||
| 208 | } | 263 | } |
| 209 | 264 | ||
| 210 | - (void)dealloc | 265 | - (void)dealloc |
| diff --git a/Classes/HighscoreListController.m b/Classes/HighscoreListController.m index 7370da5..c746421 100755 --- a/Classes/HighscoreListController.m +++ b/Classes/HighscoreListController.m | |||
| @@ -24,7 +24,7 @@ | |||
| 24 | if (self) { | 24 | if (self) { |
| 25 | localHighscores = [[Highscore localHighscoreListForGameMode:@"Collect"] retain]; | 25 | localHighscores = [[Highscore localHighscoreListForGameMode:@"Collect"] retain]; |
| 26 | 26 | ||
| 27 | navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; | 27 | navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 480, 44)]; |
| 28 | myNavigationItem = [[UINavigationItem alloc] initWithTitle:@"Highscores"]; | 28 | myNavigationItem = [[UINavigationItem alloc] initWithTitle:@"Highscores"]; |
| 29 | UIBarButtonItem* barButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(back)]; | 29 | UIBarButtonItem* barButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(back)]; |
| 30 | myNavigationItem.leftBarButtonItem = barButton; | 30 | myNavigationItem.leftBarButtonItem = barButton; |
| @@ -45,7 +45,7 @@ | |||
| 45 | [modeControl addTarget:self action:@selector(switchGameMode:) forControlEvents:UIControlEventValueChanged]; | 45 | [modeControl addTarget:self action:@selector(switchGameMode:) forControlEvents:UIControlEventValueChanged]; |
| 46 | UIBarButtonItem* barButton3 = [[UIBarButtonItem alloc] initWithCustomView:modeControl]; | 46 | UIBarButtonItem* barButton3 = [[UIBarButtonItem alloc] initWithCustomView:modeControl]; |
| 47 | 47 | ||
| 48 | toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 480-44, 320, 44)]; | 48 | toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 320-44, 480, 44)]; |
| 49 | [toolbar setItems:[NSArray arrayWithObjects:barButton3, btnSpace, barButton2, nil] animated:NO]; | 49 | [toolbar setItems:[NSArray arrayWithObjects:barButton3, btnSpace, barButton2, nil] animated:NO]; |
| 50 | [barButton2 release]; | 50 | [barButton2 release]; |
| 51 | [btnSpace release]; | 51 | [btnSpace release]; |
| @@ -55,8 +55,8 @@ | |||
| 55 | loadingGlobal = NO; | 55 | loadingGlobal = NO; |
| 56 | 56 | ||
| 57 | tableView = [(UITableView*)self.view retain]; | 57 | tableView = [(UITableView*)self.view retain]; |
| 58 | UIView* parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; | 58 | UIView* parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 480, 320)]; |
| 59 | [tableView setFrame:CGRectMake(0, 44, 320, 480-44-44)]; | 59 | [tableView setFrame:CGRectMake(0, 44, 480, 320-44-44)]; |
| 60 | [parentView addSubview:navigationBar]; | 60 | [parentView addSubview:navigationBar]; |
| 61 | [parentView addSubview:tableView]; | 61 | [parentView addSubview:tableView]; |
| 62 | [parentView addSubview:toolbar]; | 62 | [parentView addSubview:toolbar]; |
| @@ -101,9 +101,9 @@ | |||
| 101 | */ | 101 | */ |
| 102 | /* | 102 | /* |
| 103 | // Override to allow orientations other than the default portrait orientation. | 103 | // Override to allow orientations other than the default portrait orientation. |
| 104 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { | 104 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation |
| 105 | // Return YES for supported orientations. | 105 | { |
| 106 | return YES; | 106 | return ( interfaceOrientation == UIInterfaceOrientationLandscapeRight ); |
| 107 | } | 107 | } |
| 108 | */ | 108 | */ |
| 109 | 109 | ||
| @@ -183,7 +183,7 @@ | |||
| 183 | UILabel* scoreLabel = [[UILabel alloc] init]; | 183 | UILabel* scoreLabel = [[UILabel alloc] init]; |
| 184 | scoreLabel.text = [NSString stringWithFormat:@"%d", highscore.score]; | 184 | scoreLabel.text = [NSString stringWithFormat:@"%d", highscore.score]; |
| 185 | CGSize labelSize = [scoreLabel.text sizeWithFont:scoreLabel.font constrainedToSize:CGSizeMake(160, 44) lineBreakMode:UILineBreakModeClip]; | 185 | CGSize labelSize = [scoreLabel.text sizeWithFont:scoreLabel.font constrainedToSize:CGSizeMake(160, 44) lineBreakMode:UILineBreakModeClip]; |
| 186 | scoreLabel.frame = CGRectMake(320-10-labelSize.width, 22-labelSize.height/2, labelSize.width, labelSize.height); | 186 | scoreLabel.frame = CGRectMake(480-10-labelSize.width, 22-labelSize.height/2, labelSize.width, labelSize.height); |
| 187 | [cell addSubview:scoreLabel]; | 187 | [cell addSubview:scoreLabel]; |
| 188 | [scoreLabel release]; | 188 | [scoreLabel release]; |
| 189 | 189 | ||
| @@ -293,10 +293,10 @@ | |||
| 293 | { | 293 | { |
| 294 | loadingGlobal = YES; | 294 | loadingGlobal = YES; |
| 295 | 295 | ||
| 296 | loadingView = [[UIView alloc] initWithFrame:CGRectMake(0, 44, 320, 480-44-44)]; | 296 | loadingView = [[UIView alloc] initWithFrame:CGRectMake(0, 44, 480, 320-44-44)]; |
| 297 | activity = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(150, 228-44, 20, 20)]; | 297 | activity = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(230, 148-44, 20, 20)]; |
| 298 | activity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; | 298 | activity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; |
| 299 | statusText = [[UILabel alloc] initWithFrame:CGRectMake(0, 256-44, 320, 21)]; | 299 | statusText = [[UILabel alloc] initWithFrame:CGRectMake(80, 150, 320, 21)]; |
| 300 | statusText.text = @"Downloading highscores..."; | 300 | statusText.text = @"Downloading highscores..."; |
| 301 | statusText.textAlignment = UITextAlignmentCenter; | 301 | statusText.textAlignment = UITextAlignmentCenter; |
| 302 | 302 | ||
| diff --git a/Classes/JumpGameMode.m b/Classes/JumpGameMode.m index 3788c97..f3e690c 100644 --- a/Classes/JumpGameMode.m +++ b/Classes/JumpGameMode.m | |||
| @@ -25,7 +25,19 @@ | |||
| 25 | 25 | ||
| 26 | @end | 26 | @end |
| 27 | 27 | ||
| 28 | // FallingObject flag 0 is whether the object is floating in water | 28 | @implementation FallingObject (Flags) |
| 29 | |||
| 30 | - (BOOL)fellDuringWave | ||
| 31 | { | ||
| 32 | return flags[0]; | ||
| 33 | } | ||
| 34 | |||
| 35 | - (void)setFellDuringWave:(BOOL)value | ||
| 36 | { | ||
| 37 | flags[0] = value; | ||
| 38 | } | ||
| 39 | |||
| 40 | @end | ||
| 29 | 41 | ||
| 30 | @implementation JumpGameMode | 42 | @implementation JumpGameMode |
| 31 | 43 | ||
| @@ -141,10 +153,12 @@ static GameModeInfo* info; | |||
| 141 | } | 153 | } |
| 142 | } | 154 | } |
| 143 | 155 | ||
| 156 | [ledges minusSet:discardedSet]; | ||
| 157 | |||
| 144 | NSMutableSet* discardedObjects = [NSMutableSet set]; | 158 | NSMutableSet* discardedObjects = [NSMutableSet set]; |
| 145 | for (FallingObject* object in objects) | 159 | for (FallingObject* object in objects) |
| 146 | { | 160 | { |
| 147 | if ((object.sprite.position.y < 86) && (![object flag:0])) | 161 | if (object.sprite.position.y < (64+object.sprite.boundingBox.size.height/2)) |
| 148 | { | 162 | { |
| 149 | for (CCSprite* ledge in ledges) | 163 | for (CCSprite* ledge in ledges) |
| 150 | { | 164 | { |
| @@ -167,20 +181,14 @@ static GameModeInfo* info; | |||
| 167 | } | 181 | } |
| 168 | } | 182 | } |
| 169 | 183 | ||
| 170 | if ((waterTick >= 180) || ((waterTick > 0) && ([object flag:0]))) | 184 | if (object.fellDuringWave) |
| 171 | { | 185 | { |
| 172 | object.sprite.position = ccp(object.sprite.position.x, MAX(object.sprite.position.y, water.position.y+80+11)); | 186 | object.sprite.position = ccp(object.sprite.position.x, MAX(object.sprite.position.y, water.position.y+80+11)); |
| 173 | } else { | 187 | } else { |
| 174 | object.sprite.position = ccp(object.sprite.position.x-ledgeScrollSpeed, object.sprite.position.y); | 188 | object.sprite.position = ccp(object.sprite.position.x-ledgeScrollSpeed, object.sprite.position.y); |
| 175 | } | 189 | } |
| 176 | |||
| 177 | if ((waterTick > 0) && (object.sprite.position.y <= (water.position.y+80+11))) | ||
| 178 | { | ||
| 179 | [object setFlag:0 withValue:YES]; | ||
| 180 | } | ||
| 181 | } | 190 | } |
| 182 | 191 | ||
| 183 | [ledges minusSet:discardedSet]; | ||
| 184 | [objects minusSet:discardedObjects]; | 192 | [objects minusSet:discardedObjects]; |
| 185 | 193 | ||
| 186 | if (rightmost <= 480) | 194 | if (rightmost <= 480) |
| @@ -205,6 +213,9 @@ static GameModeInfo* info; | |||
| 205 | if ((cart.sprite.position.y < 86) && (cart.boundedByScreen)) | 213 | if ((cart.sprite.position.y < 86) && (cart.boundedByScreen)) |
| 206 | { | 214 | { |
| 207 | cart.boundedByScreen = NO; | 215 | cart.boundedByScreen = NO; |
| 216 | } else if ((cart.sprite.position.y >= 86) && (!cart.boundedByScreen)) | ||
| 217 | { | ||
| 218 | cart.boundedByScreen = YES; | ||
| 208 | } | 219 | } |
| 209 | 220 | ||
| 210 | if (cart.sprite.position.y == (0-cart.sprite.boundingBox.size.height/2)) | 221 | if (cart.sprite.position.y == (0-cart.sprite.boundingBox.size.height/2)) |
| @@ -300,13 +311,6 @@ static GameModeInfo* info; | |||
| 300 | isGesturing = NO; | 311 | isGesturing = NO; |
| 301 | } | 312 | } |
| 302 | 313 | ||
| 303 | - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration | ||
| 304 | { | ||
| 305 | [super accelerometer:accelerometer didAccelerate:acceleration]; | ||
| 306 | |||
| 307 | expectedAngle = acceleration.y*M_PI_2; | ||
| 308 | } | ||
| 309 | |||
| 310 | - (int)cartShouldFall:(Cart *)m_cart | 314 | - (int)cartShouldFall:(Cart *)m_cart |
| 311 | { | 315 | { |
| 312 | int bottom = 0-m_cart.sprite.boundingBox.size.height/2; | 316 | int bottom = 0-m_cart.sprite.boundingBox.size.height/2; |
| @@ -416,6 +420,7 @@ static GameModeInfo* info; | |||
| 416 | object.delegate = self; | 420 | object.delegate = self; |
| 417 | object.sprite.position = ccp(objectX, 360); | 421 | object.sprite.position = ccp(objectX, 360); |
| 418 | object.sprite.scale = 1; | 422 | object.sprite.scale = 1; |
| 423 | object.fellDuringWave = waterTick > 0; | ||
| 419 | [self addChild:object.sprite]; | 424 | [self addChild:object.sprite]; |
| 420 | 425 | ||
| 421 | [objects addObject:object]; | 426 | [objects addObject:object]; |
| @@ -450,6 +455,7 @@ static GameModeInfo* info; | |||
| 450 | object.delegate = self; | 455 | object.delegate = self; |
| 451 | object.sprite.position = ccp(objectX, 360); | 456 | object.sprite.position = ccp(objectX, 360); |
| 452 | object.sprite.scale = 1; | 457 | object.sprite.scale = 1; |
| 458 | object.fellDuringWave = waterTick > 0; | ||
| 453 | [self addChild:object.sprite]; | 459 | [self addChild:object.sprite]; |
| 454 | 460 | ||
| 455 | [objects addObject:object]; | 461 | [objects addObject:object]; |
| @@ -486,6 +492,7 @@ static GameModeInfo* info; | |||
| 486 | object.delegate = self; | 492 | object.delegate = self; |
| 487 | object.sprite.position = ccp(objectX, 360); | 493 | object.sprite.position = ccp(objectX, 360); |
| 488 | object.sprite.scale = 1; | 494 | object.sprite.scale = 1; |
| 495 | object.fellDuringWave = waterTick > 0; | ||
| 489 | [self addChild:object.sprite]; | 496 | [self addChild:object.sprite]; |
| 490 | 497 | ||
| 491 | [objects addObject:object]; | 498 | [objects addObject:object]; |
| @@ -528,6 +535,13 @@ static GameModeInfo* info; | |||
| 528 | } | 535 | } |
| 529 | } | 536 | } |
| 530 | 537 | ||
| 538 | - (void)setPitch:(double)m_pitch | ||
| 539 | { | ||
| 540 | [super setPitch:m_pitch]; | ||
| 541 | |||
| 542 | expectedAngle = pitch*M_PI_2; | ||
| 543 | } | ||
| 544 | |||
| 531 | @end | 545 | @end |
| 532 | 546 | ||
| 533 | @implementation LedgeFactory | 547 | @implementation LedgeFactory |
| diff --git a/Resources/Info.plist b/Resources/Info.plist index 4a70f3c..de7139a 100755 --- a/Resources/Info.plist +++ b/Resources/Info.plist | |||
| @@ -46,7 +46,9 @@ | |||
| 46 | <key>UIStatusBarHidden</key> | 46 | <key>UIStatusBarHidden</key> |
| 47 | <true/> | 47 | <true/> |
| 48 | <key>UISupportedInterfaceOrientations</key> | 48 | <key>UISupportedInterfaceOrientations</key> |
| 49 | <array/> | 49 | <array> |
| 50 | <string>UIInterfaceOrientationLandscapeRight</string> | ||
| 51 | </array> | ||
| 50 | <key>UTExportedTypeDeclarations</key> | 52 | <key>UTExportedTypeDeclarations</key> |
| 51 | <array/> | 53 | <array/> |
| 52 | <key>UTImportedTypeDeclarations</key> | 54 | <key>UTImportedTypeDeclarations</key> |
