diff options
34 files changed, 1153 insertions, 113 deletions
| diff --git a/Cart Collect.xcodeproj/project.pbxproj b/Cartographic.xcodeproj/project.pbxproj index 5ecda95..58ab09b 100755 --- a/Cart Collect.xcodeproj/project.pbxproj +++ b/Cartographic.xcodeproj/project.pbxproj | |||
| @@ -101,10 +101,22 @@ | |||
| 101 | 6C0C140E13F1C3EC003A31B2 /* ValuableObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C0C140D13F1C3EC003A31B2 /* ValuableObject.m */; }; | 101 | 6C0C140E13F1C3EC003A31B2 /* ValuableObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C0C140D13F1C3EC003A31B2 /* ValuableObject.m */; }; |
| 102 | 6C0C141113F2099B003A31B2 /* Cart.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C0C141013F2099B003A31B2 /* Cart.m */; }; | 102 | 6C0C141113F2099B003A31B2 /* Cart.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C0C141013F2099B003A31B2 /* Cart.m */; }; |
| 103 | 6C0C141413F20E98003A31B2 /* GameMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C0C141313F20E98003A31B2 /* GameMode.m */; }; | 103 | 6C0C141413F20E98003A31B2 /* GameMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C0C141313F20E98003A31B2 /* GameMode.m */; }; |
| 104 | 6C18C3CA1402AD9C0005AA4C /* UIImage+ColorMasking.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C18C3C91402AD9C0005AA4C /* UIImage+ColorMasking.m */; }; | ||
| 105 | 6C18C3D214033DC50005AA4C /* CocosOverlayScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C18C3CD14033DC10005AA4C /* CocosOverlayScrollView.m */; }; | ||
| 106 | 6C18C3D314033DC60005AA4C /* NMPanelMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C18C3CF14033DC30005AA4C /* NMPanelMenu.m */; }; | ||
| 107 | 6C18C3D414033DC60005AA4C /* TouchDelegatingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C18C3D114033DC40005AA4C /* TouchDelegatingView.m */; }; | ||
| 108 | 6C19F15B14018EE900F9CCD3 /* libTestFlight.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C19F15A14018EE900F9CCD3 /* libTestFlight.a */; }; | ||
| 109 | 6C19F1631401917500F9CCD3 /* feedback.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C19F1621401917500F9CCD3 /* feedback.png */; }; | ||
| 110 | 6C19F1651401917900F9CCD3 /* feedback2.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C19F1641401917900F9CCD3 /* feedback2.png */; }; | ||
| 104 | 6C29041013EAEB590032DA0F /* TutorialBubble.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C29040F13EAEB590032DA0F /* TutorialBubble.m */; }; | 111 | 6C29041013EAEB590032DA0F /* TutorialBubble.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C29040F13EAEB590032DA0F /* TutorialBubble.m */; }; |
| 105 | 6C29041213EAEC8A0032DA0F /* framestuff.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C29041113EAEC8A0032DA0F /* framestuff.png */; }; | 112 | 6C29041213EAEC8A0032DA0F /* framestuff.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C29041113EAEC8A0032DA0F /* framestuff.png */; }; |
| 106 | 6C39CFE013FC2708002B21AF /* tutorial.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFDF13FC2708002B21AF /* tutorial.png */; }; | 113 | 6C39CFE013FC2708002B21AF /* tutorial.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFDF13FC2708002B21AF /* tutorial.png */; }; |
| 107 | 6C39CFE213FC2713002B21AF /* tutorial2.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFE113FC2713002B21AF /* tutorial2.png */; }; | 114 | 6C39CFE213FC2713002B21AF /* tutorial2.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFE113FC2713002B21AF /* tutorial2.png */; }; |
| 115 | 6C39CFF313FD4F8B002B21AF /* GameModeSelection.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C39CFF213FD4F89002B21AF /* GameModeSelection.m */; }; | ||
| 116 | 6C39CFF513FD5526002B21AF /* paintdaubs.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFF413FD5526002B21AF /* paintdaubs.png */; }; | ||
| 117 | 6C39CFF813FD7638002B21AF /* GameModeSelectionLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C39CFF713FD7637002B21AF /* GameModeSelectionLayer.m */; }; | ||
| 118 | 6C39D00813FD9037002B21AF /* florence.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39D00713FD9037002B21AF /* florence.png */; }; | ||
| 119 | 6C39D01213FD9945002B21AF /* paris.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39D01113FD9945002B21AF /* paris.png */; }; | ||
| 108 | 6C39CFE513FC4635002B21AF /* JumpGameMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C39CFE413FC4635002B21AF /* JumpGameMode.m */; }; | 120 | 6C39CFE513FC4635002B21AF /* JumpGameMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C39CFE413FC4635002B21AF /* JumpGameMode.m */; }; |
| 109 | 6C39CFE713FC46CD002B21AF /* water.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFE613FC46CD002B21AF /* water.png */; }; | 121 | 6C39CFE713FC46CD002B21AF /* water.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFE613FC46CD002B21AF /* water.png */; }; |
| 110 | 6C39CFE913FC8AC4002B21AF /* jump2.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFE813FC8AC4002B21AF /* jump2.png */; }; | 122 | 6C39CFE913FC8AC4002B21AF /* jump2.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFE813FC8AC4002B21AF /* jump2.png */; }; |
| @@ -318,7 +330,7 @@ | |||
| 318 | /* End PBXContainerItemProxy section */ | 330 | /* End PBXContainerItemProxy section */ |
| 319 | 331 | ||
| 320 | /* Begin PBXFileReference section */ | 332 | /* Begin PBXFileReference section */ |
| 321 | 1D6058910D05DD3D006BFB54 /* Cart Collect.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Cart Collect.app"; sourceTree = BUILT_PRODUCTS_DIR; }; | 333 | 1D6058910D05DD3D006BFB54 /* Cartographic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Cartographic.app; sourceTree = BUILT_PRODUCTS_DIR; }; |
| 322 | 1F3B9A2C0EF2145700286867 /* Cart_CollectAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Cart_CollectAppDelegate.h; path = Classes/Cart_CollectAppDelegate.h; sourceTree = SOURCE_ROOT; }; | 334 | 1F3B9A2C0EF2145700286867 /* Cart_CollectAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Cart_CollectAppDelegate.h; path = Classes/Cart_CollectAppDelegate.h; sourceTree = SOURCE_ROOT; }; |
| 323 | 1F3B9A820EF2151B00286867 /* Cart_Collect_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cart_Collect_Prefix.pch; sourceTree = SOURCE_ROOT; }; | 335 | 1F3B9A820EF2151B00286867 /* Cart_Collect_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cart_Collect_Prefix.pch; sourceTree = SOURCE_ROOT; }; |
| 324 | 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; | 336 | 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; |
| @@ -410,17 +422,37 @@ | |||
| 410 | 6C0C141013F2099B003A31B2 /* Cart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Cart.m; sourceTree = "<group>"; }; | 422 | 6C0C141013F2099B003A31B2 /* Cart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Cart.m; sourceTree = "<group>"; }; |
| 411 | 6C0C141213F20E98003A31B2 /* GameMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameMode.h; sourceTree = "<group>"; }; | 423 | 6C0C141213F20E98003A31B2 /* GameMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameMode.h; sourceTree = "<group>"; }; |
| 412 | 6C0C141313F20E98003A31B2 /* GameMode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GameMode.m; sourceTree = "<group>"; }; | 424 | 6C0C141313F20E98003A31B2 /* GameMode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GameMode.m; sourceTree = "<group>"; }; |
| 425 | 6C18C3C81402AD9C0005AA4C /* UIImage+ColorMasking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+ColorMasking.h"; sourceTree = "<group>"; }; | ||
| 426 | 6C18C3C91402AD9C0005AA4C /* UIImage+ColorMasking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+ColorMasking.m"; sourceTree = "<group>"; }; | ||
| 427 | 6C18C3CC14033DBF0005AA4C /* CocosOverlayScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CocosOverlayScrollView.h; sourceTree = "<group>"; }; | ||
| 428 | 6C18C3CD14033DC10005AA4C /* CocosOverlayScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CocosOverlayScrollView.m; sourceTree = "<group>"; }; | ||
| 429 | 6C18C3CE14033DC20005AA4C /* NMPanelMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMPanelMenu.h; sourceTree = "<group>"; }; | ||
| 430 | 6C18C3CF14033DC30005AA4C /* NMPanelMenu.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMPanelMenu.m; sourceTree = "<group>"; }; | ||
| 431 | 6C18C3D014033DC40005AA4C /* TouchDelegatingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TouchDelegatingView.h; sourceTree = "<group>"; }; | ||
| 432 | 6C18C3D114033DC40005AA4C /* TouchDelegatingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TouchDelegatingView.m; sourceTree = "<group>"; }; | ||
| 433 | 6C19F15A14018EE900F9CCD3 /* libTestFlight.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libTestFlight.a; sourceTree = "<group>"; }; | ||
| 434 | 6C19F15D14018FDF00F9CCD3 /* TestFlight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestFlight.h; sourceTree = "<group>"; }; | ||
| 435 | 6C19F1621401917500F9CCD3 /* feedback.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = feedback.png; sourceTree = "<group>"; }; | ||
| 436 | 6C19F1641401917900F9CCD3 /* feedback2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = feedback2.png; sourceTree = "<group>"; }; | ||
| 413 | 6C29040E13EAEB590032DA0F /* TutorialBubble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TutorialBubble.h; sourceTree = "<group>"; }; | 437 | 6C29040E13EAEB590032DA0F /* TutorialBubble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TutorialBubble.h; sourceTree = "<group>"; }; |
| 414 | 6C29040F13EAEB590032DA0F /* TutorialBubble.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TutorialBubble.m; sourceTree = "<group>"; }; | 438 | 6C29040F13EAEB590032DA0F /* TutorialBubble.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TutorialBubble.m; sourceTree = "<group>"; }; |
| 415 | 6C29041113EAEC8A0032DA0F /* framestuff.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = framestuff.png; sourceTree = "<group>"; }; | 439 | 6C29041113EAEC8A0032DA0F /* framestuff.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = framestuff.png; sourceTree = "<group>"; }; |
| 416 | 6C39CFDF13FC2708002B21AF /* tutorial.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial.png; sourceTree = "<group>"; }; | 440 | 6C39CFDF13FC2708002B21AF /* tutorial.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial.png; sourceTree = "<group>"; }; |
| 417 | 6C39CFE113FC2713002B21AF /* tutorial2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial2.png; sourceTree = "<group>"; }; | 441 | 6C39CFE113FC2713002B21AF /* tutorial2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial2.png; sourceTree = "<group>"; }; |
| 442 | 6C39CFF113FD4F87002B21AF /* GameModeSelection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameModeSelection.h; sourceTree = "<group>"; }; | ||
| 443 | 6C39CFF213FD4F89002B21AF /* GameModeSelection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GameModeSelection.m; sourceTree = "<group>"; }; | ||
| 444 | 6C39CFF413FD5526002B21AF /* paintdaubs.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = paintdaubs.png; sourceTree = "<group>"; }; | ||
| 445 | 6C39CFF613FD7636002B21AF /* GameModeSelectionLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameModeSelectionLayer.h; sourceTree = "<group>"; }; | ||
| 446 | 6C39CFF713FD7637002B21AF /* GameModeSelectionLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GameModeSelectionLayer.m; sourceTree = "<group>"; }; | ||
| 447 | 6C39D00713FD9037002B21AF /* florence.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = florence.png; sourceTree = "<group>"; }; | ||
| 448 | 6C39D01113FD9945002B21AF /* paris.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = paris.png; sourceTree = "<group>"; }; | ||
| 418 | 6C39CFE313FC4635002B21AF /* JumpGameMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JumpGameMode.h; sourceTree = "<group>"; }; | 449 | 6C39CFE313FC4635002B21AF /* JumpGameMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JumpGameMode.h; sourceTree = "<group>"; }; |
| 419 | 6C39CFE413FC4635002B21AF /* JumpGameMode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JumpGameMode.m; sourceTree = "<group>"; }; | 450 | 6C39CFE413FC4635002B21AF /* JumpGameMode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JumpGameMode.m; sourceTree = "<group>"; }; |
| 420 | 6C39CFE613FC46CD002B21AF /* water.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = water.png; sourceTree = "<group>"; }; | 451 | 6C39CFE613FC46CD002B21AF /* water.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = water.png; sourceTree = "<group>"; }; |
| 421 | 6C39CFE813FC8AC4002B21AF /* jump2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = jump2.png; sourceTree = "<group>"; }; | 452 | 6C39CFE813FC8AC4002B21AF /* jump2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = jump2.png; sourceTree = "<group>"; }; |
| 422 | 6C39CFEA13FC8ACA002B21AF /* jump.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = jump.png; sourceTree = "<group>"; }; | 453 | 6C39CFEA13FC8ACA002B21AF /* jump.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = jump.png; sourceTree = "<group>"; }; |
| 423 | 6C5179C513DF3839006F1F38 /* Morning1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Morning1.png; sourceTree = "<group>"; }; | 454 | 6C5179C513DF3839006F1F38 /* Morning1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Morning1.png; sourceTree = "<group>"; }; |
| 455 | 6CB532581403BA4F00780A5E /* GameModeSelectionDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameModeSelectionDelegate.h; sourceTree = "<group>"; }; | ||
| 424 | 6CC89DD813F2F4E6003704F7 /* Entitlements.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Entitlements.plist; sourceTree = "<group>"; }; | 456 | 6CC89DD813F2F4E6003704F7 /* Entitlements.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Entitlements.plist; sourceTree = "<group>"; }; |
| 425 | 6CC89DDD13F31413003704F7 /* TutorialMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TutorialMode.h; sourceTree = "<group>"; }; | 457 | 6CC89DDD13F31413003704F7 /* TutorialMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TutorialMode.h; sourceTree = "<group>"; }; |
| 426 | 6CC89DDE13F31413003704F7 /* TutorialMode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TutorialMode.m; sourceTree = "<group>"; }; | 458 | 6CC89DDE13F31413003704F7 /* TutorialMode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TutorialMode.m; sourceTree = "<group>"; }; |
| @@ -631,6 +663,7 @@ | |||
| 631 | 506EDBA5102F4C9F00A389B3 /* AVFoundation.framework in Frameworks */, | 663 | 506EDBA5102F4C9F00A389B3 /* AVFoundation.framework in Frameworks */, |
| 632 | 506EE1A91030508200A389B3 /* libcocos2d libraries.a in Frameworks */, | 664 | 506EE1A91030508200A389B3 /* libcocos2d libraries.a in Frameworks */, |
| 633 | 3F8395D113D746200059AEE8 /* libsqlite3.0.dylib in Frameworks */, | 665 | 3F8395D113D746200059AEE8 /* libsqlite3.0.dylib in Frameworks */, |
| 666 | 6C19F15B14018EE900F9CCD3 /* libTestFlight.a in Frameworks */, | ||
| 634 | ); | 667 | ); |
| 635 | runOnlyForDeploymentPostprocessing = 0; | 668 | runOnlyForDeploymentPostprocessing = 0; |
| 636 | }; | 669 | }; |
| @@ -654,7 +687,7 @@ | |||
| 654 | 19C28FACFE9D520D11CA2CBB /* Products */ = { | 687 | 19C28FACFE9D520D11CA2CBB /* Products */ = { |
| 655 | isa = PBXGroup; | 688 | isa = PBXGroup; |
| 656 | children = ( | 689 | children = ( |
| 657 | 1D6058910D05DD3D006BFB54 /* Cart Collect.app */, | 690 | 1D6058910D05DD3D006BFB54 /* Cartographic.app */, |
| 658 | 506EE05E10304ED200A389B3 /* libcocos2d libraries.a */, | 691 | 506EE05E10304ED200A389B3 /* libcocos2d libraries.a */, |
| 659 | ); | 692 | ); |
| 660 | name = Products; | 693 | name = Products; |
| @@ -665,7 +698,7 @@ | |||
| 665 | children = ( | 698 | children = ( |
| 666 | 504DFC8A10AF177C006D82FE /* LICENSE.cocos2d */, | 699 | 504DFC8A10AF177C006D82FE /* LICENSE.cocos2d */, |
| 667 | 504DFC8B10AF177C006D82FE /* LICENSE.cocosdenshion */, | 700 | 504DFC8B10AF177C006D82FE /* LICENSE.cocosdenshion */, |
| 668 | 506EDAA3102F461B00A389B3 /* cocos2d Sources */, | 701 | 506EDAA3102F461B00A389B3 /* Libraries */, |
| 669 | 2D500B1D0D5A766B00DBA0E3 /* Classes */, | 702 | 2D500B1D0D5A766B00DBA0E3 /* Classes */, |
| 670 | 29B97315FDCFA39411CA2CEA /* Other Sources */, | 703 | 29B97315FDCFA39411CA2CEA /* Other Sources */, |
| 671 | 50F4144210692EE7002A0D5E /* Resources */, | 704 | 50F4144210692EE7002A0D5E /* Resources */, |
| @@ -687,6 +720,7 @@ | |||
| 687 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = { | 720 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = { |
| 688 | isa = PBXGroup; | 721 | isa = PBXGroup; |
| 689 | children = ( | 722 | children = ( |
| 723 | 6C19F15A14018EE900F9CCD3 /* libTestFlight.a */, | ||
| 690 | 3F8395D013D746200059AEE8 /* libsqlite3.0.dylib */, | 724 | 3F8395D013D746200059AEE8 /* libsqlite3.0.dylib */, |
| 691 | DCCBF1B60F6022AE0040855A /* CoreGraphics.framework */, | 725 | DCCBF1B60F6022AE0040855A /* CoreGraphics.framework */, |
| 692 | DCCBF1B80F6022AE0040855A /* Foundation.framework */, | 726 | DCCBF1B80F6022AE0040855A /* Foundation.framework */, |
| @@ -704,6 +738,7 @@ | |||
| 704 | 2D500B1D0D5A766B00DBA0E3 /* Classes */ = { | 738 | 2D500B1D0D5A766B00DBA0E3 /* Classes */ = { |
| 705 | isa = PBXGroup; | 739 | isa = PBXGroup; |
| 706 | children = ( | 740 | children = ( |
| 741 | 6CB532561403492E00780A5E /* Selection Screen */, | ||
| 707 | 6C0C141513F211C7003A31B2 /* Game Modes */, | 742 | 6C0C141513F211C7003A31B2 /* Game Modes */, |
| 708 | 6C5887E313EE3ED900B5A80A /* Items */, | 743 | 6C5887E313EE3ED900B5A80A /* Items */, |
| 709 | E0F81035120A173C005866B8 /* GameConfig.h */, | 744 | E0F81035120A173C005866B8 /* GameConfig.h */, |
| @@ -728,6 +763,7 @@ | |||
| 728 | 3F6C7F4C13D647AF00C038FE /* Backgrounds */ = { | 763 | 3F6C7F4C13D647AF00C038FE /* Backgrounds */ = { |
| 729 | isa = PBXGroup; | 764 | isa = PBXGroup; |
| 730 | children = ( | 765 | children = ( |
| 766 | 6C39CFF413FD5526002B21AF /* paintdaubs.png */, | ||
| 731 | 6C5179C513DF3839006F1F38 /* Morning1.png */, | 767 | 6C5179C513DF3839006F1F38 /* Morning1.png */, |
| 732 | 3F6C7F4A13D647A600C038FE /* GameOver.png */, | 768 | 3F6C7F4A13D647A600C038FE /* GameOver.png */, |
| 733 | 3F6C7F2313D63E6500C038FE /* SeaBeach.png */, | 769 | 3F6C7F2313D63E6500C038FE /* SeaBeach.png */, |
| @@ -775,6 +811,8 @@ | |||
| 775 | 3F7D0EC713D8E6B000B6CE14 /* Buttons */ = { | 811 | 3F7D0EC713D8E6B000B6CE14 /* Buttons */ = { |
| 776 | isa = PBXGroup; | 812 | isa = PBXGroup; |
| 777 | children = ( | 813 | children = ( |
| 814 | 6C19F1641401917900F9CCD3 /* feedback2.png */, | ||
| 815 | 6C19F1621401917500F9CCD3 /* feedback.png */, | ||
| 778 | 6C39CFEA13FC8ACA002B21AF /* jump.png */, | 816 | 6C39CFEA13FC8ACA002B21AF /* jump.png */, |
| 779 | 6C39CFE813FC8AC4002B21AF /* jump2.png */, | 817 | 6C39CFE813FC8AC4002B21AF /* jump2.png */, |
| 780 | 6C39CFE113FC2713002B21AF /* tutorial2.png */, | 818 | 6C39CFE113FC2713002B21AF /* tutorial2.png */, |
| @@ -805,16 +843,17 @@ | |||
| 805 | path = libs/cocoslive; | 843 | path = libs/cocoslive; |
| 806 | sourceTree = "<group>"; | 844 | sourceTree = "<group>"; |
| 807 | }; | 845 | }; |
| 808 | 506EDAA3102F461B00A389B3 /* cocos2d Sources */ = { | 846 | 506EDAA3102F461B00A389B3 /* Libraries */ = { |
| 809 | isa = PBXGroup; | 847 | isa = PBXGroup; |
| 810 | children = ( | 848 | children = ( |
| 849 | 6C19F15D14018FDF00F9CCD3 /* TestFlight.h */, | ||
| 811 | E02BBB19126CC2F5006E46A2 /* cocos2d */, | 850 | E02BBB19126CC2F5006E46A2 /* cocos2d */, |
| 812 | 507ED67411C63903002ED3FC /* CocosDenshion */, | 851 | 507ED67411C63903002ED3FC /* CocosDenshion */, |
| 813 | 504DFC4110AF1557006D82FE /* cocoslive */, | 852 | 504DFC4110AF1557006D82FE /* cocoslive */, |
| 814 | 50F41306106926B2002A0D5E /* FontLabel */, | 853 | 50F41306106926B2002A0D5E /* FontLabel */, |
| 815 | E0ECA41F134E5F2B00E7A048 /* TouchJSON */, | 854 | E0ECA41F134E5F2B00E7A048 /* TouchJSON */, |
| 816 | ); | 855 | ); |
| 817 | name = "cocos2d Sources"; | 856 | name = Libraries; |
| 818 | sourceTree = "<group>"; | 857 | sourceTree = "<group>"; |
| 819 | }; | 858 | }; |
| 820 | 507ED67411C63903002ED3FC /* CocosDenshion */ = { | 859 | 507ED67411C63903002ED3FC /* CocosDenshion */ = { |
| @@ -856,6 +895,7 @@ | |||
| 856 | 50F4144210692EE7002A0D5E /* Resources */ = { | 895 | 50F4144210692EE7002A0D5E /* Resources */ = { |
| 857 | isa = PBXGroup; | 896 | isa = PBXGroup; |
| 858 | children = ( | 897 | children = ( |
| 898 | 6C39D00513FD901A002B21AF /* Icons */, | ||
| 859 | 3F7D0EC713D8E6B000B6CE14 /* Buttons */, | 899 | 3F7D0EC713D8E6B000B6CE14 /* Buttons */, |
| 860 | 3F8395B713D744420059AEE8 /* cartdata.sqlite3 */, | 900 | 3F8395B713D744420059AEE8 /* cartdata.sqlite3 */, |
| 861 | 3F6C7F5D13D648D300C038FE /* Fonts */, | 901 | 3F6C7F5D13D648D300C038FE /* Fonts */, |
| @@ -889,6 +929,15 @@ | |||
| 889 | name = "Game Modes"; | 929 | name = "Game Modes"; |
| 890 | sourceTree = "<group>"; | 930 | sourceTree = "<group>"; |
| 891 | }; | 931 | }; |
| 932 | 6C39D00513FD901A002B21AF /* Icons */ = { | ||
| 933 | isa = PBXGroup; | ||
| 934 | children = ( | ||
| 935 | 6C39D01113FD9945002B21AF /* paris.png */, | ||
| 936 | 6C39D00713FD9037002B21AF /* florence.png */, | ||
| 937 | ); | ||
| 938 | name = Icons; | ||
| 939 | sourceTree = "<group>"; | ||
| 940 | }; | ||
| 892 | 6C5887E313EE3ED900B5A80A /* Items */ = { | 941 | 6C5887E313EE3ED900B5A80A /* Items */ = { |
| 893 | isa = PBXGroup; | 942 | isa = PBXGroup; |
| 894 | children = ( | 943 | children = ( |
| @@ -911,6 +960,26 @@ | |||
| 911 | name = Items; | 960 | name = Items; |
| 912 | sourceTree = "<group>"; | 961 | sourceTree = "<group>"; |
| 913 | }; | 962 | }; |
| 963 | 6CB532561403492E00780A5E /* Selection Screen */ = { | ||
| 964 | isa = PBXGroup; | ||
| 965 | children = ( | ||
| 966 | 6C39CFF113FD4F87002B21AF /* GameModeSelection.h */, | ||
| 967 | 6C39CFF213FD4F89002B21AF /* GameModeSelection.m */, | ||
| 968 | 6C39CFF613FD7636002B21AF /* GameModeSelectionLayer.h */, | ||
| 969 | 6C39CFF713FD7637002B21AF /* GameModeSelectionLayer.m */, | ||
| 970 | 6C18C3C81402AD9C0005AA4C /* UIImage+ColorMasking.h */, | ||
| 971 | 6C18C3C91402AD9C0005AA4C /* UIImage+ColorMasking.m */, | ||
| 972 | 6C18C3CC14033DBF0005AA4C /* CocosOverlayScrollView.h */, | ||
| 973 | 6C18C3CD14033DC10005AA4C /* CocosOverlayScrollView.m */, | ||
| 974 | 6C18C3CE14033DC20005AA4C /* NMPanelMenu.h */, | ||
| 975 | 6C18C3CF14033DC30005AA4C /* NMPanelMenu.m */, | ||
| 976 | 6C18C3D014033DC40005AA4C /* TouchDelegatingView.h */, | ||
| 977 | 6C18C3D114033DC40005AA4C /* TouchDelegatingView.m */, | ||
| 978 | 6CB532581403BA4F00780A5E /* GameModeSelectionDelegate.h */, | ||
| 979 | ); | ||
| 980 | name = "Selection Screen"; | ||
| 981 | sourceTree = "<group>"; | ||
| 982 | }; | ||
| 914 | E02BBB19126CC2F5006E46A2 /* cocos2d */ = { | 983 | E02BBB19126CC2F5006E46A2 /* cocos2d */ = { |
| 915 | isa = PBXGroup; | 984 | isa = PBXGroup; |
| 916 | children = ( | 985 | children = ( |
| @@ -1271,9 +1340,9 @@ | |||
| 1271 | /* End PBXHeadersBuildPhase section */ | 1340 | /* End PBXHeadersBuildPhase section */ |
| 1272 | 1341 | ||
| 1273 | /* Begin PBXNativeTarget section */ | 1342 | /* Begin PBXNativeTarget section */ |
| 1274 | 1D6058900D05DD3D006BFB54 /* Cart Collect */ = { | 1343 | 1D6058900D05DD3D006BFB54 /* Cartographic */ = { |
| 1275 | isa = PBXNativeTarget; | 1344 | isa = PBXNativeTarget; |
| 1276 | buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Cart Collect" */; | 1345 | buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Cartographic" */; |
| 1277 | buildPhases = ( | 1346 | buildPhases = ( |
| 1278 | 1D60588D0D05DD3D006BFB54 /* Resources */, | 1347 | 1D60588D0D05DD3D006BFB54 /* Resources */, |
| 1279 | 1D60588E0D05DD3D006BFB54 /* Sources */, | 1348 | 1D60588E0D05DD3D006BFB54 /* Sources */, |
| @@ -1285,9 +1354,9 @@ | |||
| 1285 | 6C263DE113F6F6E800116746 /* PBXTargetDependency */, | 1354 | 6C263DE113F6F6E800116746 /* PBXTargetDependency */, |
| 1286 | 506EE1A81030507B00A389B3 /* PBXTargetDependency */, | 1355 | 506EE1A81030507B00A389B3 /* PBXTargetDependency */, |
| 1287 | ); | 1356 | ); |
| 1288 | name = "Cart Collect"; | 1357 | name = Cartographic; |
| 1289 | productName = "Cart Collect"; | 1358 | productName = "Cart Collect"; |
| 1290 | productReference = 1D6058910D05DD3D006BFB54 /* Cart Collect.app */; | 1359 | productReference = 1D6058910D05DD3D006BFB54 /* Cartographic.app */; |
| 1291 | productType = "com.apple.product-type.application"; | 1360 | productType = "com.apple.product-type.application"; |
| 1292 | }; | 1361 | }; |
| 1293 | 506EE05D10304ED200A389B3 /* cocos2d libraries */ = { | 1362 | 506EE05D10304ED200A389B3 /* cocos2d libraries */ = { |
| @@ -1315,7 +1384,7 @@ | |||
| 1315 | attributes = { | 1384 | attributes = { |
| 1316 | LastUpgradeCheck = 0410; | 1385 | LastUpgradeCheck = 0410; |
| 1317 | }; | 1386 | }; |
| 1318 | buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Cart Collect" */; | 1387 | buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Cartographic" */; |
| 1319 | compatibilityVersion = "Xcode 3.2"; | 1388 | compatibilityVersion = "Xcode 3.2"; |
| 1320 | developmentRegion = English; | 1389 | developmentRegion = English; |
| 1321 | hasScannedForEncodings = 1; | 1390 | hasScannedForEncodings = 1; |
| @@ -1329,7 +1398,7 @@ | |||
| 1329 | projectDirPath = ""; | 1398 | projectDirPath = ""; |
| 1330 | projectRoot = ""; | 1399 | projectRoot = ""; |
| 1331 | targets = ( | 1400 | targets = ( |
| 1332 | 1D6058900D05DD3D006BFB54 /* Cart Collect */, | 1401 | 1D6058900D05DD3D006BFB54 /* Cartographic */, |
| 1333 | 506EE05D10304ED200A389B3 /* cocos2d libraries */, | 1402 | 506EE05D10304ED200A389B3 /* cocos2d libraries */, |
| 1334 | 6C263DDB13F6F4A000116746 /* Versioning */, | 1403 | 6C263DDB13F6F4A000116746 /* Versioning */, |
| 1335 | ); | 1404 | ); |
| @@ -1377,6 +1446,11 @@ | |||
| 1377 | 6CC89DD913F2F4E6003704F7 /* Entitlements.plist in Resources */, | 1446 | 6CC89DD913F2F4E6003704F7 /* Entitlements.plist in Resources */, |
| 1378 | 6C39CFE013FC2708002B21AF /* tutorial.png in Resources */, | 1447 | 6C39CFE013FC2708002B21AF /* tutorial.png in Resources */, |
| 1379 | 6C39CFE213FC2713002B21AF /* tutorial2.png in Resources */, | 1448 | 6C39CFE213FC2713002B21AF /* tutorial2.png in Resources */, |
| 1449 | 6C39CFF513FD5526002B21AF /* paintdaubs.png in Resources */, | ||
| 1450 | 6C39D00813FD9037002B21AF /* florence.png in Resources */, | ||
| 1451 | 6C39D01213FD9945002B21AF /* paris.png in Resources */, | ||
| 1452 | 6C19F1631401917500F9CCD3 /* feedback.png in Resources */, | ||
| 1453 | 6C19F1651401917900F9CCD3 /* feedback2.png in Resources */, | ||
| 1380 | 6C39CFE713FC46CD002B21AF /* water.png in Resources */, | 1454 | 6C39CFE713FC46CD002B21AF /* water.png in Resources */, |
| 1381 | 6C39CFE913FC8AC4002B21AF /* jump2.png in Resources */, | 1455 | 6C39CFE913FC8AC4002B21AF /* jump2.png in Resources */, |
| 1382 | 6C39CFEB13FC8ACA002B21AF /* jump.png in Resources */, | 1456 | 6C39CFEB13FC8ACA002B21AF /* jump.png in Resources */, |
| @@ -1424,6 +1498,12 @@ | |||
| 1424 | 6C0C141113F2099B003A31B2 /* Cart.m in Sources */, | 1498 | 6C0C141113F2099B003A31B2 /* Cart.m in Sources */, |
| 1425 | 6C0C141413F20E98003A31B2 /* GameMode.m in Sources */, | 1499 | 6C0C141413F20E98003A31B2 /* GameMode.m in Sources */, |
| 1426 | 6CC89DDF13F31413003704F7 /* TutorialMode.m in Sources */, | 1500 | 6CC89DDF13F31413003704F7 /* TutorialMode.m in Sources */, |
| 1501 | 6C39CFF313FD4F8B002B21AF /* GameModeSelection.m in Sources */, | ||
| 1502 | 6C39CFF813FD7638002B21AF /* GameModeSelectionLayer.m in Sources */, | ||
| 1503 | 6C18C3CA1402AD9C0005AA4C /* UIImage+ColorMasking.m in Sources */, | ||
| 1504 | 6C18C3D214033DC50005AA4C /* CocosOverlayScrollView.m in Sources */, | ||
| 1505 | 6C18C3D314033DC60005AA4C /* NMPanelMenu.m in Sources */, | ||
| 1506 | 6C18C3D414033DC60005AA4C /* TouchDelegatingView.m in Sources */, | ||
| 1427 | 6C39CFE513FC4635002B21AF /* JumpGameMode.m in Sources */, | 1507 | 6C39CFE513FC4635002B21AF /* JumpGameMode.m in Sources */, |
| 1428 | ); | 1508 | ); |
| 1429 | runOnlyForDeploymentPostprocessing = 0; | 1509 | runOnlyForDeploymentPostprocessing = 0; |
| @@ -1553,6 +1633,7 @@ | |||
| 1553 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | 1633 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; |
| 1554 | COPY_PHASE_STRIP = NO; | 1634 | COPY_PHASE_STRIP = NO; |
| 1555 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | 1635 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
| 1636 | GCC_C_LANGUAGE_STANDARD = c99; | ||
| 1556 | GCC_DYNAMIC_NO_PIC = NO; | 1637 | GCC_DYNAMIC_NO_PIC = NO; |
| 1557 | GCC_OPTIMIZATION_LEVEL = 0; | 1638 | GCC_OPTIMIZATION_LEVEL = 0; |
| 1558 | GCC_PRECOMPILE_PREFIX_HEADER = YES; | 1639 | GCC_PRECOMPILE_PREFIX_HEADER = YES; |
| @@ -1562,11 +1643,15 @@ | |||
| 1562 | INFOPLIST_FILE = Resources/Info.plist; | 1643 | INFOPLIST_FILE = Resources/Info.plist; |
| 1563 | INFOPLIST_PREFIX_HEADER = Versioning.h; | 1644 | INFOPLIST_PREFIX_HEADER = Versioning.h; |
| 1564 | INFOPLIST_PREPROCESS = YES; | 1645 | INFOPLIST_PREPROCESS = YES; |
| 1646 | LIBRARY_SEARCH_PATHS = ( | ||
| 1647 | "$(inherited)", | ||
| 1648 | "\"$(SRCROOT)\"", | ||
| 1649 | ); | ||
| 1565 | OTHER_LDFLAGS = ( | 1650 | OTHER_LDFLAGS = ( |
| 1566 | "-all_load", | 1651 | "-all_load", |
| 1567 | "-ObjC", | 1652 | "-ObjC", |
| 1568 | ); | 1653 | ); |
| 1569 | PRODUCT_NAME = "Cart Collect"; | 1654 | PRODUCT_NAME = Cartographic; |
| 1570 | TARGETED_DEVICE_FAMILY = 1; | 1655 | TARGETED_DEVICE_FAMILY = 1; |
| 1571 | WARNING_CFLAGS = "-Wall"; | 1656 | WARNING_CFLAGS = "-Wall"; |
| 1572 | }; | 1657 | }; |
| @@ -1581,6 +1666,7 @@ | |||
| 1581 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | 1666 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; |
| 1582 | COPY_PHASE_STRIP = YES; | 1667 | COPY_PHASE_STRIP = YES; |
| 1583 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | 1668 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
| 1669 | GCC_C_LANGUAGE_STANDARD = c99; | ||
| 1584 | GCC_PRECOMPILE_PREFIX_HEADER = YES; | 1670 | GCC_PRECOMPILE_PREFIX_HEADER = YES; |
| 1585 | GCC_PREFIX_HEADER = Cart_Collect_Prefix.pch; | 1671 | GCC_PREFIX_HEADER = Cart_Collect_Prefix.pch; |
| 1586 | GCC_TREAT_WARNINGS_AS_ERRORS = NO; | 1672 | GCC_TREAT_WARNINGS_AS_ERRORS = NO; |
| @@ -1588,11 +1674,15 @@ | |||
| 1588 | INFOPLIST_FILE = Resources/Info.plist; | 1674 | INFOPLIST_FILE = Resources/Info.plist; |
| 1589 | INFOPLIST_PREFIX_HEADER = Versioning.h; | 1675 | INFOPLIST_PREFIX_HEADER = Versioning.h; |
| 1590 | INFOPLIST_PREPROCESS = YES; | 1676 | INFOPLIST_PREPROCESS = YES; |
| 1677 | LIBRARY_SEARCH_PATHS = ( | ||
| 1678 | "$(inherited)", | ||
| 1679 | "\"$(SRCROOT)\"", | ||
| 1680 | ); | ||
| 1591 | OTHER_LDFLAGS = ( | 1681 | OTHER_LDFLAGS = ( |
| 1592 | "-all_load", | 1682 | "-all_load", |
| 1593 | "-ObjC", | 1683 | "-ObjC", |
| 1594 | ); | 1684 | ); |
| 1595 | PRODUCT_NAME = "Cart Collect"; | 1685 | PRODUCT_NAME = Cartographic; |
| 1596 | TARGETED_DEVICE_FAMILY = 1; | 1686 | TARGETED_DEVICE_FAMILY = 1; |
| 1597 | WARNING_CFLAGS = "-Wall"; | 1687 | WARNING_CFLAGS = "-Wall"; |
| 1598 | }; | 1688 | }; |
| @@ -1635,6 +1725,92 @@ | |||
| 1635 | }; | 1725 | }; |
| 1636 | name = Release; | 1726 | name = Release; |
| 1637 | }; | 1727 | }; |
| 1728 | 6C19F16C1401944500F9CCD3 /* Ad-Hoc */ = { | ||
| 1729 | isa = XCBuildConfiguration; | ||
| 1730 | buildSettings = { | ||
| 1731 | ALWAYS_SEARCH_USER_PATHS = NO; | ||
| 1732 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; | ||
| 1733 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | ||
| 1734 | COPY_PHASE_STRIP = NO; | ||
| 1735 | GCC_C_LANGUAGE_STANDARD = c99; | ||
| 1736 | GCC_PREPROCESSOR_DEFINITIONS = ( | ||
| 1737 | NS_BLOCK_ASSERTIONS, | ||
| 1738 | NDEBUG, | ||
| 1739 | ); | ||
| 1740 | "GCC_THUMB_SUPPORT[arch=armv6]" = NO; | ||
| 1741 | "GCC_THUMB_SUPPORT[arch=armv7]" = YES; | ||
| 1742 | GCC_UNROLL_LOOPS = YES; | ||
| 1743 | GCC_VERSION = com.apple.compilers.llvmgcc42; | ||
| 1744 | GCC_WARN_ABOUT_RETURN_TYPE = YES; | ||
| 1745 | GCC_WARN_UNUSED_VARIABLE = YES; | ||
| 1746 | IPHONEOS_DEPLOYMENT_TARGET = 3.0; | ||
| 1747 | SDKROOT = iphoneos; | ||
| 1748 | STRIP_INSTALLED_PRODUCT = NO; | ||
| 1749 | TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 1750 | }; | ||
| 1751 | name = "Ad-Hoc"; | ||
| 1752 | }; | ||
| 1753 | 6C19F16D1401944500F9CCD3 /* Ad-Hoc */ = { | ||
| 1754 | isa = XCBuildConfiguration; | ||
| 1755 | buildSettings = { | ||
| 1756 | ALTERNATE_MODE = Entitlements.plist; | ||
| 1757 | ALWAYS_SEARCH_USER_PATHS = YES; | ||
| 1758 | CODE_SIGN_IDENTITY = ""; | ||
| 1759 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | ||
| 1760 | COPY_PHASE_STRIP = NO; | ||
| 1761 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | ||
| 1762 | GCC_PRECOMPILE_PREFIX_HEADER = YES; | ||
| 1763 | GCC_PREFIX_HEADER = Cart_Collect_Prefix.pch; | ||
| 1764 | GCC_PREPROCESSOR_DEFINITIONS = ( | ||
| 1765 | ADHOC, | ||
| 1766 | NS_BLOCK_ASSERTIONS, | ||
| 1767 | NDEBUG, | ||
| 1768 | ); | ||
| 1769 | GCC_TREAT_WARNINGS_AS_ERRORS = NO; | ||
| 1770 | HEADER_SEARCH_PATHS = libs; | ||
| 1771 | INFOPLIST_FILE = Resources/Info.plist; | ||
| 1772 | INFOPLIST_PREFIX_HEADER = Versioning.h; | ||
| 1773 | INFOPLIST_PREPROCESS = YES; | ||
| 1774 | LIBRARY_SEARCH_PATHS = ( | ||
| 1775 | "$(inherited)", | ||
| 1776 | "\"$(SRCROOT)\"", | ||
| 1777 | ); | ||
| 1778 | OTHER_LDFLAGS = ( | ||
| 1779 | "-all_load", | ||
| 1780 | "-ObjC", | ||
| 1781 | ); | ||
| 1782 | PRODUCT_NAME = Cartographic; | ||
| 1783 | TARGETED_DEVICE_FAMILY = 1; | ||
| 1784 | WARNING_CFLAGS = "-Wall"; | ||
| 1785 | }; | ||
| 1786 | name = "Ad-Hoc"; | ||
| 1787 | }; | ||
| 1788 | 6C19F16E1401944500F9CCD3 /* Ad-Hoc */ = { | ||
| 1789 | isa = XCBuildConfiguration; | ||
| 1790 | buildSettings = { | ||
| 1791 | ALWAYS_SEARCH_USER_PATHS = YES; | ||
| 1792 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | ||
| 1793 | COPY_PHASE_STRIP = YES; | ||
| 1794 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | ||
| 1795 | GCC_PREPROCESSOR_DEFINITIONS = ""; | ||
| 1796 | GCC_TREAT_WARNINGS_AS_ERRORS = NO; | ||
| 1797 | HEADER_SEARCH_PATHS = ( | ||
| 1798 | libs/Chipmunk/include/chipmunk, | ||
| 1799 | libs, | ||
| 1800 | ); | ||
| 1801 | PRODUCT_NAME = "cocos2d libraries"; | ||
| 1802 | SKIP_INSTALL = YES; | ||
| 1803 | ZERO_LINK = NO; | ||
| 1804 | }; | ||
| 1805 | name = "Ad-Hoc"; | ||
| 1806 | }; | ||
| 1807 | 6C19F16F1401944500F9CCD3 /* Ad-Hoc */ = { | ||
| 1808 | isa = XCBuildConfiguration; | ||
| 1809 | buildSettings = { | ||
| 1810 | PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 1811 | }; | ||
| 1812 | name = "Ad-Hoc"; | ||
| 1813 | }; | ||
| 1638 | 6C263DDD13F6F4A000116746 /* Debug */ = { | 1814 | 6C263DDD13F6F4A000116746 /* Debug */ = { |
| 1639 | isa = XCBuildConfiguration; | 1815 | isa = XCBuildConfiguration; |
| 1640 | buildSettings = { | 1816 | buildSettings = { |
| @@ -1701,11 +1877,12 @@ | |||
| 1701 | /* End XCBuildConfiguration section */ | 1877 | /* End XCBuildConfiguration section */ |
| 1702 | 1878 | ||
| 1703 | /* Begin XCConfigurationList section */ | 1879 | /* Begin XCConfigurationList section */ |
| 1704 | 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Cart Collect" */ = { | 1880 | 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Cartographic" */ = { |
| 1705 | isa = XCConfigurationList; | 1881 | isa = XCConfigurationList; |
| 1706 | buildConfigurations = ( | 1882 | buildConfigurations = ( |
| 1707 | 1D6058940D05DD3E006BFB54 /* Debug */, | 1883 | 1D6058940D05DD3E006BFB54 /* Debug */, |
| 1708 | 1D6058950D05DD3E006BFB54 /* Release */, | 1884 | 1D6058950D05DD3E006BFB54 /* Release */, |
| 1885 | 6C19F16D1401944500F9CCD3 /* Ad-Hoc */, | ||
| 1709 | ); | 1886 | ); |
| 1710 | defaultConfigurationIsVisible = 0; | 1887 | defaultConfigurationIsVisible = 0; |
| 1711 | defaultConfigurationName = Release; | 1888 | defaultConfigurationName = Release; |
| @@ -1715,6 +1892,7 @@ | |||
| 1715 | buildConfigurations = ( | 1892 | buildConfigurations = ( |
| 1716 | 506EE05F10304ED500A389B3 /* Debug */, | 1893 | 506EE05F10304ED500A389B3 /* Debug */, |
| 1717 | 506EE06010304ED500A389B3 /* Release */, | 1894 | 506EE06010304ED500A389B3 /* Release */, |
| 1895 | 6C19F16E1401944500F9CCD3 /* Ad-Hoc */, | ||
| 1718 | ); | 1896 | ); |
| 1719 | defaultConfigurationIsVisible = 0; | 1897 | defaultConfigurationIsVisible = 0; |
| 1720 | defaultConfigurationName = Release; | 1898 | defaultConfigurationName = Release; |
| @@ -1724,15 +1902,17 @@ | |||
| 1724 | buildConfigurations = ( | 1902 | buildConfigurations = ( |
| 1725 | 6C263DDD13F6F4A000116746 /* Debug */, | 1903 | 6C263DDD13F6F4A000116746 /* Debug */, |
| 1726 | 6C263DDE13F6F4A000116746 /* Release */, | 1904 | 6C263DDE13F6F4A000116746 /* Release */, |
| 1905 | 6C19F16F1401944500F9CCD3 /* Ad-Hoc */, | ||
| 1727 | ); | 1906 | ); |
| 1728 | defaultConfigurationIsVisible = 0; | 1907 | defaultConfigurationIsVisible = 0; |
| 1729 | defaultConfigurationName = Release; | 1908 | defaultConfigurationName = Release; |
| 1730 | }; | 1909 | }; |
| 1731 | C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Cart Collect" */ = { | 1910 | C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Cartographic" */ = { |
| 1732 | isa = XCConfigurationList; | 1911 | isa = XCConfigurationList; |
| 1733 | buildConfigurations = ( | 1912 | buildConfigurations = ( |
| 1734 | C01FCF4F08A954540054247B /* Debug */, | 1913 | C01FCF4F08A954540054247B /* Debug */, |
| 1735 | C01FCF5008A954540054247B /* Release */, | 1914 | C01FCF5008A954540054247B /* Release */, |
| 1915 | 6C19F16C1401944500F9CCD3 /* Ad-Hoc */, | ||
| 1736 | ); | 1916 | ); |
| 1737 | defaultConfigurationIsVisible = 0; | 1917 | defaultConfigurationIsVisible = 0; |
| 1738 | defaultConfigurationName = Release; | 1918 | defaultConfigurationName = Release; |
| diff --git a/Cart Collect.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Cartographic.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 2f0e1ec..096867f 100755 --- a/Cart Collect.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Cartographic.xcodeproj/project.xcworkspace/contents.xcworkspacedata | |||
| @@ -2,6 +2,6 @@ | |||
| 2 | <Workspace | 2 | <Workspace |
| 3 | version = "1.0"> | 3 | version = "1.0"> |
| 4 | <FileRef | 4 | <FileRef |
| 5 | location = "self:Cart Collect.xcodeproj"> | 5 | location = "self:Cartographic.xcodeproj"> |
| 6 | </FileRef> | 6 | </FileRef> |
| 7 | </Workspace> | 7 | </Workspace> |
| diff --git a/Classes/Cart_CollectAppDelegate.m b/Classes/Cart_CollectAppDelegate.m index 158f660..ba9d60b 100755 --- a/Classes/Cart_CollectAppDelegate.m +++ b/Classes/Cart_CollectAppDelegate.m | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #import "GameMode.h" | 13 | #import "GameMode.h" |
| 14 | #import "RootViewController.h" | 14 | #import "RootViewController.h" |
| 15 | #import "MainMenuLayer.h" | 15 | #import "MainMenuLayer.h" |
| 16 | #import "TestFlight.h" | ||
| 16 | 17 | ||
| 17 | @implementation Cart_CollectAppDelegate | 18 | @implementation Cart_CollectAppDelegate |
| 18 | 19 | ||
| @@ -42,6 +43,9 @@ | |||
| 42 | 43 | ||
| 43 | - (void) applicationDidFinishLaunching:(UIApplication*)application | 44 | - (void) applicationDidFinishLaunching:(UIApplication*)application |
| 44 | { | 45 | { |
| 46 | // REMOVE THIS LINE FOR RELEASE BUILDS | ||
| 47 | [TestFlight takeOff:@"66a3925c85c93e7628c14d167ff6c1b7_MjM4MTEyMDExLTA4LTE3IDEzOjEyOjQ4Ljg2NDE2OQ"]; | ||
| 48 | |||
| 45 | [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; | 49 | [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; |
| 46 | 50 | ||
| 47 | NSMutableDictionary* registerDefaults = [NSMutableDictionary dictionaryWithObjectsAndKeys: | 51 | NSMutableDictionary* registerDefaults = [NSMutableDictionary dictionaryWithObjectsAndKeys: |
| @@ -138,6 +142,8 @@ | |||
| 138 | 142 | ||
| 139 | -(void) applicationDidEnterBackground:(UIApplication*)application { | 143 | -(void) applicationDidEnterBackground:(UIApplication*)application { |
| 140 | [[CCDirector sharedDirector] stopAnimation]; | 144 | [[CCDirector sharedDirector] stopAnimation]; |
| 145 | |||
| 146 | [[NSUserDefaults standardUserDefaults] synchronize]; | ||
| 141 | 147 | ||
| 142 | if ([[CCDirector sharedDirector] runningScene].tag == GAME_SCENE) | 148 | if ([[CCDirector sharedDirector] runningScene].tag == GAME_SCENE) |
| 143 | { | 149 | { |
| @@ -190,20 +196,48 @@ | |||
| 190 | { | 196 | { |
| 191 | NSString* databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName]; | 197 | NSString* databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName]; |
| 192 | [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil]; | 198 | [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil]; |
| 193 | //[fileManager release]; | ||
| 194 | 199 | ||
| 195 | [userDefaults setInteger:1 forKey:@"databaseVersion"]; | 200 | [userDefaults setInteger:2 forKey:@"databaseVersion"]; |
| 201 | } | ||
| 202 | |||
| 203 | if (sqlite3_open([databasePath UTF8String], &database) != SQLITE_OK) | ||
| 204 | { | ||
| 205 | NSLog(@"Failed to open database"); | ||
| 196 | } | 206 | } |
| 197 | 207 | ||
| 208 | // Database migrations! | ||
| 198 | if ([userDefaults integerForKey:@"databaseVersion"] < 1) | 209 | if ([userDefaults integerForKey:@"databaseVersion"] < 1) |
| 199 | { | 210 | { |
| 200 | // Upgrade the database to version 1, which is completely unnecessary as no prior version exists | 211 | // Upgrade the database to version 1, which is completely unnecessary as no prior version exists |
| 201 | } | 212 | } |
| 202 | 213 | ||
| 203 | if (sqlite3_open([databasePath UTF8String], &database) != SQLITE_OK) | 214 | if ([userDefaults integerForKey:@"databaseVersion"] < 2) |
| 204 | { | 215 | { |
| 205 | NSLog(@"Failed to open database"); | 216 | // Database version 2 adds a "gameMode" column to highscores to allow for multiple highscore lists |
| 217 | const char* sqlQuery = "ALTER TABLE highscores ADD gameMode varchar(255)"; | ||
| 218 | sqlite3_stmt* compiled_statement; | ||
| 219 | |||
| 220 | if (sqlite3_prepare_v2(database, sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK) | ||
| 221 | { | ||
| 222 | sqlite3_step(compiled_statement); | ||
| 223 | |||
| 224 | sqlQuery = "UPDATE highscores SET gameMode = \"Collect\""; | ||
| 225 | if (sqlite3_prepare_v2(database, sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK) | ||
| 226 | { | ||
| 227 | sqlite3_step(compiled_statement); | ||
| 228 | |||
| 229 | NSLog(@"Updated database to version 2."); | ||
| 230 | [userDefaults setInteger:2 forKey:@"databaseVersion"]; | ||
| 231 | } else { | ||
| 232 | NSLog(@"Error while updating database to version 2. '%s'", sqlite3_errmsg(database)); | ||
| 233 | } | ||
| 234 | } else { | ||
| 235 | NSLog(@"Error while updating database to version 2. '%s'", sqlite3_errmsg(database)); | ||
| 236 | } | ||
| 206 | } | 237 | } |
| 238 | |||
| 239 | // It's rather important that the database version gets saved | ||
| 240 | [userDefaults synchronize]; | ||
| 207 | } | 241 | } |
| 208 | 242 | ||
| 209 | return database; | 243 | return database; |
| diff --git a/Classes/CocosOverlayScrollView.h b/Classes/CocosOverlayScrollView.h new file mode 100755 index 0000000..ad8e83f --- /dev/null +++ b/Classes/CocosOverlayScrollView.h | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | // | ||
| 2 | // CocosOverlayScrollView.h | ||
| 3 | // shapes | ||
| 4 | // | ||
| 5 | // Created by Nate Murray on 8/23/10. | ||
| 6 | // Copyright 2010 LittleHiccup. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <Foundation/Foundation.h> | ||
| 10 | #import "cocos2d.h" | ||
| 11 | |||
| 12 | @interface CocosOverlayScrollView : UIScrollView <UIScrollViewDelegate> | ||
| 13 | { | ||
| 14 | CCNode* targetLayer; | ||
| 15 | UIPageControl* pageControl; | ||
| 16 | } | ||
| 17 | @property(nonatomic, retain) CCNode* targetLayer; | ||
| 18 | -(id) initWithFrame: (CGRect) frameRect numPages: (int) numPages width: (float) width layer: (CCNode*) layer pageControl:(UIPageControl*)pageControl; | ||
| 19 | @end | ||
| diff --git a/Classes/CocosOverlayScrollView.m b/Classes/CocosOverlayScrollView.m new file mode 100755 index 0000000..9db0575 --- /dev/null +++ b/Classes/CocosOverlayScrollView.m | |||
| @@ -0,0 +1,110 @@ | |||
| 1 | // | ||
| 2 | // CocosOverlayScrollView.m | ||
| 3 | // shapes | ||
| 4 | // | ||
| 5 | // Created by Nate Murray on 8/23/10. | ||
| 6 | // Copyright 2010 LittleHiccup. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "CocosOverlayScrollView.h" | ||
| 10 | |||
| 11 | @implementation CocosOverlayScrollView | ||
| 12 | @synthesize targetLayer; | ||
| 13 | |||
| 14 | // Configure your favorite UIScrollView options here | ||
| 15 | -(id) initWithFrame: (CGRect) frameRect numPages: (int) numPages width: (float) width layer: (CCNode*) layer pageControl:(UIPageControl *)m_pageControl{ | ||
| 16 | if ((self = [super initWithFrame: frameRect])){ | ||
| 17 | self.contentSize = CGSizeMake(width*numPages, 320); | ||
| 18 | self.bounces = YES; | ||
| 19 | self.delaysContentTouches = NO; | ||
| 20 | self.delegate = self; | ||
| 21 | self.pagingEnabled = YES; | ||
| 22 | self.scrollsToTop = NO; | ||
| 23 | self.showsVerticalScrollIndicator = NO; | ||
| 24 | self.showsHorizontalScrollIndicator = NO; | ||
| 25 | [self setUserInteractionEnabled:TRUE]; | ||
| 26 | [self setScrollEnabled:TRUE]; | ||
| 27 | self.targetLayer = layer; | ||
| 28 | // self.canCancelContentTouches = YES; | ||
| 29 | pageControl = m_pageControl; | ||
| 30 | } | ||
| 31 | return self; | ||
| 32 | } | ||
| 33 | |||
| 34 | -(void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event | ||
| 35 | { | ||
| 36 | if (!self.dragging) | ||
| 37 | { | ||
| 38 | // UITouch* touch = [[touches allObjects] objectAtIndex:0]; | ||
| 39 | // CGPoint location = [touch locationInView: [[touch view] superview]]; | ||
| 40 | // CCLOG(@"touch at l.x:%f l.y:%f", location.x, location.y); | ||
| 41 | |||
| 42 | [self.nextResponder touchesBegan: touches withEvent:event]; | ||
| 43 | [[[CCDirector sharedDirector] openGLView] touchesBegan:touches withEvent:event]; | ||
| 44 | } | ||
| 45 | |||
| 46 | [super touchesBegan: touches withEvent: event]; | ||
| 47 | } | ||
| 48 | |||
| 49 | -(void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event | ||
| 50 | { | ||
| 51 | if (!self.dragging) | ||
| 52 | { | ||
| 53 | [self.nextResponder touchesEnded: touches withEvent:event]; | ||
| 54 | [[[CCDirector sharedDirector] openGLView] touchesEnded:touches withEvent:event]; | ||
| 55 | } | ||
| 56 | |||
| 57 | [super touchesEnded: touches withEvent: event]; | ||
| 58 | } | ||
| 59 | |||
| 60 | -(void) touchesCancelled: (NSSet *) touches withEvent: (UIEvent *) event | ||
| 61 | { | ||
| 62 | // if (!self.dragging) | ||
| 63 | // { | ||
| 64 | // CCLOG(@"CocosOverlayScrollView touchesEnded not dragging"); | ||
| 65 | [self.nextResponder touchesCancelled: touches withEvent:event]; | ||
| 66 | [[[CCDirector sharedDirector] openGLView] touchesCancelled:touches withEvent:event]; | ||
| 67 | // } | ||
| 68 | [super touchesCancelled: touches withEvent: event]; | ||
| 69 | } | ||
| 70 | |||
| 71 | |||
| 72 | - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView | ||
| 73 | { | ||
| 74 | // TODO - Custom code for handling deceleration of the scroll view | ||
| 75 | } | ||
| 76 | |||
| 77 | - (void)scrollViewDidScroll:(UIScrollView *)scrollView | ||
| 78 | { | ||
| 79 | CGPoint dragPt = [scrollView contentOffset]; | ||
| 80 | dragPt = [[CCDirector sharedDirector] convertToGL:dragPt]; | ||
| 81 | |||
| 82 | dragPt.y = dragPt.y * -1; | ||
| 83 | dragPt.x = dragPt.x * -1; | ||
| 84 | |||
| 85 | CGPoint newLayerPosition = CGPointMake(dragPt.x, dragPt.y); | ||
| 86 | |||
| 87 | [targetLayer setPosition:newLayerPosition]; | ||
| 88 | } | ||
| 89 | |||
| 90 | - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView | ||
| 91 | { | ||
| 92 | // CGPoint dragPt = [scrollView contentOffset]; | ||
| 93 | // etc. | ||
| 94 | } | ||
| 95 | |||
| 96 | -(void) dealloc { | ||
| 97 | self.targetLayer = nil; | ||
| 98 | [super dealloc]; | ||
| 99 | } | ||
| 100 | |||
| 101 | - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView | ||
| 102 | { | ||
| 103 | int currentPage = (NSUInteger)(scrollView.contentOffset.x / scrollView.frame.size.width); | ||
| 104 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
| 105 | [defaults setInteger:currentPage forKey:@"lastSelectedMode"]; | ||
| 106 | |||
| 107 | [pageControl setCurrentPage:currentPage]; | ||
| 108 | } | ||
| 109 | |||
| 110 | @end \ No newline at end of file | ||
| diff --git a/Classes/GameMode.h b/Classes/GameMode.h index 370550c..53ed9fc 100644 --- a/Classes/GameMode.h +++ b/Classes/GameMode.h | |||
| @@ -12,7 +12,7 @@ | |||
| 12 | #define GAME_SCENE 436 | 12 | #define GAME_SCENE 436 |
| 13 | #define GAME_LAYER 437 | 13 | #define GAME_LAYER 437 |
| 14 | 14 | ||
| 15 | @interface GameMode : CCLayer { | 15 | @interface GameMode : CCLayer <UIAlertViewDelegate> { |
| 16 | NSMutableSet* objects; | 16 | NSMutableSet* objects; |
| 17 | int score; | 17 | int score; |
| 18 | int lives; | 18 | int lives; |
| @@ -25,11 +25,14 @@ | |||
| 25 | CCLabelBMFont* livesLabel; | 25 | CCLabelBMFont* livesLabel; |
| 26 | 26 | ||
| 27 | void (^delayedAction)(void); | 27 | void (^delayedAction)(void); |
| 28 | |||
| 29 | BOOL isPaused; | ||
| 28 | } | 30 | } |
| 29 | 31 | ||
| 30 | @property (readonly) Cart* cart; | 32 | @property (readonly) Cart* cart; |
| 31 | @property (nonatomic,assign) int score; | 33 | @property (nonatomic,assign) int score; |
| 32 | @property (nonatomic,assign) int lives; | 34 | @property (nonatomic,assign) int lives; |
| 35 | @property (readonly) BOOL isPaused; | ||
| 33 | + (CCScene*)scene; | 36 | + (CCScene*)scene; |
| 34 | - (void)tick:(ccTime)dt; | 37 | - (void)tick:(ccTime)dt; |
| 35 | - (BOOL)canPause; | 38 | - (BOOL)canPause; |
| diff --git a/Classes/GameMode.m b/Classes/GameMode.m index 7afbf20..8f695d1 100644 --- a/Classes/GameMode.m +++ b/Classes/GameMode.m | |||
| @@ -12,7 +12,7 @@ | |||
| 12 | 12 | ||
| 13 | @implementation GameMode | 13 | @implementation GameMode |
| 14 | 14 | ||
| 15 | @synthesize cart, score, lives; | 15 | @synthesize cart, score, lives, isPaused; |
| 16 | 16 | ||
| 17 | + (CCScene*)scene | 17 | + (CCScene*)scene |
| 18 | { | 18 | { |
| @@ -60,6 +60,8 @@ | |||
| 60 | [pauseMenu setPosition:ccp(480-8-16, 320-8-16)]; | 60 | [pauseMenu setPosition:ccp(480-8-16, 320-8-16)]; |
| 61 | [self addChild:pauseMenu]; | 61 | [self addChild:pauseMenu]; |
| 62 | } | 62 | } |
| 63 | |||
| 64 | isPaused = NO; | ||
| 63 | } | 65 | } |
| 64 | 66 | ||
| 65 | return self; | 67 | return self; |
| @@ -98,8 +100,10 @@ | |||
| 98 | 100 | ||
| 99 | - (void)pause | 101 | - (void)pause |
| 100 | { | 102 | { |
| 101 | if ([self canPause]) | 103 | if (([self canPause]) && (!isPaused)) |
| 102 | { | 104 | { |
| 105 | isPaused = YES; | ||
| 106 | |||
| 103 | [self pauseSchedulerAndActions]; | 107 | [self pauseSchedulerAndActions]; |
| 104 | 108 | ||
| 105 | shadedLayer = [CCLayerColor layerWithColor:ccc4(0, 0, 0, 127)]; | 109 | shadedLayer = [CCLayerColor layerWithColor:ccc4(0, 0, 0, 127)]; |
| @@ -126,18 +130,25 @@ | |||
| 126 | 130 | ||
| 127 | - (void)unpause | 131 | - (void)unpause |
| 128 | { | 132 | { |
| 129 | [[[CCDirector sharedDirector] runningScene] removeChild:shadedLayer cleanup:YES]; | 133 | if (isPaused) |
| 130 | [[[CCDirector sharedDirector] runningScene] removeChild:pauseLayer cleanup:YES]; | 134 | { |
| 131 | 135 | [[[CCDirector sharedDirector] runningScene] removeChild:shadedLayer cleanup:YES]; | |
| 132 | shadedLayer = nil; | 136 | [[[CCDirector sharedDirector] runningScene] removeChild:pauseLayer cleanup:YES]; |
| 133 | pauseLayer = nil; | 137 | |
| 134 | 138 | shadedLayer = nil; | |
| 135 | [self resumeSchedulerAndActions]; | 139 | pauseLayer = nil; |
| 140 | |||
| 141 | [self resumeSchedulerAndActions]; | ||
| 142 | |||
| 143 | isPaused = NO; | ||
| 144 | } | ||
| 136 | } | 145 | } |
| 137 | 146 | ||
| 138 | - (void)mainmenu | 147 | - (void)mainmenu |
| 139 | { | 148 | { |
| 140 | [[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]]; | 149 | UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Cartographic" message:@"Are you sure you want to quit the currently playing game?" delegate:self cancelButtonTitle:@"Yes" otherButtonTitles:@"No", nil]; |
| 150 | [alert show]; | ||
| 151 | [alert release]; | ||
| 141 | } | 152 | } |
| 142 | 153 | ||
| 143 | - (void)setScore:(int)m_score | 154 | - (void)setScore:(int)m_score |
| @@ -170,6 +181,14 @@ | |||
| 170 | delayedAction = nil; | 181 | delayedAction = nil; |
| 171 | } | 182 | } |
| 172 | 183 | ||
| 184 | - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex | ||
| 185 | { | ||
| 186 | if (buttonIndex == 0) | ||
| 187 | { | ||
| 188 | [[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]]; | ||
| 189 | } | ||
| 190 | } | ||
| 191 | |||
| 173 | - (void)dealloc | 192 | - (void)dealloc |
| 174 | { | 193 | { |
| 175 | [objects release]; | 194 | [objects release]; |
| diff --git a/Classes/GameModeSelection.h b/Classes/GameModeSelection.h new file mode 100644 index 0000000..bdb38fb --- /dev/null +++ b/Classes/GameModeSelection.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | // | ||
| 2 | // GameModeSelection.h | ||
| 3 | // Cartographic | ||
| 4 | // | ||
| 5 | // Created by Starla Insigna on 8/18/11. | ||
| 6 | // Copyright 2011 Four Island. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "cocos2d.h" | ||
| 10 | #import "GameModeSelectionDelegate.h" | ||
| 11 | |||
| 12 | @interface GameModeSelection : CCMenuItem { | ||
| 13 | NSString* name; | ||
| 14 | NSString* location; | ||
| 15 | BOOL unlocked; | ||
| 16 | NSString* unlockCondition; | ||
| 17 | id<GameModeSelectionDelegate> delegate; | ||
| 18 | } | ||
| 19 | |||
| 20 | @property (readonly) NSString* name; | ||
| 21 | @property (readonly) NSString* location; | ||
| 22 | @property (readonly) BOOL unlocked; | ||
| 23 | @property (nonatomic,retain) id<GameModeSelectionDelegate> delegate; | ||
| 24 | + (id)selectionWithName:(NSString*)name location:(NSString*)location filename:(NSString*)filename unlocked:(BOOL)unlocked; | ||
| 25 | + (id)selectionWithName:(NSString *)name location:(NSString *)location filename:(NSString *)filename unlockCondition:(NSString*)unlockCondition; | ||
| 26 | - (id)initWithName:(NSString*)name location:(NSString*)location filename:(NSString*)filename unlocked:(BOOL)unlocked; | ||
| 27 | - (id)initWithName:(NSString *)name location:(NSString *)location filename:(NSString *)filename unlockCondition:(NSString*)unlockCondition; | ||
| 28 | - (void)buttonTapped; | ||
| 29 | |||
| 30 | @end | ||
| diff --git a/Classes/GameModeSelection.m b/Classes/GameModeSelection.m new file mode 100644 index 0000000..69f1ddb --- /dev/null +++ b/Classes/GameModeSelection.m | |||
| @@ -0,0 +1,219 @@ | |||
| 1 | // | ||
| 2 | // GameModeSelection.m | ||
| 3 | // Cartographic | ||
| 4 | // | ||
| 5 | // Created by Starla Insigna on 8/18/11. | ||
| 6 | // Copyright 2011 Four Island. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "GameModeSelection.h" | ||
| 10 | #import "UIImage+ColorMasking.h" | ||
| 11 | #import "NMPanelMenu.h" | ||
| 12 | #import "Highscore.h" | ||
| 13 | |||
| 14 | @implementation GameModeSelection | ||
| 15 | |||
| 16 | @synthesize name, location, unlocked, delegate; | ||
| 17 | |||
| 18 | + (id)selectionWithName:(NSString*)name location:(NSString*)location filename:(NSString*)filename unlocked:(BOOL)unlocked | ||
| 19 | { | ||
| 20 | return [[[GameModeSelection alloc] initWithName:name location:location filename:filename unlocked:unlocked] autorelease]; | ||
| 21 | } | ||
| 22 | |||
| 23 | + (id)selectionWithName:(NSString *)name location:(NSString *)location filename:(NSString *)filename unlockCondition:(NSString*)unlockCondition | ||
| 24 | { | ||
| 25 | return [[[GameModeSelection alloc] initWithName:name location:location filename:filename unlockCondition:unlockCondition] autorelease]; | ||
| 26 | } | ||
| 27 | |||
| 28 | - (id)initWithName:(NSString*)m_name location:(NSString*)m_location filename:(NSString*)filename unlocked:(BOOL)m_unlocked; | ||
| 29 | { | ||
| 30 | self = [super initWithTarget:nil selector:nil]; | ||
| 31 | |||
| 32 | if (nil != self) | ||
| 33 | { | ||
| 34 | self.anchorPoint = CGPointMake(0.5f, 0.5f); | ||
| 35 | |||
| 36 | name = m_name; | ||
| 37 | location = m_location; | ||
| 38 | unlocked = m_unlocked; | ||
| 39 | |||
| 40 | contentSize_ = CGSizeMake(128, 320); | ||
| 41 | |||
| 42 | NSString* filenameMod; | ||
| 43 | |||
| 44 | if (unlocked) | ||
| 45 | { | ||
| 46 | filenameMod = [NSString stringWithFormat:@"%@-unlocked", filename]; | ||
| 47 | } else { | ||
| 48 | filenameMod = [NSString stringWithFormat:@"%@-locked", filename]; | ||
| 49 | name = [@"" stringByPaddingToLength:name.length withString:@"?" startingAtIndex:0]; | ||
| 50 | location = [@"" stringByPaddingToLength:location.length withString:@"?" startingAtIndex:0]; | ||
| 51 | } | ||
| 52 | |||
| 53 | // First, create the frame that we will put the level picture inside | ||
| 54 | CGImageRef framestuff = [[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"framestuff" ofType:@"png"]] CGImage]; | ||
| 55 | CGImageRef topLeftRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 0, 8, 8)); | ||
| 56 | CGImageRef topRightRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 0, 8, 8)); | ||
| 57 | CGImageRef bottomLeftRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 8, 8, 8)); | ||
| 58 | CGImageRef bottomRightRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 8, 8, 8)); | ||
| 59 | CGImageRef topBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 16, 8, 8)); | ||
| 60 | CGImageRef leftBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 16, 8, 8)); | ||
| 61 | CGImageRef rightBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 24, 8, 8)); | ||
| 62 | CGImageRef bottomBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 24, 8, 8)); | ||
| 63 | UIImage* topLeft = [UIImage imageWithCGImage:topLeftRef]; | ||
| 64 | UIImage* topRight = [UIImage imageWithCGImage:topRightRef]; | ||
| 65 | UIImage* bottomLeft = [UIImage imageWithCGImage:bottomLeftRef]; | ||
| 66 | UIImage* bottomRight = [UIImage imageWithCGImage:bottomRightRef]; | ||
| 67 | UIImage* topBorder = [UIImage imageWithCGImage:topBorderRef]; | ||
| 68 | UIImage* leftBorder = [UIImage imageWithCGImage:leftBorderRef]; | ||
| 69 | UIImage* rightBorder = [UIImage imageWithCGImage:rightBorderRef]; | ||
| 70 | UIImage* bottomBorder = [UIImage imageWithCGImage:bottomBorderRef]; | ||
| 71 | CGImageRelease(topLeftRef); | ||
| 72 | CGImageRelease(topRightRef); | ||
| 73 | CGImageRelease(bottomLeftRef); | ||
| 74 | CGImageRelease(bottomRightRef); | ||
| 75 | CGImageRelease(topBorderRef); | ||
| 76 | CGImageRelease(leftBorderRef); | ||
| 77 | CGImageRelease(rightBorderRef); | ||
| 78 | CGImageRelease(bottomBorderRef); | ||
| 79 | |||
| 80 | CGSize boxSize = CGSizeMake(128+12, 128+12); | ||
| 81 | UIGraphicsBeginImageContext(boxSize); | ||
| 82 | CGContextRef context = UIGraphicsGetCurrentContext(); | ||
| 83 | [topLeft drawInRect:CGRectMake(0, 0, 8, 8)]; | ||
| 84 | [topBorder drawInRect:CGRectMake(8, 0, boxSize.width-16, 8)]; | ||
| 85 | [topRight drawInRect:CGRectMake(8+boxSize.width-16, 0, 8, 8)]; | ||
| 86 | [rightBorder drawInRect:CGRectMake(8+boxSize.width-16, 8, 8, boxSize.height-16)]; | ||
| 87 | [bottomRight drawInRect:CGRectMake(8+boxSize.width-16, 8+boxSize.height-16, 8, 8)]; | ||
| 88 | [bottomBorder drawInRect:CGRectMake(8, 8+boxSize.height-16, boxSize.width-16, 8)]; | ||
| 89 | [bottomLeft drawInRect:CGRectMake(0, 8+boxSize.height-16, 8, 8)]; | ||
| 90 | [leftBorder drawInRect:CGRectMake(0, 8, 8, boxSize.height-16)]; | ||
| 91 | CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]); | ||
| 92 | CGContextFillRect(context, CGRectMake(8, 8, boxSize.width-16, boxSize.height-16)); | ||
| 93 | UIImage* selectionBackground = UIGraphicsGetImageFromCurrentImageContext(); | ||
| 94 | |||
| 95 | // Now we want to put the level image inside the frame without messing up the frame itself | ||
| 96 | UIImage* innerPicture = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:filename ofType:@"png"]]; | ||
| 97 | CGContextClipToMask(context, CGRectMake(0, 0, boxSize.width, boxSize.height), [[selectionBackground opaqueMaskFromWhiteImage] CGImage]); | ||
| 98 | [innerPicture drawInRect:CGRectMake(6, 6, 128, 128)]; | ||
| 99 | selectionBackground = UIGraphicsGetImageFromCurrentImageContext(); | ||
| 100 | UIGraphicsEndImageContext(); | ||
| 101 | |||
| 102 | // The frame needs a shadow, so let's redraw it in a new context | ||
| 103 | UIGraphicsBeginImageContext(CGSizeMake(boxSize.width+10, boxSize.height+10)); | ||
| 104 | context = UIGraphicsGetCurrentContext(); | ||
| 105 | CGContextSaveGState(context); | ||
| 106 | |||
| 107 | if (unlocked) | ||
| 108 | { | ||
| 109 | CGContextSetShadow(context, CGSizeMake(-6, 6), 4.0f); | ||
| 110 | [selectionBackground drawInRect:CGRectMake(10, 0, boxSize.width, boxSize.height)]; | ||
| 111 | } else { | ||
| 112 | // Draw the picture in grayscale if the level has not yet been unlocked | ||
| 113 | CGContextClipToMask(context, CGRectMake(10, 0, boxSize.width, boxSize.height), [selectionBackground CGImage]); | ||
| 114 | CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]); | ||
| 115 | CGContextFillRect(context, CGRectMake(10, 0, boxSize.width, boxSize.height)); | ||
| 116 | CGContextRestoreGState(context); | ||
| 117 | |||
| 118 | CGContextSaveGState(context); | ||
| 119 | CGContextSetShadow(context, CGSizeMake(-6, 6), 4.0f); | ||
| 120 | [selectionBackground drawInRect:CGRectMake(10, 0, boxSize.width, boxSize.height) blendMode:kCGBlendModeLuminosity alpha:1.0]; | ||
| 121 | } | ||
| 122 | |||
| 123 | CGContextRestoreGState(context); | ||
| 124 | CGImageRef pictureRef = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | ||
| 125 | |||
| 126 | CCSprite* picture = [CCSprite spriteWithCGImage:pictureRef key:[NSString stringWithFormat:@"gms-%@", filenameMod]]; | ||
| 127 | |||
| 128 | // We're also going to need a "selected" image state for the button | ||
| 129 | CGContextSaveGState(context); | ||
| 130 | CGContextClipToMask(context, CGRectMake(10, 0, boxSize.width, boxSize.height), [selectionBackground CGImage]); | ||
| 131 | CGContextSetFillColorWithColor(context, [[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5] CGColor]); | ||
| 132 | CGContextFillRect(context, CGRectMake(10, 0, boxSize.width, boxSize.height)); | ||
| 133 | CGContextRestoreGState(context); | ||
| 134 | CGImageRef selectedButtonRef = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | ||
| 135 | UIGraphicsEndImageContext(); | ||
| 136 | CCSprite* selectedButton = [CCSprite spriteWithCGImage:selectedButtonRef key:[NSString stringWithFormat:@"gms-%@-selected", filenameMod]]; | ||
| 137 | |||
| 138 | CCMenuItemSprite* pictureMenuItem = [CCMenuItemSprite itemFromNormalSprite:picture selectedSprite:selectedButton target:self selector:@selector(buttonTapped)]; | ||
| 139 | NMPanelMenu* theMenu = [NMPanelMenu menuWithItems:pictureMenuItem, nil]; | ||
| 140 | theMenu.position = ccp(-5, 0); | ||
| 141 | [self addChild:theMenu]; | ||
| 142 | |||
| 143 | // Render the titles | ||
| 144 | UIFont* titleFont = [UIFont fontWithName:@"AmericanTypewriter-Bold" size:18.0f]; | ||
| 145 | CGSize titleSize = [location sizeWithFont:titleFont constrainedToSize:CGSizeMake(128, 0)]; | ||
| 146 | UIFont* subtitleFont = [UIFont fontWithName:@"AmericanTypewriter" size:18.0f]; | ||
| 147 | CGSize subtitleSize = [name sizeWithFont:subtitleFont constrainedToSize:CGSizeMake(128, 0)]; | ||
| 148 | CGSize combinedTitleSize = CGSizeMake(128, titleSize.height + 10 + subtitleSize.height + 10); | ||
| 149 | |||
| 150 | UIGraphicsBeginImageContext(combinedTitleSize); | ||
| 151 | context = UIGraphicsGetCurrentContext(); | ||
| 152 | CGContextSetShadow(context, CGSizeMake(-6, 6), 4.0f); | ||
| 153 | [location drawInRect:CGRectMake(10, 0, 128, titleSize.height) withFont:titleFont lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentCenter]; | ||
| 154 | [name drawInRect:CGRectMake(10, titleSize.height, 128, subtitleSize.height) withFont:subtitleFont lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentCenter]; | ||
| 155 | |||
| 156 | CGImageRef titleImage = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | ||
| 157 | UIGraphicsEndImageContext(); | ||
| 158 | CCSprite* titleSprite = [CCSprite spriteWithCGImage:titleImage key:[NSString stringWithFormat:@"gms-%@-title", filenameMod]]; | ||
| 159 | titleSprite.position = ccp(-10, (boxSize.height)/2+(combinedTitleSize.height)/2); | ||
| 160 | [self addChild:titleSprite]; | ||
| 161 | |||
| 162 | if (unlocked) | ||
| 163 | { | ||
| 164 | Highscore* localHighscore = [Highscore localHighscoreForGameMode:name]; | ||
| 165 | |||
| 166 | if (localHighscore != nil) | ||
| 167 | { | ||
| 168 | // Render the highscore label | ||
| 169 | NSString* highscoreString = [NSString stringWithFormat:@"Highscore: %d", localHighscore.score]; | ||
| 170 | UIFont* highscoreFont = [UIFont fontWithName:@"AmericanTypewriter" size:16.0f]; | ||
| 171 | CGSize highscoreSize = [highscoreString sizeWithFont:highscoreFont]; | ||
| 172 | |||
| 173 | UIGraphicsBeginImageContext(CGSizeMake(highscoreSize.width+10, highscoreSize.height+10)); | ||
| 174 | CGContextRef context = UIGraphicsGetCurrentContext(); | ||
| 175 | CGContextSetShadow(context, CGSizeMake(-6, 6), 4.0f); | ||
| 176 | [highscoreString drawInRect:CGRectMake(10, 0, highscoreSize.width, highscoreSize.height) withFont:highscoreFont]; | ||
| 177 | |||
| 178 | CGImageRef highscoreImage = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | ||
| 179 | UIGraphicsEndImageContext(); | ||
| 180 | CCSprite* highscoreSprite = [CCSprite spriteWithCGImage:highscoreImage key:[NSString stringWithFormat:@"gms-%@-highscore", filename]]; | ||
| 181 | highscoreSprite.position = ccp(-5, 0-64-(highscoreSize.height)/2-10); | ||
| 182 | [self addChild:highscoreSprite]; | ||
| 183 | } | ||
| 184 | } | ||
| 185 | } | ||
| 186 | |||
| 187 | return self; | ||
| 188 | } | ||
| 189 | |||
| 190 | - (id)initWithName:(NSString *)m_name location:(NSString *)m_location filename:(NSString *)m_filename unlockCondition:(NSString*)m_unlockCondition | ||
| 191 | { | ||
| 192 | self = [self initWithName:m_name location:m_location filename:m_filename unlocked:NO]; | ||
| 193 | |||
| 194 | if (nil != self) | ||
| 195 | { | ||
| 196 | unlockCondition = m_unlockCondition; | ||
| 197 | } | ||
| 198 | |||
| 199 | return self; | ||
| 200 | } | ||
| 201 | |||
| 202 | - (void)buttonTapped | ||
| 203 | { | ||
| 204 | if (unlocked) | ||
| 205 | { | ||
| 206 | if (delegate != nil) | ||
| 207 | { | ||
| 208 | [delegate didSelectGameMode:self]; | ||
| 209 | } else { | ||
| 210 | NSLog(@"I don't have a GameModeSelectionDelegate to call for some reason..."); | ||
| 211 | } | ||
| 212 | } else { | ||
| 213 | UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"To unlock this game mode:" message:unlockCondition delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:nil]; | ||
| 214 | [alertView show]; | ||
| 215 | [alertView release]; | ||
| 216 | } | ||
| 217 | } | ||
| 218 | |||
| 219 | @end | ||
| diff --git a/Classes/GameModeSelectionDelegate.h b/Classes/GameModeSelectionDelegate.h new file mode 100644 index 0000000..854a980 --- /dev/null +++ b/Classes/GameModeSelectionDelegate.h | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | // | ||
| 2 | // GameModeSelectionDelegate.h | ||
| 3 | // Cartographic | ||
| 4 | // | ||
| 5 | // Created by Starla Insigna on 8/23/11. | ||
| 6 | // Copyright 2011 Four Island. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <Foundation/Foundation.h> | ||
| 10 | |||
| 11 | @class GameModeSelection; | ||
| 12 | |||
| 13 | @protocol GameModeSelectionDelegate <NSObject> | ||
| 14 | |||
| 15 | - (void)didSelectGameMode:(GameModeSelection*)gameMode; | ||
| 16 | |||
| 17 | @end | ||
| diff --git a/Classes/GameModeSelectionLayer.h b/Classes/GameModeSelectionLayer.h new file mode 100644 index 0000000..478a173 --- /dev/null +++ b/Classes/GameModeSelectionLayer.h | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | // | ||
| 2 | // GameModeSelectionLayer.h | ||
| 3 | // Cartographic | ||
| 4 | // | ||
| 5 | // Created by Starla Insigna on 8/18/11. | ||
| 6 | // Copyright 2011 Four Island. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "cocos2d.h" | ||
| 10 | #import "TouchDelegatingView.h" | ||
| 11 | #import "CocosOverlayScrollView.h" | ||
| 12 | #import "GameModeSelectionDelegate.h" | ||
| 13 | |||
| 14 | @interface GameModeSelectionLayer : CCLayer <GameModeSelectionDelegate> { | ||
| 15 | NSMutableArray* gameModes; | ||
| 16 | TouchDelegatingView* touchDelegatingView; | ||
| 17 | CocosOverlayScrollView* scrollView; | ||
| 18 | UIPageControl* pageControl; | ||
| 19 | } | ||
| 20 | |||
| 21 | + (CCScene*)scene; | ||
| 22 | - (id)init; | ||
| 23 | - (void)mainmenu; | ||
| 24 | |||
| 25 | @end | ||
| diff --git a/Classes/GameModeSelectionLayer.m b/Classes/GameModeSelectionLayer.m new file mode 100644 index 0000000..db08146 --- /dev/null +++ b/Classes/GameModeSelectionLayer.m | |||
| @@ -0,0 +1,132 @@ | |||
| 1 | // | ||
| 2 | // GameModeSelectionLayer.m | ||
| 3 | // Cartographic | ||
| 4 | // | ||
| 5 | // Created by Starla Insigna on 8/18/11. | ||
| 6 | // Copyright 2011 Four Island. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "GameModeSelectionLayer.h" | ||
| 10 | #import "GameModeSelection.h" | ||
| 11 | #import <sqlite3.h> | ||
| 12 | #import "Cart_CollectAppDelegate.h" | ||
| 13 | #import "MainMenuLayer.h" | ||
| 14 | #import "TutorialMode.h" | ||
| 15 | #import "ClassicGameMode.h" | ||
| 16 | #import "NMPanelMenu.h" | ||
| 17 | |||
| 18 | @implementation GameModeSelectionLayer | ||
| 19 | |||
| 20 | + (CCScene*)scene | ||
| 21 | { | ||
| 22 | CCScene* scene = [CCScene node]; | ||
| 23 | |||
| 24 | CCLayer* backgroundLayer = [[[CCLayer alloc] init] autorelease]; | ||
| 25 | CCSprite* backgroundImage = [CCSprite spriteWithFile:@"paintdaubs.png"]; | ||
| 26 | backgroundImage.position = ccp(240,160); | ||
| 27 | [backgroundLayer addChild:backgroundImage]; | ||
| 28 | [scene addChild:backgroundLayer]; | ||
| 29 | |||
| 30 | GameModeSelectionLayer* layer = [GameModeSelectionLayer node]; | ||
| 31 | [scene addChild:layer]; | ||
| 32 | |||
| 33 | return scene; | ||
| 34 | } | ||
| 35 | |||
| 36 | - (id)init | ||
| 37 | { | ||
| 38 | self = [super init]; | ||
| 39 | |||
| 40 | if (nil != self) | ||
| 41 | { | ||
| 42 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
| 43 | gameModes = [[NSMutableArray alloc] init]; | ||
| 44 | |||
| 45 | GameModeSelection* tutorialSelection = [GameModeSelection selectionWithName:@"Tutorial" location:@"Florence" filename:@"florence" unlocked:YES]; | ||
| 46 | [gameModes addObject:tutorialSelection]; | ||
| 47 | |||
| 48 | GameModeSelection* collectSelection; | ||
| 49 | |||
| 50 | if ([defaults boolForKey:@"hasDoneTutorial"]) | ||
| 51 | { | ||
| 52 | collectSelection = [GameModeSelection selectionWithName:@"Collect" location:@"Paris" filename:@"paris" unlocked:YES]; | ||
| 53 | } else { | ||
| 54 | collectSelection = [GameModeSelection selectionWithName:@"Collect" location:@"Paris" filename:@"paris" unlockCondition:@"Beat the tutorial!"]; | ||
| 55 | } | ||
| 56 | |||
| 57 | [gameModes addObject:collectSelection]; | ||
| 58 | |||
| 59 | CCMenu* menu = [CCMenu menuWithItems:nil]; | ||
| 60 | float onePanelWide = 128; | ||
| 61 | float padding = 15; | ||
| 62 | float totalPanelWidth = onePanelWide + padding*2; | ||
| 63 | float numberOfPanels = [gameModes count]; | ||
| 64 | float totalWidth = numberOfPanels * totalPanelWidth; | ||
| 65 | int currentWorldOffset = [defaults integerForKey:@"lastSelectedMode"]; | ||
| 66 | CCLayer* panels = [CCLayer node]; | ||
| 67 | |||
| 68 | for (GameModeSelection* gameMode in gameModes) | ||
| 69 | { | ||
| 70 | [gameMode setDelegate:self]; | ||
| 71 | [menu addChild:gameMode]; | ||
| 72 | } | ||
| 73 | |||
| 74 | [menu alignItemsHorizontallyWithPadding:padding*2]; | ||
| 75 | [panels addChild:menu]; | ||
| 76 | [self addChild:panels]; | ||
| 77 | |||
| 78 | pageControl = [[UIPageControl alloc] init]; | ||
| 79 | pageControl.numberOfPages = numberOfPanels; | ||
| 80 | pageControl.currentPage = currentWorldOffset; | ||
| 81 | pageControl.frame = CGRectMake(0, 250, 480, 20); | ||
| 82 | |||
| 83 | menu.position = ccpAdd(menu.position, ccp(totalWidth/2 - totalPanelWidth/2, 320)); | ||
| 84 | touchDelegatingView = [[TouchDelegatingView alloc] initWithFrame:CGRectMake(0, 0, 480, 320)]; | ||
| 85 | scrollView = [[CocosOverlayScrollView alloc] initWithFrame:CGRectMake(0, 0, totalPanelWidth, 320) numPages:numberOfPanels width:totalPanelWidth layer:panels pageControl:pageControl]; | ||
| 86 | touchDelegatingView.scrollView = scrollView; | ||
| 87 | [scrollView setContentOffset:CGPointMake(currentWorldOffset*totalPanelWidth+1,0) animated:NO]; | ||
| 88 | |||
| 89 | CCMenuItemImage* newgameMenuItem = [CCMenuItemImage itemFromNormalImage:@"back.png" selectedImage:@"back2.png" target:self selector:@selector(mainmenu)]; | ||
| 90 | NMPanelMenu* myMenu = [NMPanelMenu menuWithItems:newgameMenuItem, nil]; | ||
| 91 | myMenu.position = ccp(240, 30); | ||
| 92 | [self addChild:myMenu]; | ||
| 93 | } | ||
| 94 | |||
| 95 | return self; | ||
| 96 | } | ||
| 97 | |||
| 98 | - (void)onEnterTransitionDidFinish | ||
| 99 | { | ||
| 100 | [super onEnterTransitionDidFinish]; | ||
| 101 | |||
| 102 | [[[CCDirector sharedDirector] openGLView] addSubview:pageControl]; | ||
| 103 | [[[CCDirector sharedDirector] openGLView] addSubview:touchDelegatingView]; | ||
| 104 | [[[CCDirector sharedDirector] openGLView] addSubview:scrollView]; | ||
| 105 | } | ||
| 106 | |||
| 107 | - (void)onExit | ||
| 108 | { | ||
| 109 | [super onExit]; | ||
| 110 | |||
| 111 | [touchDelegatingView removeFromSuperview]; | ||
| 112 | [scrollView removeFromSuperview]; | ||
| 113 | [pageControl removeFromSuperview]; | ||
| 114 | } | ||
| 115 | |||
| 116 | - (void)mainmenu | ||
| 117 | { | ||
| 118 | [[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]]; | ||
| 119 | } | ||
| 120 | |||
| 121 | - (void)didSelectGameMode:(GameModeSelection *)gameMode | ||
| 122 | { | ||
| 123 | if ([gameMode.name isEqual:@"Tutorial"]) | ||
| 124 | { | ||
| 125 | [[CCDirector sharedDirector] replaceScene:[TutorialMode scene]]; | ||
| 126 | } else if ([gameMode.name isEqual:@"Collect"]) | ||
| 127 | { | ||
| 128 | [[CCDirector sharedDirector] replaceScene:[ClassicGameMode scene]]; | ||
| 129 | } | ||
| 130 | } | ||
| 131 | |||
| 132 | @end | ||
| diff --git a/Classes/GameOverScene.m b/Classes/GameOverScene.m index bc081ff..94236ff 100755 --- a/Classes/GameOverScene.m +++ b/Classes/GameOverScene.m | |||
| @@ -88,15 +88,15 @@ | |||
| 88 | textField.enabled = NO; | 88 | textField.enabled = NO; |
| 89 | submitSwitch.enabled = NO; | 89 | submitSwitch.enabled = NO; |
| 90 | 90 | ||
| 91 | const char* sqlQuery = [[NSString stringWithFormat:@"INSERT INTO highscores (name, score) VALUES (\"%@\",%d)", [textField text], score] UTF8String]; | 91 | const char* sqlQuery = [[NSString stringWithFormat:@"INSERT INTO highscores (name, score, gameMode) VALUES (\"%@\",%d,\"Collect\")", [textField text], score] UTF8String]; |
| 92 | sqlite3_stmt* compiled_statement; | 92 | sqlite3_stmt* compiled_statement; |
| 93 | 93 | ||
| 94 | if (sqlite3_prepare_v2([Cart_CollectAppDelegate database], sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK) | 94 | if (sqlite3_prepare_v2([Cart_CollectAppDelegate database], sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK) |
| 95 | { | 95 | { |
| 96 | sqlite3_step(compiled_statement); | 96 | sqlite3_step(compiled_statement); |
| 97 | NSLog(@"awesome, %@", [textField text]); | 97 | NSLog(@"awesome, %@, %d", [textField text], score); |
| 98 | } else { | 98 | } else { |
| 99 | NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg([Cart_CollectAppDelegate database])); | 99 | NSLog(@"Error while adding highscore to local highscore list. '%s'", sqlite3_errmsg([Cart_CollectAppDelegate database])); |
| 100 | } | 100 | } |
| 101 | 101 | ||
| 102 | if (submitSwitch.on) | 102 | if (submitSwitch.on) |
| diff --git a/Classes/Highscore.h b/Classes/Highscore.h index bc6a8fb..fa2ea71 100755 --- a/Classes/Highscore.h +++ b/Classes/Highscore.h | |||
| @@ -17,6 +17,8 @@ | |||
| 17 | @property (readonly) NSString* name; | 17 | @property (readonly) NSString* name; |
| 18 | @property (readonly) int score; | 18 | @property (readonly) int score; |
| 19 | @property (readonly) NSDate* date; | 19 | @property (readonly) NSDate* date; |
| 20 | + (NSArray*)localHighscoreListForGameMode:(NSString*)gameMode; | ||
| 21 | + (Highscore*)localHighscoreForGameMode:(NSString*)gameMode; | ||
| 20 | - (id)initWithName:(NSString*)name score:(int)score date:(NSDate*)date; | 22 | - (id)initWithName:(NSString*)name score:(int)score date:(NSDate*)date; |
| 21 | 23 | ||
| 22 | @end | 24 | @end |
| diff --git a/Classes/Highscore.m b/Classes/Highscore.m index 20ce56f..546cbfe 100755 --- a/Classes/Highscore.m +++ b/Classes/Highscore.m | |||
| @@ -7,11 +7,64 @@ | |||
| 7 | // | 7 | // |
| 8 | 8 | ||
| 9 | #import "Highscore.h" | 9 | #import "Highscore.h" |
| 10 | #import <sqlite3.h> | ||
| 11 | #import "Cart_CollectAppDelegate.h" | ||
| 10 | 12 | ||
| 11 | @implementation Highscore | 13 | @implementation Highscore |
| 12 | 14 | ||
| 13 | @synthesize name, score, date; | 15 | @synthesize name, score, date; |
| 14 | 16 | ||
| 17 | + (NSArray*)localHighscoreListForGameMode:(NSString*)gameMode | ||
| 18 | { | ||
| 19 | NSMutableArray* highscores = [NSMutableArray arrayWithCapacity:15]; | ||
| 20 | const char* sqlQuery = [[NSString stringWithFormat:@"SELECT * FROM highscores WHERE gameMode = \"%@\" ORDER BY score DESC LIMIT 15", gameMode] UTF8String]; | ||
| 21 | sqlite3_stmt* compiled_statement; | ||
| 22 | |||
| 23 | if (sqlite3_prepare_v2([Cart_CollectAppDelegate database], sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK) | ||
| 24 | { | ||
| 25 | while (sqlite3_step(compiled_statement) == SQLITE_ROW) | ||
| 26 | { | ||
| 27 | NSString* name = [NSString stringWithUTF8String:(char*)sqlite3_column_text(compiled_statement, 1)]; | ||
| 28 | int score = sqlite3_column_int(compiled_statement, 2); | ||
| 29 | |||
| 30 | NSDate* date = nil; | ||
| 31 | char* dateStr = (char*)sqlite3_column_text(compiled_statement, 3); | ||
| 32 | if (dateStr != NULL) | ||
| 33 | { | ||
| 34 | NSString* theDate = [NSString stringWithUTF8String:dateStr]; | ||
| 35 | NSDateComponents* comps = [[NSDateComponents alloc] init]; | ||
| 36 | [comps setYear:[[theDate substringToIndex:4] intValue]]; | ||
| 37 | [comps setMonth:[[theDate substringWithRange:NSMakeRange(5, 2)] intValue]]; | ||
| 38 | [comps setDay:[[theDate substringWithRange:NSMakeRange(8, 2)] intValue]]; | ||
| 39 | [comps setHour:[[theDate substringWithRange:NSMakeRange(11, 2)] intValue]]; | ||
| 40 | [comps setMinute:[[theDate substringWithRange:NSMakeRange(14, 2)] intValue]]; | ||
| 41 | [comps setSecond:[[theDate substringWithRange:NSMakeRange(17, 2)] intValue]]; | ||
| 42 | date = [[NSCalendar currentCalendar] dateFromComponents:comps]; | ||
| 43 | date = [date dateByAddingTimeInterval:[[NSTimeZone localTimeZone] secondsFromGMT]]; | ||
| 44 | [comps release]; | ||
| 45 | } | ||
| 46 | |||
| 47 | Highscore* highscore = [[Highscore alloc] initWithName:name score:score date:date]; | ||
| 48 | [highscores addObject:highscore]; | ||
| 49 | [highscore release]; | ||
| 50 | } | ||
| 51 | } | ||
| 52 | |||
| 53 | return [highscores copy]; | ||
| 54 | } | ||
| 55 | |||
| 56 | + (Highscore*)localHighscoreForGameMode:(NSString*)gameMode | ||
| 57 | { | ||
| 58 | NSArray* localHighscores = [Highscore localHighscoreListForGameMode:gameMode]; | ||
| 59 | |||
| 60 | if ([localHighscores count] > 0) | ||
| 61 | { | ||
| 62 | return [localHighscores objectAtIndex:0]; | ||
| 63 | } else { | ||
| 64 | return nil; | ||
| 65 | } | ||
| 66 | } | ||
| 67 | |||
| 15 | - (id)initWithName:(NSString*)m_name score:(int)m_score date:(NSDate*)m_date | 68 | - (id)initWithName:(NSString*)m_name score:(int)m_score date:(NSDate*)m_date |
| 16 | { | 69 | { |
| 17 | self = [super init]; | 70 | self = [super init]; |
| diff --git a/Classes/HighscoreListController.m b/Classes/HighscoreListController.m index 932b147..d7bffcb 100755 --- a/Classes/HighscoreListController.m +++ b/Classes/HighscoreListController.m | |||
| @@ -10,7 +10,6 @@ | |||
| 10 | #import "Highscore.h" | 10 | #import "Highscore.h" |
| 11 | #import "RootViewController.h" | 11 | #import "RootViewController.h" |
| 12 | #import "cocoslive.h" | 12 | #import "cocoslive.h" |
| 13 | #import <sqlite3.h> | ||
| 14 | #import "Cart_CollectAppDelegate.h" | 13 | #import "Cart_CollectAppDelegate.h" |
| 15 | 14 | ||
| 16 | @implementation HighscoreListController | 15 | @implementation HighscoreListController |
| @@ -23,41 +22,7 @@ | |||
| 23 | // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. | 22 | // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. |
| 24 | self = [super initWithStyle:style]; | 23 | self = [super initWithStyle:style]; |
| 25 | if (self) { | 24 | if (self) { |
| 26 | NSMutableArray* highscores = [NSMutableArray arrayWithCapacity:15]; | 25 | localHighscores = [Highscore localHighscoreListForGameMode:@"Collect"]; |
| 27 | const char* sqlQuery = "SELECT * FROM highscores ORDER BY score DESC LIMIT 15"; | ||
| 28 | sqlite3_stmt* compiled_statement; | ||
| 29 | |||
| 30 | if (sqlite3_prepare_v2([Cart_CollectAppDelegate database], sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK) | ||
| 31 | { | ||
| 32 | while (sqlite3_step(compiled_statement) == SQLITE_ROW) | ||
| 33 | { | ||
| 34 | NSString* name = [NSString stringWithUTF8String:(char*)sqlite3_column_text(compiled_statement, 1)]; | ||
| 35 | int score = sqlite3_column_int(compiled_statement, 2); | ||
| 36 | |||
| 37 | NSDate* date = nil; | ||
| 38 | char* dateStr = (char*)sqlite3_column_text(compiled_statement, 3); | ||
| 39 | if (dateStr != NULL) | ||
| 40 | { | ||
| 41 | NSString* theDate = [NSString stringWithUTF8String:dateStr]; | ||
| 42 | NSDateComponents* comps = [[NSDateComponents alloc] init]; | ||
| 43 | [comps setYear:[[theDate substringToIndex:4] intValue]]; | ||
| 44 | [comps setMonth:[[theDate substringWithRange:NSMakeRange(5, 2)] intValue]]; | ||
| 45 | [comps setDay:[[theDate substringWithRange:NSMakeRange(8, 2)] intValue]]; | ||
| 46 | [comps setHour:[[theDate substringWithRange:NSMakeRange(11, 2)] intValue]]; | ||
| 47 | [comps setMinute:[[theDate substringWithRange:NSMakeRange(14, 2)] intValue]]; | ||
| 48 | [comps setSecond:[[theDate substringWithRange:NSMakeRange(17, 2)] intValue]]; | ||
| 49 | date = [[NSCalendar currentCalendar] dateFromComponents:comps]; | ||
| 50 | date = [date dateByAddingTimeInterval:[[NSTimeZone localTimeZone] secondsFromGMT]]; | ||
| 51 | [comps release]; | ||
| 52 | } | ||
| 53 | |||
| 54 | Highscore* highscore = [[Highscore alloc] initWithName:name score:score date:date]; | ||
| 55 | [highscores addObject:highscore]; | ||
| 56 | [highscore release]; | ||
| 57 | } | ||
| 58 | } | ||
| 59 | |||
| 60 | localHighscores = [highscores copy]; | ||
| 61 | 26 | ||
| 62 | navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; | 27 | navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; |
| 63 | myNavigationItem = [[UINavigationItem alloc] initWithTitle:@"Highscores"]; | 28 | myNavigationItem = [[UINavigationItem alloc] initWithTitle:@"Highscores"]; |
| diff --git a/Classes/MainMenuLayer.h b/Classes/MainMenuLayer.h index c7e3348..439056c 100755 --- a/Classes/MainMenuLayer.h +++ b/Classes/MainMenuLayer.h | |||
| @@ -16,8 +16,7 @@ | |||
| 16 | + (CCScene*)scene; | 16 | + (CCScene*)scene; |
| 17 | - (id)init; | 17 | - (id)init; |
| 18 | - (void)newgame; | 18 | - (void)newgame; |
| 19 | - (void)tutorial; | ||
| 20 | - (void)jump; | ||
| 21 | - (void)highscores; | 19 | - (void)highscores; |
| 20 | - (void)feedback; | ||
| 22 | 21 | ||
| 23 | @end | 22 | @end |
| diff --git a/Classes/MainMenuLayer.m b/Classes/MainMenuLayer.m index cf4b8cf..d4a6331 100755 --- a/Classes/MainMenuLayer.m +++ b/Classes/MainMenuLayer.m | |||
| @@ -8,10 +8,9 @@ | |||
| 8 | 8 | ||
| 9 | #import "MainMenuLayer.h" | 9 | #import "MainMenuLayer.h" |
| 10 | #import "HighscoreListController.h" | 10 | #import "HighscoreListController.h" |
| 11 | #import "ClassicGameMode.h" | 11 | #import "GameModeSelectionLayer.h" |
| 12 | #import "TutorialMode.h" | ||
| 13 | #import "Cart_CollectAppDelegate.h" | 12 | #import "Cart_CollectAppDelegate.h" |
| 14 | #import "JumpGameMode.h" | 13 | #import "TestFlight.h" |
| 15 | 14 | ||
| 16 | @implementation MainMenuLayer | 15 | @implementation MainMenuLayer |
| 17 | 16 | ||
| @@ -35,7 +34,7 @@ | |||
| 35 | backgroundImage.position = ccp(240,160); | 34 | backgroundImage.position = ccp(240,160); |
| 36 | [self addChild:backgroundImage]; | 35 | [self addChild:backgroundImage]; |
| 37 | 36 | ||
| 38 | CCLabelBMFont* titleText = [CCLabelBMFont labelWithString:@"Cart Collect - The Game!" fntFile:@"getoffthatboatrightnowyounglady.fnt"]; | 37 | CCLabelBMFont* titleText = [CCLabelBMFont labelWithString:@"Cartographic - The Game!" fntFile:@"getoffthatboatrightnowyounglady.fnt"]; |
| 39 | titleText.position = ccp(240, 320-64); | 38 | titleText.position = ccp(240, 320-64); |
| 40 | [self addChild:titleText]; | 39 | [self addChild:titleText]; |
| 41 | 40 | ||
| @@ -46,11 +45,10 @@ | |||
| 46 | //CCMenuItemLabel* menuItem2 = [CCMenuItemLabel itemWithLabel:menuItemLabel2 target:self selector:@selector(highscores)]; | 45 | //CCMenuItemLabel* menuItem2 = [CCMenuItemLabel itemWithLabel:menuItemLabel2 target:self selector:@selector(highscores)]; |
| 47 | 46 | ||
| 48 | CCMenuItemImage* newgameMenuItem = [CCMenuItemImage itemFromNormalImage:@"newgame.png" selectedImage:@"newgame2.png" target:self selector:@selector(newgame)]; | 47 | CCMenuItemImage* newgameMenuItem = [CCMenuItemImage itemFromNormalImage:@"newgame.png" selectedImage:@"newgame2.png" target:self selector:@selector(newgame)]; |
| 49 | CCMenuItemImage* tutorialMenuItem = [CCMenuItemImage itemFromNormalImage:@"tutorial.png" selectedImage:@"tutorial2.png" target:self selector:@selector(tutorial)]; | ||
| 50 | CCMenuItemImage* jumpMenuItem = [CCMenuItemImage itemFromNormalImage:@"jump.png" selectedImage:@"jump2.png" target:self selector:@selector(jump)]; | ||
| 51 | CCMenuItemImage* highscoresMenuItem = [CCMenuItemImage itemFromNormalImage:@"highscores.png" selectedImage:@"highscores2.png" target:self selector:@selector(highscores)]; | 48 | CCMenuItemImage* highscoresMenuItem = [CCMenuItemImage itemFromNormalImage:@"highscores.png" selectedImage:@"highscores2.png" target:self selector:@selector(highscores)]; |
| 52 | 49 | CCMenuItemImage* feedbackMenuItem = [CCMenuItemImage itemFromNormalImage:@"feedback.png" selectedImage:@"feedback2.png" target:self selector:@selector(feedback)]; | |
| 53 | CCMenu* menu = [CCMenu menuWithItems:newgameMenuItem, tutorialMenuItem, jumpMenuItem, highscoresMenuItem, nil]; | 50 | |
| 51 | CCMenu* menu = [CCMenu menuWithItems:newgameMenuItem, highscoresMenuItem, feedbackMenuItem, nil]; | ||
| 54 | [menu alignItemsVertically]; | 52 | [menu alignItemsVertically]; |
| 55 | menu.position = ccp(240, 100); | 53 | menu.position = ccp(240, 100); |
| 56 | [self addChild:menu]; | 54 | [self addChild:menu]; |
| @@ -61,17 +59,7 @@ | |||
| 61 | 59 | ||
| 62 | - (void)newgame | 60 | - (void)newgame |
| 63 | { | 61 | { |
| 64 | [[CCDirector sharedDirector] replaceScene:[ClassicGameMode scene]]; | 62 | [[CCDirector sharedDirector] replaceScene:[GameModeSelectionLayer scene]]; |
| 65 | } | ||
| 66 | |||
| 67 | - (void)tutorial | ||
| 68 | { | ||
| 69 | [[CCDirector sharedDirector] replaceScene:[TutorialMode scene]]; | ||
| 70 | } | ||
| 71 | |||
| 72 | - (void)jump | ||
| 73 | { | ||
| 74 | [[CCDirector sharedDirector] replaceScene:[JumpGameMode scene]]; | ||
| 75 | } | 63 | } |
| 76 | 64 | ||
| 77 | - (void)highscores | 65 | - (void)highscores |
| @@ -82,4 +70,9 @@ | |||
| 82 | [listController release]; | 70 | [listController release]; |
| 83 | } | 71 | } |
| 84 | 72 | ||
| 73 | - (void)feedback | ||
| 74 | { | ||
| 75 | [TestFlight openFeedbackView]; | ||
| 76 | } | ||
| 77 | |||
| 85 | @end | 78 | @end |
| diff --git a/Classes/NMPanelMenu.h b/Classes/NMPanelMenu.h new file mode 100755 index 0000000..3487849 --- /dev/null +++ b/Classes/NMPanelMenu.h | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | /* | ||
| 2 | * NMPanelMenu.h | ||
| 3 | * shapes | ||
| 4 | * | ||
| 5 | * Created by Nate Murray on 7/29/10. | ||
| 6 | * Copyright 2010 YetiApps. All rights reserved. | ||
| 7 | * | ||
| 8 | */ | ||
| 9 | |||
| 10 | #import "cocos2d.h" | ||
| 11 | @interface NMPanelMenu : CCMenu { | ||
| 12 | } | ||
| 13 | -(CCMenuItem *) itemForTouch: (UITouch *) touch; | ||
| 14 | @end | ||
| diff --git a/Classes/NMPanelMenu.m b/Classes/NMPanelMenu.m new file mode 100755 index 0000000..ee24279 --- /dev/null +++ b/Classes/NMPanelMenu.m | |||
| @@ -0,0 +1,37 @@ | |||
| 1 | /* | ||
| 2 | * NMPanelMenu.m | ||
| 3 | * shapes | ||
| 4 | * | ||
| 5 | * Created by Nate Murray on 7/29/10. | ||
| 6 | * Copyright 2010 YetiApps. All rights reserved. | ||
| 7 | * | ||
| 8 | */ | ||
| 9 | |||
| 10 | #import "NMPanelMenu.h" | ||
| 11 | |||
| 12 | @implementation NMPanelMenu | ||
| 13 | |||
| 14 | -(CCMenuItem *) itemForTouch: (UITouch *) touch | ||
| 15 | { | ||
| 16 | CGPoint touchLocation = [touch locationInView: [[touch view] superview]]; | ||
| 17 | touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation]; | ||
| 18 | |||
| 19 | CCMenuItem* item; | ||
| 20 | CCARRAY_FOREACH(children_, item){ | ||
| 21 | // ignore invisible and disabled items: issue #779, #866 | ||
| 22 | if ( [item visible] && [item isEnabled] ) { | ||
| 23 | |||
| 24 | CGPoint local = [item convertToNodeSpace:touchLocation]; | ||
| 25 | |||
| 26 | CGRect r = [item rect]; | ||
| 27 | r.origin = CGPointZero; | ||
| 28 | |||
| 29 | if( CGRectContainsPoint( r, local ) ) { | ||
| 30 | return item; | ||
| 31 | } | ||
| 32 | } | ||
| 33 | } | ||
| 34 | return nil; | ||
| 35 | } | ||
| 36 | |||
| 37 | @end | ||
| diff --git a/Classes/TouchDelegatingView.h b/Classes/TouchDelegatingView.h new file mode 100755 index 0000000..5ed6884 --- /dev/null +++ b/Classes/TouchDelegatingView.h | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | // | ||
| 2 | // TouchDelegatingView.h | ||
| 3 | // shapes | ||
| 4 | // | ||
| 5 | // Created by Nate Murray on 8/23/10. | ||
| 6 | // Copyright 2010 LittleHiccup. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <Foundation/Foundation.h> | ||
| 10 | #import "CocosOverLayScrollView.h" | ||
| 11 | |||
| 12 | @interface TouchDelegatingView : UIView { | ||
| 13 | // UIPageControl* pageControl; | ||
| 14 | CocosOverlayScrollView* scrollView; | ||
| 15 | } | ||
| 16 | @property(nonatomic, retain) CocosOverlayScrollView* scrollView; | ||
| 17 | |||
| 18 | @end | ||
| diff --git a/Classes/TouchDelegatingView.m b/Classes/TouchDelegatingView.m new file mode 100755 index 0000000..83bda73 --- /dev/null +++ b/Classes/TouchDelegatingView.m | |||
| @@ -0,0 +1,26 @@ | |||
| 1 | // | ||
| 2 | // TouchDelegatingView.m | ||
| 3 | // Jacob's Shapes | ||
| 4 | // | ||
| 5 | // Created by Nate Murray on 8/23/10. | ||
| 6 | // Copyright 2010 LittleHiccup. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "TouchDelegatingView.h" | ||
| 10 | |||
| 11 | @implementation TouchDelegatingView | ||
| 12 | @synthesize scrollView; | ||
| 13 | |||
| 14 | - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { | ||
| 15 | if ([self pointInside:point withEvent:event]) { | ||
| 16 | return self.scrollView; | ||
| 17 | } | ||
| 18 | return nil; | ||
| 19 | } | ||
| 20 | |||
| 21 | -(void) dealloc { | ||
| 22 | self.scrollView = nil; | ||
| 23 | [super dealloc]; | ||
| 24 | } | ||
| 25 | |||
| 26 | @end | ||
| diff --git a/Classes/TutorialMode.m b/Classes/TutorialMode.m index ed51648..3c70a46 100644 --- a/Classes/TutorialMode.m +++ b/Classes/TutorialMode.m | |||
| @@ -12,7 +12,7 @@ | |||
| 12 | #import "Bottle.h" | 12 | #import "Bottle.h" |
| 13 | #import "OneUp.h" | 13 | #import "OneUp.h" |
| 14 | #import "Rock.h" | 14 | #import "Rock.h" |
| 15 | #import "MainMenuLayer.h" | 15 | #import "GameModeSelectionLayer.h" |
| 16 | 16 | ||
| 17 | // Item tags: | 17 | // Item tags: |
| 18 | // 2000 - first dropped item | 18 | // 2000 - first dropped item |
| @@ -20,6 +20,7 @@ | |||
| 20 | // 2002 - items that are dropped after you miss first dropped item to demonstrate what happens when you catch | 20 | // 2002 - items that are dropped after you miss first dropped item to demonstrate what happens when you catch |
| 21 | // 2003 - 1-Up | 21 | // 2003 - 1-Up |
| 22 | // 2009 - rock | 22 | // 2009 - rock |
| 23 | // 2010 - random item dropped after death from first rock | ||
| 23 | 24 | ||
| 24 | @implementation TutorialMode | 25 | @implementation TutorialMode |
| 25 | 26 | ||
| @@ -47,7 +48,7 @@ | |||
| 47 | [super onEnterTransitionDidFinish]; | 48 | [super onEnterTransitionDidFinish]; |
| 48 | 49 | ||
| 49 | [self scheduleDelayedAction:^{ | 50 | [self scheduleDelayedAction:^{ |
| 50 | TutorialBubble* bubble = [[TutorialBubble alloc] initWithText:@"Welcome to Cart Collect. This is a tutorial designed to help you get started playing the game. Below this bubble is a cart. Tilt your device to move it." name:@"cart" spriteReference:cart.sprite]; | 51 | TutorialBubble* bubble = [[TutorialBubble alloc] initWithText:@"Welcome to Cartographic. This is a tutorial designed to help you get started playing the game. Below this bubble is a cart. Tilt your device to move it." name:@"cart" spriteReference:cart.sprite]; |
| 51 | self.currentTutorial = bubble; | 52 | self.currentTutorial = bubble; |
| 52 | [bubble release]; | 53 | [bubble release]; |
| 53 | } delay:2.0f]; | 54 | } delay:2.0f]; |
| @@ -122,7 +123,30 @@ | |||
| 122 | [self schedule:@selector(randomlyAddObject:) interval:2.5f]; | 123 | [self schedule:@selector(randomlyAddObject:) interval:2.5f]; |
| 123 | } else if (item.sprite.tag == 2009) | 124 | } else if (item.sprite.tag == 2009) |
| 124 | { | 125 | { |
| 125 | TutorialBubble* bubble = [[TutorialBubble alloc] initWithText:@"As you play, Cart Collect gets progressively more intense. Watch what happens when rocks are added to the mix and the speed is turned up." name:@"intense"]; | 126 | if ((lives < 1) && (!showedDeathBubble)) |
| 127 | { | ||
| 128 | showedDeathBubble = YES; | ||
| 129 | |||
| 130 | TutorialBubble* bubble = [[TutorialBubble alloc] initWithText:@"You lost all your lives! Normally, you'd be taken to a game over screen where you could submit your score to the highscore list, but we're a bit more forgiving in tutorial mode." name:@"gameover-rock"]; | ||
| 131 | self.currentTutorial = bubble; | ||
| 132 | [bubble release]; | ||
| 133 | } else { | ||
| 134 | TutorialBubble* bubble = [[TutorialBubble alloc] initWithText:@"As you play, Cartographic gets progressively more intense. Watch what happens when rocks are added to the mix and the speed is turned up." name:@"intense"]; | ||
| 135 | self.currentTutorial = bubble; | ||
| 136 | [bubble release]; | ||
| 137 | } | ||
| 138 | } else if (item.sprite.tag == 2010) | ||
| 139 | { | ||
| 140 | TutorialBubble* bubble = [[TutorialBubble alloc] initWithText:@"As you play, Cartographic gets progressively more intense. Watch what happens when rocks are added to the mix and the speed is turned up." name:@"intense"]; | ||
| 141 | self.currentTutorial = bubble; | ||
| 142 | [bubble release]; | ||
| 143 | } | ||
| 144 | |||
| 145 | if ((lives < 1) && (!showedDeathBubble)) | ||
| 146 | { | ||
| 147 | showedDeathBubble = YES; | ||
| 148 | |||
| 149 | TutorialBubble* bubble = [[TutorialBubble alloc] initWithText:@"You lost all your lives! Normally, you'd be taken to a game over screen where you could submit your score to the highscore list, but we're a bit more forgiving in tutorial mode." name:@"gameover"]; | ||
| 126 | self.currentTutorial = bubble; | 150 | self.currentTutorial = bubble; |
| 127 | [bubble release]; | 151 | [bubble release]; |
| 128 | } | 152 | } |
| @@ -191,12 +215,19 @@ | |||
| 191 | object.sprite.tag = 2003; | 215 | object.sprite.tag = 2003; |
| 192 | [object release]; | 216 | [object release]; |
| 193 | } delay:2.0f]; | 217 | } delay:2.0f]; |
| 218 | } else if ([currentTutorial.name isEqual:@"gameover-rock"]) | ||
| 219 | { | ||
| 220 | [self scheduleDelayedAction:^{ | ||
| 221 | FallingObject* object = [self dropRandomItem]; | ||
| 222 | object.sprite.tag = 2010; | ||
| 223 | [object release]; | ||
| 224 | } delay:1.0f]; | ||
| 194 | } else if ([currentTutorial.name isEqual:@"intense"]) | 225 | } else if ([currentTutorial.name isEqual:@"intense"]) |
| 195 | { | 226 | { |
| 196 | [self schedule:@selector(randomlyAddObject:) interval:1.0f]; | 227 | [self schedule:@selector(randomlyAddObject:) interval:1.0f]; |
| 197 | } else if ([currentTutorial.name isEqual:@"end"]) | 228 | } else if ([currentTutorial.name isEqual:@"end"]) |
| 198 | { | 229 | { |
| 199 | [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:3.0f scene:[MainMenuLayer scene] withColor:ccc3(0,0,0)]]; | 230 | [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:3.0f scene:[GameModeSelectionLayer scene] withColor:ccc3(0,0,0)]]; |
| 200 | } | 231 | } |
| 201 | 232 | ||
| 202 | self.currentTutorial = nil; | 233 | self.currentTutorial = nil; |
| @@ -252,20 +283,6 @@ | |||
| 252 | return [self dropSpecificItem:object]; | 283 | return [self dropSpecificItem:object]; |
| 253 | } | 284 | } |
| 254 | 285 | ||
| 255 | - (void)setLives:(int)m_lives | ||
| 256 | { | ||
| 257 | [super setLives:m_lives]; | ||
| 258 | |||
| 259 | if ((lives < 1) && (!showedDeathBubble)) | ||
| 260 | { | ||
| 261 | showedDeathBubble = YES; | ||
| 262 | |||
| 263 | TutorialBubble* bubble = [[TutorialBubble alloc] initWithText:@"You lost all your lives! Normally, you'd be taken to a game over screen where you could submit your score to the highscore list, but we're a bit more forgiving in tutorial mode." name:@"gameover"]; | ||
| 264 | self.currentTutorial = bubble; | ||
| 265 | [bubble release]; | ||
| 266 | } | ||
| 267 | } | ||
| 268 | |||
| 269 | - (void)randomlyAddObject:(ccTime)dt | 286 | - (void)randomlyAddObject:(ccTime)dt |
| 270 | { | 287 | { |
| 271 | FallingObject* object; | 288 | FallingObject* object; |
| @@ -307,13 +324,16 @@ | |||
| 307 | } else if (randomItemsDropped == 15) | 324 | } else if (randomItemsDropped == 15) |
| 308 | { | 325 | { |
| 309 | [self scheduleDelayedAction:^{ | 326 | [self scheduleDelayedAction:^{ |
| 310 | TutorialBubble* bubble = [[TutorialBubble alloc] initWithText:@"That's pretty much it! You've completed the tutorial, so now it's time to play an actual game of Cart Collect!" name:@"end"]; | 327 | TutorialBubble* bubble = [[TutorialBubble alloc] initWithText:@"That's pretty much it! You've completed the tutorial, so now it's time to play an actual game of Cartographic!" name:@"end"]; |
| 311 | self.currentTutorial = bubble; | 328 | self.currentTutorial = bubble; |
| 312 | [bubble release]; | 329 | [bubble release]; |
| 313 | } delay:2.0f]; | 330 | } delay:2.0f]; |
| 314 | 331 | ||
| 315 | [self unschedule:@selector(randomlyAddObject:)]; | 332 | [self unschedule:@selector(randomlyAddObject:)]; |
| 316 | 333 | ||
| 334 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
| 335 | [defaults setBool:YES forKey:@"hasDoneTutorial"]; | ||
| 336 | |||
| 317 | return; | 337 | return; |
| 318 | } else { | 338 | } else { |
| 319 | NSLog(@"randomItemsDropped in TutorialMode is greater than 15--this should never happen."); | 339 | NSLog(@"randomItemsDropped in TutorialMode is greater than 15--this should never happen."); |
| diff --git a/Classes/UIImage+ColorMasking.h b/Classes/UIImage+ColorMasking.h new file mode 100644 index 0000000..d25fafb --- /dev/null +++ b/Classes/UIImage+ColorMasking.h | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | // | ||
| 2 | // UIImage+ColorMasking.h | ||
| 3 | // Cartographic | ||
| 4 | // | ||
| 5 | // Created by Starla Insigna on 8/22/11. | ||
| 6 | // Copyright 2011 Four Island. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import <UIKit/UIKit.h> | ||
| 10 | |||
| 11 | @interface UIImage (ColorMasking) | ||
| 12 | |||
| 13 | - (UIImage *)opaqueMaskFromWhiteImage; | ||
| 14 | |||
| 15 | @end | ||
| diff --git a/Classes/UIImage+ColorMasking.m b/Classes/UIImage+ColorMasking.m new file mode 100644 index 0000000..e4da8c8 --- /dev/null +++ b/Classes/UIImage+ColorMasking.m | |||
| @@ -0,0 +1,77 @@ | |||
| 1 | // | ||
| 2 | // UIImage+ColorMasking.m | ||
| 3 | // Cartographic | ||
| 4 | // | ||
| 5 | // Created by Starla Insigna on 8/22/11. | ||
| 6 | // Copyright 2011 Four Island. All rights reserved. | ||
| 7 | // | ||
| 8 | |||
| 9 | #import "UIImage+ColorMasking.h" | ||
| 10 | |||
| 11 | @implementation UIImage (ColorMasking) | ||
| 12 | |||
| 13 | typedef enum { | ||
| 14 | ALPHA = 0, | ||
| 15 | BLUE = 1, | ||
| 16 | GREEN = 2, | ||
| 17 | RED = 3 | ||
| 18 | } PIXELS; | ||
| 19 | |||
| 20 | - (UIImage *)opaqueMaskFromWhiteImage | ||
| 21 | { | ||
| 22 | CGSize size = [self size]; | ||
| 23 | int width = size.width; | ||
| 24 | int height = size.height; | ||
| 25 | |||
| 26 | // the pixels will be painted to this array | ||
| 27 | uint32_t *pixels = (uint32_t *) malloc(width * height * sizeof(uint32_t)); | ||
| 28 | |||
| 29 | // clear the pixels so any transparency is preserved | ||
| 30 | memset(pixels, 0, width * height * sizeof(uint32_t)); | ||
| 31 | |||
| 32 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); | ||
| 33 | |||
| 34 | // create a context with RGBA pixels | ||
| 35 | CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * sizeof(uint32_t), colorSpace, | ||
| 36 | kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast); | ||
| 37 | |||
| 38 | // paint the bitmap to our context which will fill in the pixels array | ||
| 39 | CGContextDrawImage(context, CGRectMake(0, 0, width, height), [self CGImage]); | ||
| 40 | |||
| 41 | for(int y = 0; y < height; y++) { | ||
| 42 | for(int x = 0; x < width; x++) { | ||
| 43 | uint8_t *rgbaPixel = (uint8_t *) &pixels[y * width + x]; | ||
| 44 | |||
| 45 | if ((rgbaPixel[RED] == 255) && (rgbaPixel[GREEN] == 255) && (rgbaPixel[BLUE] == 255) && (rgbaPixel[ALPHA] == 255)) | ||
| 46 | { | ||
| 47 | rgbaPixel[RED] = 255; | ||
| 48 | rgbaPixel[GREEN] = 255; | ||
| 49 | rgbaPixel[BLUE] = 255; | ||
| 50 | rgbaPixel[ALPHA] = 255; | ||
| 51 | } else { | ||
| 52 | rgbaPixel[RED] = 0; | ||
| 53 | rgbaPixel[GREEN] = 0; | ||
| 54 | rgbaPixel[BLUE] = 0; | ||
| 55 | rgbaPixel[ALPHA] = 0; | ||
| 56 | } | ||
| 57 | } | ||
| 58 | } | ||
| 59 | |||
| 60 | // create a new CGImageRef from our context with the modified pixels | ||
| 61 | CGImageRef image = CGBitmapContextCreateImage(context); | ||
| 62 | |||
| 63 | // we're done with the context, color space, and pixels | ||
| 64 | CGContextRelease(context); | ||
| 65 | CGColorSpaceRelease(colorSpace); | ||
| 66 | free(pixels); | ||
| 67 | |||
| 68 | // make a new UIImage to return | ||
| 69 | UIImage *resultUIImage = [UIImage imageWithCGImage:image]; | ||
| 70 | |||
| 71 | // we're done with image now too | ||
| 72 | CGImageRelease(image); | ||
| 73 | |||
| 74 | return resultUIImage; | ||
| 75 | } | ||
| 76 | |||
| 77 | @end | ||
| diff --git a/Resources/Info.plist b/Resources/Info.plist index 9f3118a..4a70f3c 100755 --- a/Resources/Info.plist +++ b/Resources/Info.plist | |||
| @@ -26,8 +26,6 @@ | |||
| 26 | <string>${PRODUCT_NAME}</string> | 26 | <string>${PRODUCT_NAME}</string> |
| 27 | <key>CFBundlePackageType</key> | 27 | <key>CFBundlePackageType</key> |
| 28 | <string>APPL</string> | 28 | <string>APPL</string> |
| 29 | <key>CFBundleShortVersionString</key> | ||
| 30 | <string>0.2.1</string> | ||
| 31 | <key>CFBundleSignature</key> | 29 | <key>CFBundleSignature</key> |
| 32 | <string>????</string> | 30 | <string>????</string> |
| 33 | <key>CFBundleURLTypes</key> | 31 | <key>CFBundleURLTypes</key> |
| diff --git a/Resources/cartdata.sqlite3 b/Resources/cartdata.sqlite3 index 6b7b656..5afd6aa 100755 --- a/Resources/cartdata.sqlite3 +++ b/Resources/cartdata.sqlite3 | |||
| Binary files differ | |||
| diff --git a/Resources/feedback.png b/Resources/feedback.png new file mode 100644 index 0000000..83af574 --- /dev/null +++ b/Resources/feedback.png | |||
| Binary files differ | |||
| diff --git a/Resources/feedback2.png b/Resources/feedback2.png new file mode 100644 index 0000000..5954cab --- /dev/null +++ b/Resources/feedback2.png | |||
| Binary files differ | |||
| diff --git a/Resources/florence.png b/Resources/florence.png new file mode 100644 index 0000000..6ad85dc --- /dev/null +++ b/Resources/florence.png | |||
| Binary files differ | |||
| diff --git a/Resources/paintdaubs.png b/Resources/paintdaubs.png new file mode 100644 index 0000000..9eb5995 --- /dev/null +++ b/Resources/paintdaubs.png | |||
| Binary files differ | |||
| diff --git a/Resources/paris.png b/Resources/paris.png new file mode 100644 index 0000000..59d95af --- /dev/null +++ b/Resources/paris.png | |||
| Binary files differ | |||
| diff --git a/TestFlight.h b/TestFlight.h new file mode 100644 index 0000000..cd98c52 --- /dev/null +++ b/TestFlight.h | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | // | ||
| 2 | // TestFlight.h | ||
| 3 | // libTestFlight | ||
| 4 | // | ||
| 5 | // Created by Colin Humber on 8/25/10. | ||
| 6 | // Copyright 2010 23 Divide Apps. All rights reserved. | ||
| 7 | |||
| 8 | #import <Foundation/Foundation.h> | ||
| 9 | |||
| 10 | @interface TestFlight : NSObject { | ||
| 11 | |||
| 12 | } | ||
| 13 | |||
| 14 | /** | ||
| 15 | Add custom environment information | ||
| 16 | If you want to track a user name from your application you can add it here | ||
| 17 | */ | ||
| 18 | + (void)addCustomEnvironmentInformation:(NSString *)information forKey:(NSString*)key; | ||
| 19 | |||
| 20 | /** | ||
| 21 | Starts a TestFlight session | ||
| 22 | */ | ||
| 23 | + (void)takeOff:(NSString *)teamToken; | ||
| 24 | |||
| 25 | /** | ||
| 26 | Track when a user has passed a checkpoint after the flight has taken off. Eg. passed level 1, posted high score | ||
| 27 | */ | ||
| 28 | + (void)passCheckpoint:(NSString *)checkpointName; | ||
| 29 | |||
| 30 | /** | ||
| 31 | Opens a feeback window that is not attached to a checkpoint | ||
| 32 | */ | ||
| 33 | + (void)openFeedbackView; | ||
| 34 | |||
| 35 | @end | ||
| diff --git a/libTestFlight.a b/libTestFlight.a new file mode 100644 index 0000000..aacc245 --- /dev/null +++ b/libTestFlight.a | |||
| Binary files differ | |||
