summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xCartographic.xcodeproj/project.pbxproj (renamed from Cart Collect.xcodeproj/project.pbxproj)210
-rwxr-xr-xCartographic.xcodeproj/project.xcworkspace/contents.xcworkspacedata (renamed from Cart Collect.xcodeproj/project.xcworkspace/contents.xcworkspacedata)2
-rwxr-xr-xClasses/Cart_CollectAppDelegate.m44
-rwxr-xr-xClasses/CocosOverlayScrollView.h19
-rwxr-xr-xClasses/CocosOverlayScrollView.m110
-rw-r--r--Classes/GameMode.h5
-rw-r--r--Classes/GameMode.m39
-rw-r--r--Classes/GameModeSelection.h30
-rw-r--r--Classes/GameModeSelection.m219
-rw-r--r--Classes/GameModeSelectionDelegate.h17
-rw-r--r--Classes/GameModeSelectionLayer.h25
-rw-r--r--Classes/GameModeSelectionLayer.m132
-rwxr-xr-xClasses/GameOverScene.m6
-rwxr-xr-xClasses/Highscore.h2
-rwxr-xr-xClasses/Highscore.m53
-rwxr-xr-xClasses/HighscoreListController.m37
-rwxr-xr-xClasses/MainMenuLayer.h3
-rwxr-xr-xClasses/MainMenuLayer.m31
-rwxr-xr-xClasses/NMPanelMenu.h14
-rwxr-xr-xClasses/NMPanelMenu.m37
-rwxr-xr-xClasses/TouchDelegatingView.h18
-rwxr-xr-xClasses/TouchDelegatingView.m26
-rw-r--r--Classes/TutorialMode.m58
-rw-r--r--Classes/UIImage+ColorMasking.h15
-rw-r--r--Classes/UIImage+ColorMasking.m77
-rwxr-xr-xResources/Info.plist2
-rwxr-xr-xResources/cartdata.sqlite3bin16384 -> 16384 bytes
-rw-r--r--Resources/feedback.pngbin0 -> 2621 bytes
-rw-r--r--Resources/feedback2.pngbin0 -> 2924 bytes
-rw-r--r--Resources/florence.pngbin0 -> 24142 bytes
-rw-r--r--Resources/paintdaubs.pngbin0 -> 276898 bytes
-rw-r--r--Resources/paris.pngbin0 -> 24164 bytes
-rw-r--r--TestFlight.h35
-rw-r--r--libTestFlight.abin0 -> 2413716 bytes
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
13typedef 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