diff options
-rwxr-xr-x | Cartographic.xcodeproj/project.pbxproj | 68 | ||||
-rwxr-xr-x | Classes/CocosOverlayScrollView.h | 19 | ||||
-rwxr-xr-x | Classes/CocosOverlayScrollView.m | 106 | ||||
-rw-r--r-- | Classes/GameModeSelection.h | 32 | ||||
-rw-r--r-- | Classes/GameModeSelection.m | 228 | ||||
-rw-r--r-- | Classes/GameModeSelectionDelegate.h | 17 | ||||
-rw-r--r-- | Classes/GameModeSelectionLayer.h | 25 | ||||
-rw-r--r-- | Classes/GameModeSelectionLayer.m | 138 | ||||
-rwxr-xr-x | Classes/MainMenuLayer.h | 1 | ||||
-rwxr-xr-x | Classes/MainMenuLayer.m | 17 | ||||
-rwxr-xr-x | Classes/NMPanelMenu.h | 14 | ||||
-rwxr-xr-x | Classes/NMPanelMenu.m | 37 | ||||
-rwxr-xr-x | Classes/TouchDelegatingView.h | 18 | ||||
-rwxr-xr-x | Classes/TouchDelegatingView.m | 26 | ||||
-rw-r--r-- | Classes/TutorialMode.m | 7 | ||||
-rw-r--r-- | Classes/UIImage+ColorMasking.h | 15 | ||||
-rw-r--r-- | Classes/UIImage+ColorMasking.m | 77 | ||||
-rwxr-xr-x | Resources/Info.plist | 2 | ||||
-rw-r--r-- | Resources/florence.png | bin | 0 -> 24142 bytes | |||
-rw-r--r-- | Resources/paintdaubs.png | bin | 0 -> 276898 bytes | |||
-rw-r--r-- | Resources/paris.png | bin | 0 -> 24164 bytes |
21 files changed, 831 insertions, 16 deletions
diff --git a/Cartographic.xcodeproj/project.pbxproj b/Cartographic.xcodeproj/project.pbxproj index 945a239..8479e51 100755 --- a/Cartographic.xcodeproj/project.pbxproj +++ b/Cartographic.xcodeproj/project.pbxproj | |||
@@ -101,6 +101,10 @@ | |||
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 */; }; | ||
104 | 6C19F15B14018EE900F9CCD3 /* libTestFlight.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C19F15A14018EE900F9CCD3 /* libTestFlight.a */; }; | 108 | 6C19F15B14018EE900F9CCD3 /* libTestFlight.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C19F15A14018EE900F9CCD3 /* libTestFlight.a */; }; |
105 | 6C19F1631401917500F9CCD3 /* feedback.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C19F1621401917500F9CCD3 /* feedback.png */; }; | 109 | 6C19F1631401917500F9CCD3 /* feedback.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C19F1621401917500F9CCD3 /* feedback.png */; }; |
106 | 6C19F1651401917900F9CCD3 /* feedback2.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C19F1641401917900F9CCD3 /* feedback2.png */; }; | 110 | 6C19F1651401917900F9CCD3 /* feedback2.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C19F1641401917900F9CCD3 /* feedback2.png */; }; |
@@ -108,6 +112,11 @@ | |||
108 | 6C29041213EAEC8A0032DA0F /* framestuff.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C29041113EAEC8A0032DA0F /* framestuff.png */; }; | 112 | 6C29041213EAEC8A0032DA0F /* framestuff.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C29041113EAEC8A0032DA0F /* framestuff.png */; }; |
109 | 6C39CFE013FC2708002B21AF /* tutorial.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFDF13FC2708002B21AF /* tutorial.png */; }; | 113 | 6C39CFE013FC2708002B21AF /* tutorial.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C39CFDF13FC2708002B21AF /* tutorial.png */; }; |
110 | 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 */; }; | ||
111 | 6C5179C613DF3839006F1F38 /* Morning1.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C5179C513DF3839006F1F38 /* Morning1.png */; }; | 120 | 6C5179C613DF3839006F1F38 /* Morning1.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C5179C513DF3839006F1F38 /* Morning1.png */; }; |
112 | 6CC89DD913F2F4E6003704F7 /* Entitlements.plist in Resources */ = {isa = PBXBuildFile; fileRef = 6CC89DD813F2F4E6003704F7 /* Entitlements.plist */; }; | 121 | 6CC89DD913F2F4E6003704F7 /* Entitlements.plist in Resources */ = {isa = PBXBuildFile; fileRef = 6CC89DD813F2F4E6003704F7 /* Entitlements.plist */; }; |
113 | 6CC89DDF13F31413003704F7 /* TutorialMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CC89DDE13F31413003704F7 /* TutorialMode.m */; }; | 122 | 6CC89DDF13F31413003704F7 /* TutorialMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CC89DDE13F31413003704F7 /* TutorialMode.m */; }; |
@@ -409,6 +418,14 @@ | |||
409 | 6C0C141013F2099B003A31B2 /* Cart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Cart.m; sourceTree = "<group>"; }; | 418 | 6C0C141013F2099B003A31B2 /* Cart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Cart.m; sourceTree = "<group>"; }; |
410 | 6C0C141213F20E98003A31B2 /* GameMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameMode.h; sourceTree = "<group>"; }; | 419 | 6C0C141213F20E98003A31B2 /* GameMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameMode.h; sourceTree = "<group>"; }; |
411 | 6C0C141313F20E98003A31B2 /* GameMode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GameMode.m; sourceTree = "<group>"; }; | 420 | 6C0C141313F20E98003A31B2 /* GameMode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GameMode.m; sourceTree = "<group>"; }; |
421 | 6C18C3C81402AD9C0005AA4C /* UIImage+ColorMasking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+ColorMasking.h"; sourceTree = "<group>"; }; | ||
422 | 6C18C3C91402AD9C0005AA4C /* UIImage+ColorMasking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+ColorMasking.m"; sourceTree = "<group>"; }; | ||
423 | 6C18C3CC14033DBF0005AA4C /* CocosOverlayScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CocosOverlayScrollView.h; sourceTree = "<group>"; }; | ||
424 | 6C18C3CD14033DC10005AA4C /* CocosOverlayScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CocosOverlayScrollView.m; sourceTree = "<group>"; }; | ||
425 | 6C18C3CE14033DC20005AA4C /* NMPanelMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMPanelMenu.h; sourceTree = "<group>"; }; | ||
426 | 6C18C3CF14033DC30005AA4C /* NMPanelMenu.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMPanelMenu.m; sourceTree = "<group>"; }; | ||
427 | 6C18C3D014033DC40005AA4C /* TouchDelegatingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TouchDelegatingView.h; sourceTree = "<group>"; }; | ||
428 | 6C18C3D114033DC40005AA4C /* TouchDelegatingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TouchDelegatingView.m; sourceTree = "<group>"; }; | ||
412 | 6C19F15A14018EE900F9CCD3 /* libTestFlight.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libTestFlight.a; sourceTree = "<group>"; }; | 429 | 6C19F15A14018EE900F9CCD3 /* libTestFlight.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libTestFlight.a; sourceTree = "<group>"; }; |
413 | 6C19F15D14018FDF00F9CCD3 /* TestFlight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestFlight.h; sourceTree = "<group>"; }; | 430 | 6C19F15D14018FDF00F9CCD3 /* TestFlight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestFlight.h; sourceTree = "<group>"; }; |
414 | 6C19F1621401917500F9CCD3 /* feedback.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = feedback.png; sourceTree = "<group>"; }; | 431 | 6C19F1621401917500F9CCD3 /* feedback.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = feedback.png; sourceTree = "<group>"; }; |
@@ -418,7 +435,15 @@ | |||
418 | 6C29041113EAEC8A0032DA0F /* framestuff.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = framestuff.png; sourceTree = "<group>"; }; | 435 | 6C29041113EAEC8A0032DA0F /* framestuff.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = framestuff.png; sourceTree = "<group>"; }; |
419 | 6C39CFDF13FC2708002B21AF /* tutorial.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial.png; sourceTree = "<group>"; }; | 436 | 6C39CFDF13FC2708002B21AF /* tutorial.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial.png; sourceTree = "<group>"; }; |
420 | 6C39CFE113FC2713002B21AF /* tutorial2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial2.png; sourceTree = "<group>"; }; | 437 | 6C39CFE113FC2713002B21AF /* tutorial2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial2.png; sourceTree = "<group>"; }; |
438 | 6C39CFF113FD4F87002B21AF /* GameModeSelection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameModeSelection.h; sourceTree = "<group>"; }; | ||
439 | 6C39CFF213FD4F89002B21AF /* GameModeSelection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GameModeSelection.m; sourceTree = "<group>"; }; | ||
440 | 6C39CFF413FD5526002B21AF /* paintdaubs.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = paintdaubs.png; sourceTree = "<group>"; }; | ||
441 | 6C39CFF613FD7636002B21AF /* GameModeSelectionLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameModeSelectionLayer.h; sourceTree = "<group>"; }; | ||
442 | 6C39CFF713FD7637002B21AF /* GameModeSelectionLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GameModeSelectionLayer.m; sourceTree = "<group>"; }; | ||
443 | 6C39D00713FD9037002B21AF /* florence.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = florence.png; sourceTree = "<group>"; }; | ||
444 | 6C39D01113FD9945002B21AF /* paris.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = paris.png; sourceTree = "<group>"; }; | ||
421 | 6C5179C513DF3839006F1F38 /* Morning1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Morning1.png; sourceTree = "<group>"; }; | 445 | 6C5179C513DF3839006F1F38 /* Morning1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Morning1.png; sourceTree = "<group>"; }; |
446 | 6CB532581403BA4F00780A5E /* GameModeSelectionDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameModeSelectionDelegate.h; sourceTree = "<group>"; }; | ||
422 | 6CC89DD813F2F4E6003704F7 /* Entitlements.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Entitlements.plist; sourceTree = "<group>"; }; | 447 | 6CC89DD813F2F4E6003704F7 /* Entitlements.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Entitlements.plist; sourceTree = "<group>"; }; |
423 | 6CC89DDD13F31413003704F7 /* TutorialMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TutorialMode.h; sourceTree = "<group>"; }; | 448 | 6CC89DDD13F31413003704F7 /* TutorialMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TutorialMode.h; sourceTree = "<group>"; }; |
424 | 6CC89DDE13F31413003704F7 /* TutorialMode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TutorialMode.m; sourceTree = "<group>"; }; | 449 | 6CC89DDE13F31413003704F7 /* TutorialMode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TutorialMode.m; sourceTree = "<group>"; }; |
@@ -704,6 +729,7 @@ | |||
704 | 2D500B1D0D5A766B00DBA0E3 /* Classes */ = { | 729 | 2D500B1D0D5A766B00DBA0E3 /* Classes */ = { |
705 | isa = PBXGroup; | 730 | isa = PBXGroup; |
706 | children = ( | 731 | children = ( |
732 | 6CB532561403492E00780A5E /* Selection Screen */, | ||
707 | 6C0C141513F211C7003A31B2 /* Game Modes */, | 733 | 6C0C141513F211C7003A31B2 /* Game Modes */, |
708 | 6C5887E313EE3ED900B5A80A /* Items */, | 734 | 6C5887E313EE3ED900B5A80A /* Items */, |
709 | E0F81035120A173C005866B8 /* GameConfig.h */, | 735 | E0F81035120A173C005866B8 /* GameConfig.h */, |
@@ -728,6 +754,7 @@ | |||
728 | 3F6C7F4C13D647AF00C038FE /* Backgrounds */ = { | 754 | 3F6C7F4C13D647AF00C038FE /* Backgrounds */ = { |
729 | isa = PBXGroup; | 755 | isa = PBXGroup; |
730 | children = ( | 756 | children = ( |
757 | 6C39CFF413FD5526002B21AF /* paintdaubs.png */, | ||
731 | 6C5179C513DF3839006F1F38 /* Morning1.png */, | 758 | 6C5179C513DF3839006F1F38 /* Morning1.png */, |
732 | 3F6C7F4A13D647A600C038FE /* GameOver.png */, | 759 | 3F6C7F4A13D647A600C038FE /* GameOver.png */, |
733 | 3F6C7F2313D63E6500C038FE /* SeaBeach.png */, | 760 | 3F6C7F2313D63E6500C038FE /* SeaBeach.png */, |
@@ -856,6 +883,7 @@ | |||
856 | 50F4144210692EE7002A0D5E /* Resources */ = { | 883 | 50F4144210692EE7002A0D5E /* Resources */ = { |
857 | isa = PBXGroup; | 884 | isa = PBXGroup; |
858 | children = ( | 885 | children = ( |
886 | 6C39D00513FD901A002B21AF /* Icons */, | ||
859 | 3F7D0EC713D8E6B000B6CE14 /* Buttons */, | 887 | 3F7D0EC713D8E6B000B6CE14 /* Buttons */, |
860 | 3F8395B713D744420059AEE8 /* cartdata.sqlite3 */, | 888 | 3F8395B713D744420059AEE8 /* cartdata.sqlite3 */, |
861 | 3F6C7F5D13D648D300C038FE /* Fonts */, | 889 | 3F6C7F5D13D648D300C038FE /* Fonts */, |
@@ -887,6 +915,15 @@ | |||
887 | name = "Game Modes"; | 915 | name = "Game Modes"; |
888 | sourceTree = "<group>"; | 916 | sourceTree = "<group>"; |
889 | }; | 917 | }; |
918 | 6C39D00513FD901A002B21AF /* Icons */ = { | ||
919 | isa = PBXGroup; | ||
920 | children = ( | ||
921 | 6C39D01113FD9945002B21AF /* paris.png */, | ||
922 | 6C39D00713FD9037002B21AF /* florence.png */, | ||
923 | ); | ||
924 | name = Icons; | ||
925 | sourceTree = "<group>"; | ||
926 | }; | ||
890 | 6C5887E313EE3ED900B5A80A /* Items */ = { | 927 | 6C5887E313EE3ED900B5A80A /* Items */ = { |
891 | isa = PBXGroup; | 928 | isa = PBXGroup; |
892 | children = ( | 929 | children = ( |
@@ -909,6 +946,26 @@ | |||
909 | name = Items; | 946 | name = Items; |
910 | sourceTree = "<group>"; | 947 | sourceTree = "<group>"; |
911 | }; | 948 | }; |
949 | 6CB532561403492E00780A5E /* Selection Screen */ = { | ||
950 | isa = PBXGroup; | ||
951 | children = ( | ||
952 | 6C39CFF113FD4F87002B21AF /* GameModeSelection.h */, | ||
953 | 6C39CFF213FD4F89002B21AF /* GameModeSelection.m */, | ||
954 | 6C39CFF613FD7636002B21AF /* GameModeSelectionLayer.h */, | ||
955 | 6C39CFF713FD7637002B21AF /* GameModeSelectionLayer.m */, | ||
956 | 6C18C3C81402AD9C0005AA4C /* UIImage+ColorMasking.h */, | ||
957 | 6C18C3C91402AD9C0005AA4C /* UIImage+ColorMasking.m */, | ||
958 | 6C18C3CC14033DBF0005AA4C /* CocosOverlayScrollView.h */, | ||
959 | 6C18C3CD14033DC10005AA4C /* CocosOverlayScrollView.m */, | ||
960 | 6C18C3CE14033DC20005AA4C /* NMPanelMenu.h */, | ||
961 | 6C18C3CF14033DC30005AA4C /* NMPanelMenu.m */, | ||
962 | 6C18C3D014033DC40005AA4C /* TouchDelegatingView.h */, | ||
963 | 6C18C3D114033DC40005AA4C /* TouchDelegatingView.m */, | ||
964 | 6CB532581403BA4F00780A5E /* GameModeSelectionDelegate.h */, | ||
965 | ); | ||
966 | name = "Selection Screen"; | ||
967 | sourceTree = "<group>"; | ||
968 | }; | ||
912 | E02BBB19126CC2F5006E46A2 /* cocos2d */ = { | 969 | E02BBB19126CC2F5006E46A2 /* cocos2d */ = { |
913 | isa = PBXGroup; | 970 | isa = PBXGroup; |
914 | children = ( | 971 | children = ( |
@@ -1375,6 +1432,9 @@ | |||
1375 | 6CC89DD913F2F4E6003704F7 /* Entitlements.plist in Resources */, | 1432 | 6CC89DD913F2F4E6003704F7 /* Entitlements.plist in Resources */, |
1376 | 6C39CFE013FC2708002B21AF /* tutorial.png in Resources */, | 1433 | 6C39CFE013FC2708002B21AF /* tutorial.png in Resources */, |
1377 | 6C39CFE213FC2713002B21AF /* tutorial2.png in Resources */, | 1434 | 6C39CFE213FC2713002B21AF /* tutorial2.png in Resources */, |
1435 | 6C39CFF513FD5526002B21AF /* paintdaubs.png in Resources */, | ||
1436 | 6C39D00813FD9037002B21AF /* florence.png in Resources */, | ||
1437 | 6C39D01213FD9945002B21AF /* paris.png in Resources */, | ||
1378 | 6C19F1631401917500F9CCD3 /* feedback.png in Resources */, | 1438 | 6C19F1631401917500F9CCD3 /* feedback.png in Resources */, |
1379 | 6C19F1651401917900F9CCD3 /* feedback2.png in Resources */, | 1439 | 6C19F1651401917900F9CCD3 /* feedback2.png in Resources */, |
1380 | ); | 1440 | ); |
@@ -1421,6 +1481,12 @@ | |||
1421 | 6C0C141113F2099B003A31B2 /* Cart.m in Sources */, | 1481 | 6C0C141113F2099B003A31B2 /* Cart.m in Sources */, |
1422 | 6C0C141413F20E98003A31B2 /* GameMode.m in Sources */, | 1482 | 6C0C141413F20E98003A31B2 /* GameMode.m in Sources */, |
1423 | 6CC89DDF13F31413003704F7 /* TutorialMode.m in Sources */, | 1483 | 6CC89DDF13F31413003704F7 /* TutorialMode.m in Sources */, |
1484 | 6C39CFF313FD4F8B002B21AF /* GameModeSelection.m in Sources */, | ||
1485 | 6C39CFF813FD7638002B21AF /* GameModeSelectionLayer.m in Sources */, | ||
1486 | 6C18C3CA1402AD9C0005AA4C /* UIImage+ColorMasking.m in Sources */, | ||
1487 | 6C18C3D214033DC50005AA4C /* CocosOverlayScrollView.m in Sources */, | ||
1488 | 6C18C3D314033DC60005AA4C /* NMPanelMenu.m in Sources */, | ||
1489 | 6C18C3D414033DC60005AA4C /* TouchDelegatingView.m in Sources */, | ||
1424 | ); | 1490 | ); |
1425 | runOnlyForDeploymentPostprocessing = 0; | 1491 | runOnlyForDeploymentPostprocessing = 0; |
1426 | }; | 1492 | }; |
@@ -1549,6 +1615,7 @@ | |||
1549 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | 1615 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; |
1550 | COPY_PHASE_STRIP = NO; | 1616 | COPY_PHASE_STRIP = NO; |
1551 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | 1617 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
1618 | GCC_C_LANGUAGE_STANDARD = c99; | ||
1552 | GCC_DYNAMIC_NO_PIC = NO; | 1619 | GCC_DYNAMIC_NO_PIC = NO; |
1553 | GCC_OPTIMIZATION_LEVEL = 0; | 1620 | GCC_OPTIMIZATION_LEVEL = 0; |
1554 | GCC_PRECOMPILE_PREFIX_HEADER = YES; | 1621 | GCC_PRECOMPILE_PREFIX_HEADER = YES; |
@@ -1581,6 +1648,7 @@ | |||
1581 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | 1648 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; |
1582 | COPY_PHASE_STRIP = YES; | 1649 | COPY_PHASE_STRIP = YES; |
1583 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | 1650 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
1651 | GCC_C_LANGUAGE_STANDARD = c99; | ||
1584 | GCC_PRECOMPILE_PREFIX_HEADER = YES; | 1652 | GCC_PRECOMPILE_PREFIX_HEADER = YES; |
1585 | GCC_PREFIX_HEADER = Cart_Collect_Prefix.pch; | 1653 | GCC_PREFIX_HEADER = Cart_Collect_Prefix.pch; |
1586 | GCC_TREAT_WARNINGS_AS_ERRORS = NO; | 1654 | GCC_TREAT_WARNINGS_AS_ERRORS = NO; |
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..dee9dfe --- /dev/null +++ b/Classes/CocosOverlayScrollView.m | |||
@@ -0,0 +1,106 @@ | |||
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 | [pageControl setCurrentPage:(NSUInteger)([scrollView contentOffset].x / [scrollView frame].size.width)]; | ||
104 | } | ||
105 | |||
106 | @end \ No newline at end of file | ||
diff --git a/Classes/GameModeSelection.h b/Classes/GameModeSelection.h new file mode 100644 index 0000000..f69ea37 --- /dev/null +++ b/Classes/GameModeSelection.h | |||
@@ -0,0 +1,32 @@ | |||
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 highscore:(int)highscore; | ||
26 | + (id)selectionWithName:(NSString *)name location:(NSString *)location filename:(NSString *)filename unlockCondition:(NSString*)unlockCondition; | ||
27 | - (id)initWithName:(NSString*)name location:(NSString*)location filename:(NSString*)filename unlocked:(BOOL)unlocked; | ||
28 | - (id)initWithName:(NSString *)name location:(NSString *)location filename:(NSString *)filename highscore:(int)highscore; | ||
29 | - (id)initWithName:(NSString *)name location:(NSString *)location filename:(NSString *)filename unlockCondition:(NSString*)unlockCondition; | ||
30 | - (void)buttonTapped; | ||
31 | |||
32 | @end | ||
diff --git a/Classes/GameModeSelection.m b/Classes/GameModeSelection.m new file mode 100644 index 0000000..582c9dd --- /dev/null +++ b/Classes/GameModeSelection.m | |||
@@ -0,0 +1,228 @@ | |||
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 | |||
13 | @implementation GameModeSelection | ||
14 | |||
15 | @synthesize name, location, unlocked, delegate; | ||
16 | |||
17 | + (id)selectionWithName:(NSString*)name location:(NSString*)location filename:(NSString*)filename unlocked:(BOOL)unlocked | ||
18 | { | ||
19 | return [[[GameModeSelection alloc] initWithName:name location:location filename:filename unlocked:unlocked] autorelease]; | ||
20 | } | ||
21 | |||
22 | + (id)selectionWithName:(NSString *)name location:(NSString *)location filename:(NSString *)filename highscore:(int)highscore | ||
23 | { | ||
24 | return [[[GameModeSelection alloc] initWithName:name location:location filename:filename highscore:highscore] autorelease]; | ||
25 | } | ||
26 | |||
27 | + (id)selectionWithName:(NSString *)name location:(NSString *)location filename:(NSString *)filename unlockCondition:(NSString*)unlockCondition | ||
28 | { | ||
29 | return [[[GameModeSelection alloc] initWithName:name location:location filename:filename unlockCondition:unlockCondition] autorelease]; | ||
30 | } | ||
31 | |||
32 | - (id)initWithName:(NSString*)m_name location:(NSString*)m_location filename:(NSString*)filename unlocked:(BOOL)m_unlocked; | ||
33 | { | ||
34 | self = [super initWithTarget:nil selector:nil]; | ||
35 | |||
36 | if (nil != self) | ||
37 | { | ||
38 | self.anchorPoint = CGPointMake(0.5f, 0.5f); | ||
39 | |||
40 | name = m_name; | ||
41 | location = m_location; | ||
42 | unlocked = m_unlocked; | ||
43 | |||
44 | contentSize_ = CGSizeMake(128, 320); | ||
45 | |||
46 | NSString* filenameMod; | ||
47 | |||
48 | if (unlocked) | ||
49 | { | ||
50 | filenameMod = [NSString stringWithFormat:@"%@-unlocked", filename]; | ||
51 | } else { | ||
52 | filenameMod = [NSString stringWithFormat:@"%@-locked", filename]; | ||
53 | name = [@"" stringByPaddingToLength:name.length withString:@"?" startingAtIndex:0]; | ||
54 | location = [@"" stringByPaddingToLength:location.length withString:@"?" startingAtIndex:0]; | ||
55 | } | ||
56 | |||
57 | // First, create the frame that we will put the level picture inside | ||
58 | CGImageRef framestuff = [[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"framestuff" ofType:@"png"]] CGImage]; | ||
59 | CGImageRef topLeftRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 0, 8, 8)); | ||
60 | CGImageRef topRightRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 0, 8, 8)); | ||
61 | CGImageRef bottomLeftRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 8, 8, 8)); | ||
62 | CGImageRef bottomRightRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 8, 8, 8)); | ||
63 | CGImageRef topBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 16, 8, 8)); | ||
64 | CGImageRef leftBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 16, 8, 8)); | ||
65 | CGImageRef rightBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 24, 8, 8)); | ||
66 | CGImageRef bottomBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 24, 8, 8)); | ||
67 | UIImage* topLeft = [UIImage imageWithCGImage:topLeftRef]; | ||
68 | UIImage* topRight = [UIImage imageWithCGImage:topRightRef]; | ||
69 | UIImage* bottomLeft = [UIImage imageWithCGImage:bottomLeftRef]; | ||
70 | UIImage* bottomRight = [UIImage imageWithCGImage:bottomRightRef]; | ||
71 | UIImage* topBorder = [UIImage imageWithCGImage:topBorderRef]; | ||
72 | UIImage* leftBorder = [UIImage imageWithCGImage:leftBorderRef]; | ||
73 | UIImage* rightBorder = [UIImage imageWithCGImage:rightBorderRef]; | ||
74 | UIImage* bottomBorder = [UIImage imageWithCGImage:bottomBorderRef]; | ||
75 | CGImageRelease(topLeftRef); | ||
76 | CGImageRelease(topRightRef); | ||
77 | CGImageRelease(bottomLeftRef); | ||
78 | CGImageRelease(bottomRightRef); | ||
79 | CGImageRelease(topBorderRef); | ||
80 | CGImageRelease(leftBorderRef); | ||
81 | CGImageRelease(rightBorderRef); | ||
82 | CGImageRelease(bottomBorderRef); | ||
83 | |||
84 | CGSize boxSize = CGSizeMake(128+12, 128+12); | ||
85 | UIGraphicsBeginImageContext(boxSize); | ||
86 | CGContextRef context = UIGraphicsGetCurrentContext(); | ||
87 | [topLeft drawInRect:CGRectMake(0, 0, 8, 8)]; | ||
88 | [topBorder drawInRect:CGRectMake(8, 0, boxSize.width-16, 8)]; | ||
89 | [topRight drawInRect:CGRectMake(8+boxSize.width-16, 0, 8, 8)]; | ||
90 | [rightBorder drawInRect:CGRectMake(8+boxSize.width-16, 8, 8, boxSize.height-16)]; | ||
91 | [bottomRight drawInRect:CGRectMake(8+boxSize.width-16, 8+boxSize.height-16, 8, 8)]; | ||
92 | [bottomBorder drawInRect:CGRectMake(8, 8+boxSize.height-16, boxSize.width-16, 8)]; | ||
93 | [bottomLeft drawInRect:CGRectMake(0, 8+boxSize.height-16, 8, 8)]; | ||
94 | [leftBorder drawInRect:CGRectMake(0, 8, 8, boxSize.height-16)]; | ||
95 | CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]); | ||
96 | CGContextFillRect(context, CGRectMake(8, 8, boxSize.width-16, boxSize.height-16)); | ||
97 | UIImage* selectionBackground = UIGraphicsGetImageFromCurrentImageContext(); | ||
98 | |||
99 | // Now we want to put the level image inside the frame without messing up the frame itself | ||
100 | UIImage* innerPicture = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:filename ofType:@"png"]]; | ||
101 | CGContextClipToMask(context, CGRectMake(0, 0, boxSize.width, boxSize.height), [[selectionBackground opaqueMaskFromWhiteImage] CGImage]); | ||
102 | [innerPicture drawInRect:CGRectMake(6, 6, 128, 128)]; | ||
103 | selectionBackground = UIGraphicsGetImageFromCurrentImageContext(); | ||
104 | UIGraphicsEndImageContext(); | ||
105 | |||
106 | // The frame needs a shadow, so let's redraw it in a new context | ||
107 | UIGraphicsBeginImageContext(CGSizeMake(boxSize.width+10, boxSize.height+10)); | ||
108 | context = UIGraphicsGetCurrentContext(); | ||
109 | CGContextSaveGState(context); | ||
110 | |||
111 | if (unlocked) | ||
112 | { | ||
113 | CGContextSetShadow(context, CGSizeMake(-6, 6), 4.0f); | ||
114 | [selectionBackground drawInRect:CGRectMake(10, 0, boxSize.width, boxSize.height)]; | ||
115 | } else { | ||
116 | // Draw the picture in grayscale if the level has not yet been unlocked | ||
117 | CGContextClipToMask(context, CGRectMake(10, 0, boxSize.width, boxSize.height), [selectionBackground CGImage]); | ||
118 | CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]); | ||
119 | CGContextFillRect(context, CGRectMake(10, 0, boxSize.width, boxSize.height)); | ||
120 | CGContextRestoreGState(context); | ||
121 | |||
122 | CGContextSaveGState(context); | ||
123 | CGContextSetShadow(context, CGSizeMake(-6, 6), 4.0f); | ||
124 | [selectionBackground drawInRect:CGRectMake(10, 0, boxSize.width, boxSize.height) blendMode:kCGBlendModeLuminosity alpha:1.0]; | ||
125 | } | ||
126 | |||
127 | CGContextRestoreGState(context); | ||
128 | CGImageRef pictureRef = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | ||
129 | |||
130 | CCSprite* picture = [CCSprite spriteWithCGImage:pictureRef key:[NSString stringWithFormat:@"gms-%@", filenameMod]]; | ||
131 | |||
132 | // We're also going to need a "selected" image state for the button | ||
133 | CGContextSaveGState(context); | ||
134 | CGContextClipToMask(context, CGRectMake(10, 0, boxSize.width, boxSize.height), [selectionBackground CGImage]); | ||
135 | CGContextSetFillColorWithColor(context, [[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5] CGColor]); | ||
136 | CGContextFillRect(context, CGRectMake(10, 0, boxSize.width, boxSize.height)); | ||
137 | CGContextRestoreGState(context); | ||
138 | CGImageRef selectedButtonRef = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | ||
139 | UIGraphicsEndImageContext(); | ||
140 | CCSprite* selectedButton = [CCSprite spriteWithCGImage:selectedButtonRef key:[NSString stringWithFormat:@"gms-%@-selected", filenameMod]]; | ||
141 | |||
142 | CCMenuItemSprite* pictureMenuItem = [CCMenuItemSprite itemFromNormalSprite:picture selectedSprite:selectedButton target:self selector:@selector(buttonTapped)]; | ||
143 | NMPanelMenu* theMenu = [NMPanelMenu menuWithItems:pictureMenuItem, nil]; | ||
144 | theMenu.position = ccp(-5, 0); | ||
145 | [self addChild:theMenu]; | ||
146 | |||
147 | // Render the titles | ||
148 | UIFont* titleFont = [UIFont fontWithName:@"AmericanTypewriter-Bold" size:18.0f]; | ||
149 | CGSize titleSize = [location sizeWithFont:titleFont constrainedToSize:CGSizeMake(128, 0)]; | ||
150 | UIFont* subtitleFont = [UIFont fontWithName:@"AmericanTypewriter" size:18.0f]; | ||
151 | CGSize subtitleSize = [name sizeWithFont:subtitleFont constrainedToSize:CGSizeMake(128, 0)]; | ||
152 | CGSize combinedTitleSize = CGSizeMake(128, titleSize.height + 10 + subtitleSize.height + 10); | ||
153 | |||
154 | UIGraphicsBeginImageContext(combinedTitleSize); | ||
155 | context = UIGraphicsGetCurrentContext(); | ||
156 | CGContextSetShadow(context, CGSizeMake(-6, 6), 4.0f); | ||
157 | [location drawInRect:CGRectMake(10, 0, 128, titleSize.height) withFont:titleFont lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentCenter]; | ||
158 | [name drawInRect:CGRectMake(10, titleSize.height, 128, subtitleSize.height) withFont:subtitleFont lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentCenter]; | ||
159 | |||
160 | CGImageRef titleImage = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | ||
161 | UIGraphicsEndImageContext(); | ||
162 | CCSprite* titleSprite = [CCSprite spriteWithCGImage:titleImage key:[NSString stringWithFormat:@"gms-%@-title", filenameMod]]; | ||
163 | titleSprite.position = ccp(-10, (boxSize.height)/2+(combinedTitleSize.height)/2); | ||
164 | [self addChild:titleSprite]; | ||
165 | } | ||
166 | |||
167 | return self; | ||
168 | } | ||
169 | |||
170 | - (id)initWithName:(NSString *)m_name location:(NSString *)m_location filename:(NSString *)m_filename highscore:(int)m_highscore | ||
171 | { | ||
172 | self = [self initWithName:m_name location:m_location filename:m_filename unlocked:YES]; | ||
173 | |||
174 | if (nil != self) | ||
175 | { | ||
176 | if (m_highscore != 0) | ||
177 | { | ||
178 | // Render the highscore label | ||
179 | NSString* highscoreString = [NSString stringWithFormat:@"Highscore: %d", m_highscore]; | ||
180 | UIFont* highscoreFont = [UIFont fontWithName:@"AmericanTypewriter" size:16.0f]; | ||
181 | CGSize highscoreSize = [highscoreString sizeWithFont:highscoreFont]; | ||
182 | |||
183 | UIGraphicsBeginImageContext(CGSizeMake(highscoreSize.width+10, highscoreSize.height+10)); | ||
184 | CGContextRef context = UIGraphicsGetCurrentContext(); | ||
185 | CGContextSetShadow(context, CGSizeMake(-6, 6), 4.0f); | ||
186 | [highscoreString drawInRect:CGRectMake(10, 0, highscoreSize.width, highscoreSize.height) withFont:highscoreFont]; | ||
187 | |||
188 | CGImageRef highscoreImage = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; | ||
189 | UIGraphicsEndImageContext(); | ||
190 | CCSprite* highscoreSprite = [CCSprite spriteWithCGImage:highscoreImage key:[NSString stringWithFormat:@"gms-%@-highscore", m_filename]]; | ||
191 | highscoreSprite.position = ccp((128-highscoreSize.width)/2, 0-64-(highscoreSize.height)/2-10); | ||
192 | [self addChild:highscoreSprite]; | ||
193 | } | ||
194 | } | ||
195 | |||
196 | return self; | ||
197 | } | ||
198 | |||
199 | - (id)initWithName:(NSString *)m_name location:(NSString *)m_location filename:(NSString *)m_filename unlockCondition:(NSString*)m_unlockCondition | ||
200 | { | ||
201 | self = [self initWithName:m_name location:m_location filename:m_filename unlocked:NO]; | ||
202 | |||
203 | if (nil != self) | ||
204 | { | ||
205 | unlockCondition = m_unlockCondition; | ||
206 | } | ||
207 | |||
208 | return self; | ||
209 | } | ||
210 | |||
211 | - (void)buttonTapped | ||
212 | { | ||
213 | if (unlocked) | ||
214 | { | ||
215 | if (delegate != nil) | ||
216 | { | ||
217 | [delegate didSelectGameMode:self]; | ||
218 | } else { | ||
219 | NSLog(@"I don't have a GameModeSelectionDelegate to call for some reason..."); | ||
220 | } | ||
221 | } else { | ||
222 | UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"To unlock this game mode:" message:unlockCondition delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:nil]; | ||
223 | [alertView show]; | ||
224 | [alertView release]; | ||
225 | } | ||
226 | } | ||
227 | |||
228 | @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..ad6a455 --- /dev/null +++ b/Classes/GameModeSelectionLayer.m | |||
@@ -0,0 +1,138 @@ | |||
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 | |||
17 | @implementation GameModeSelectionLayer | ||
18 | |||
19 | + (CCScene*)scene | ||
20 | { | ||
21 | CCScene* scene = [CCScene node]; | ||
22 | |||
23 | CCLayer* backgroundLayer = [[[CCLayer alloc] init] autorelease]; | ||
24 | CCSprite* backgroundImage = [CCSprite spriteWithFile:@"paintdaubs.png"]; | ||
25 | backgroundImage.position = ccp(240,160); | ||
26 | [backgroundLayer addChild:backgroundImage]; | ||
27 | [scene addChild:backgroundLayer]; | ||
28 | |||
29 | GameModeSelectionLayer* layer = [GameModeSelectionLayer node]; | ||
30 | [scene addChild:layer]; | ||
31 | |||
32 | return scene; | ||
33 | } | ||
34 | |||
35 | - (id)init | ||
36 | { | ||
37 | self = [super init]; | ||
38 | |||
39 | if (nil != self) | ||
40 | { | ||
41 | gameModes = [[NSMutableArray alloc] init]; | ||
42 | CCMenu* menu = [CCMenu menuWithItems:nil]; | ||
43 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
44 | float onePanelWide = 128; | ||
45 | |||
46 | GameModeSelection* tutorialSelection = [GameModeSelection selectionWithName:@"Tutorial" location:@"Florence" filename:@"florence" unlocked:YES]; | ||
47 | [gameModes addObject:tutorialSelection]; | ||
48 | |||
49 | GameModeSelection* collectSelection; | ||
50 | |||
51 | if ([defaults boolForKey:@"hasDoneTutorial"]) | ||
52 | { | ||
53 | const char* sqlQuery = "SELECT * FROM highscores ORDER BY score DESC LIMIT 1"; | ||
54 | sqlite3_stmt* compiled_statement; | ||
55 | int score = 0; | ||
56 | |||
57 | if (sqlite3_prepare_v2([Cart_CollectAppDelegate database], sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK) | ||
58 | { | ||
59 | if (sqlite3_step(compiled_statement) == SQLITE_ROW) | ||
60 | { | ||
61 | score = sqlite3_column_int(compiled_statement, 2); | ||
62 | } | ||
63 | } | ||
64 | |||
65 | collectSelection = [GameModeSelection selectionWithName:@"Collect" location:@"Paris" filename:@"paris" highscore:score]; | ||
66 | } else { | ||
67 | collectSelection = [GameModeSelection selectionWithName:@"Collect" location:@"Paris" filename:@"paris" unlockCondition:@"Beat the tutorial!"]; | ||
68 | } | ||
69 | |||
70 | [gameModes addObject:collectSelection]; | ||
71 | |||
72 | float padding = 15; | ||
73 | float totalPanelWidth = onePanelWide + padding*2; | ||
74 | float numberOfPanels = [gameModes count]; | ||
75 | float totalWidth = numberOfPanels * totalPanelWidth; | ||
76 | int currentWorldOffset = [defaults integerForKey:@"lastSelectedMode"]; | ||
77 | CCLayer* panels = [CCLayer node]; | ||
78 | |||
79 | for (GameModeSelection* gameMode in gameModes) | ||
80 | { | ||
81 | [gameMode setDelegate:self]; | ||
82 | [menu addChild:gameMode]; | ||
83 | } | ||
84 | |||
85 | [menu alignItemsHorizontallyWithPadding:padding*2]; | ||
86 | [panels addChild:menu]; | ||
87 | [self addChild:panels]; | ||
88 | |||
89 | pageControl = [[UIPageControl alloc] init]; | ||
90 | pageControl.numberOfPages = numberOfPanels; | ||
91 | pageControl.currentPage = currentWorldOffset; | ||
92 | pageControl.frame = CGRectMake(0, 250, 480, 20); | ||
93 | [[[CCDirector sharedDirector] openGLView] addSubview:pageControl]; | ||
94 | |||
95 | menu.position = ccpAdd(menu.position, ccp(totalWidth/2 - totalPanelWidth/2, 320)); | ||
96 | touchDelegatingView = [[TouchDelegatingView alloc] initWithFrame:CGRectMake(0, 0, 480, 320)]; | ||
97 | scrollView = [[CocosOverlayScrollView alloc] initWithFrame:CGRectMake(0, 0, totalPanelWidth, 320) numPages:numberOfPanels width:totalPanelWidth layer:panels pageControl:pageControl]; | ||
98 | touchDelegatingView.scrollView = scrollView; | ||
99 | [scrollView setContentOffset:CGPointMake(currentWorldOffset*totalPanelWidth+1,0) animated:NO]; | ||
100 | [[[CCDirector sharedDirector] openGLView] addSubview:touchDelegatingView]; | ||
101 | [[[CCDirector sharedDirector] openGLView] addSubview:scrollView]; | ||
102 | |||
103 | CCMenuItemImage* newgameMenuItem = [CCMenuItemImage itemFromNormalImage:@"back.png" selectedImage:@"back2.png" target:self selector:@selector(mainmenu)]; | ||
104 | CCMenu* myMenu = [CCMenu menuWithItems:newgameMenuItem, nil]; | ||
105 | myMenu.position = ccp(240, 30); | ||
106 | [self addChild:myMenu]; | ||
107 | } | ||
108 | |||
109 | return self; | ||
110 | } | ||
111 | |||
112 | - (void)onExit | ||
113 | { | ||
114 | [touchDelegatingView removeFromSuperview]; | ||
115 | [scrollView removeFromSuperview]; | ||
116 | [pageControl removeFromSuperview]; | ||
117 | } | ||
118 | |||
119 | - (void)mainmenu | ||
120 | { | ||
121 | [[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]]; | ||
122 | } | ||
123 | |||
124 | - (void)didSelectGameMode:(GameModeSelection *)gameMode | ||
125 | { | ||
126 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
127 | [defaults setInteger:[gameModes indexOfObject:gameMode] forKey:@"lastSelectedMode"]; | ||
128 | |||
129 | if ([gameMode.name isEqual:@"Tutorial"]) | ||
130 | { | ||
131 | [[CCDirector sharedDirector] replaceScene:[TutorialMode scene]]; | ||
132 | } else if ([gameMode.name isEqual:@"Collect"]) | ||
133 | { | ||
134 | [[CCDirector sharedDirector] replaceScene:[ClassicGameMode scene]]; | ||
135 | } | ||
136 | } | ||
137 | |||
138 | @end | ||
diff --git a/Classes/MainMenuLayer.h b/Classes/MainMenuLayer.h index 4914b59..439056c 100755 --- a/Classes/MainMenuLayer.h +++ b/Classes/MainMenuLayer.h | |||
@@ -16,7 +16,6 @@ | |||
16 | + (CCScene*)scene; | 16 | + (CCScene*)scene; |
17 | - (id)init; | 17 | - (id)init; |
18 | - (void)newgame; | 18 | - (void)newgame; |
19 | - (void)tutorial; | ||
20 | - (void)highscores; | 19 | - (void)highscores; |
21 | - (void)feedback; | 20 | - (void)feedback; |
22 | 21 | ||
diff --git a/Classes/MainMenuLayer.m b/Classes/MainMenuLayer.m index 32b85cb..d4a6331 100755 --- a/Classes/MainMenuLayer.m +++ b/Classes/MainMenuLayer.m | |||
@@ -8,8 +8,7 @@ | |||
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 "TestFlight.h" | 13 | #import "TestFlight.h" |
15 | 14 | ||
@@ -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* 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)]; |
51 | CCMenuItemImage* feedbackMenuItem = [CCMenuItemImage itemFromNormalImage:@"feedback.png" selectedImage:@"feedback2.png" target:self selector:@selector(feedback)]; | 49 | CCMenuItemImage* feedbackMenuItem = [CCMenuItemImage itemFromNormalImage:@"feedback.png" selectedImage:@"feedback2.png" target:self selector:@selector(feedback)]; |
52 | 50 | ||
53 | CCMenu* menu = [CCMenu menuWithItems:newgameMenuItem, tutorialMenuItem, highscoresMenuItem, feedbackMenuItem, nil]; | 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,12 +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 | } | 63 | } |
71 | 64 | ||
72 | - (void)highscores | 65 | - (void)highscores |
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 1ada34a..1285597 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 |
@@ -227,7 +227,7 @@ | |||
227 | [self schedule:@selector(randomlyAddObject:) interval:1.0f]; | 227 | [self schedule:@selector(randomlyAddObject:) interval:1.0f]; |
228 | } else if ([currentTutorial.name isEqual:@"end"]) | 228 | } else if ([currentTutorial.name isEqual:@"end"]) |
229 | { | 229 | { |
230 | [[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)]]; |
231 | } | 231 | } |
232 | 232 | ||
233 | self.currentTutorial = nil; | 233 | self.currentTutorial = nil; |
@@ -331,6 +331,9 @@ | |||
331 | 331 | ||
332 | [self unschedule:@selector(randomlyAddObject:)]; | 332 | [self unschedule:@selector(randomlyAddObject:)]; |
333 | 333 | ||
334 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
335 | [defaults setBool:YES forKey:@"hasDoneTutorial"]; | ||
336 | |||
334 | return; | 337 | return; |
335 | } else { | 338 | } else { |
336 | NSLog(@"randomItemsDropped in TutorialMode is greater than 15--this should never happen."); | 339 | NSLog(@"randomItemsDropped in TutorialMode is greater than 15--this should never happen."); |
diff --git a/Classes/UIImage+ColorMasking.h b/Classes/UIImage+ColorMasking.h new file mode 100644 index 0000000..d25fafb --- /dev/null +++ b/Classes/UIImage+ColorMasking.h | |||
@@ -0,0 +1,15 @@ | |||
1 | // | ||
2 | // UIImage+ColorMasking.h | ||
3 | // Cartographic | ||
4 | // | ||
5 | // Created by Starla Insigna on 8/22/11. | ||
6 | // Copyright 2011 Four Island. All rights reserved. | ||
7 | // | ||
8 | |||
9 | #import <UIKit/UIKit.h> | ||
10 | |||
11 | @interface UIImage (ColorMasking) | ||
12 | |||
13 | - (UIImage *)opaqueMaskFromWhiteImage; | ||
14 | |||
15 | @end | ||
diff --git a/Classes/UIImage+ColorMasking.m b/Classes/UIImage+ColorMasking.m new file mode 100644 index 0000000..e4da8c8 --- /dev/null +++ b/Classes/UIImage+ColorMasking.m | |||
@@ -0,0 +1,77 @@ | |||
1 | // | ||
2 | // UIImage+ColorMasking.m | ||
3 | // Cartographic | ||
4 | // | ||
5 | // Created by Starla Insigna on 8/22/11. | ||
6 | // Copyright 2011 Four Island. All rights reserved. | ||
7 | // | ||
8 | |||
9 | #import "UIImage+ColorMasking.h" | ||
10 | |||
11 | @implementation UIImage (ColorMasking) | ||
12 | |||
13 | typedef enum { | ||
14 | ALPHA = 0, | ||
15 | BLUE = 1, | ||
16 | GREEN = 2, | ||
17 | RED = 3 | ||
18 | } PIXELS; | ||
19 | |||
20 | - (UIImage *)opaqueMaskFromWhiteImage | ||
21 | { | ||
22 | CGSize size = [self size]; | ||
23 | int width = size.width; | ||
24 | int height = size.height; | ||
25 | |||
26 | // the pixels will be painted to this array | ||
27 | uint32_t *pixels = (uint32_t *) malloc(width * height * sizeof(uint32_t)); | ||
28 | |||
29 | // clear the pixels so any transparency is preserved | ||
30 | memset(pixels, 0, width * height * sizeof(uint32_t)); | ||
31 | |||
32 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); | ||
33 | |||
34 | // create a context with RGBA pixels | ||
35 | CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * sizeof(uint32_t), colorSpace, | ||
36 | kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast); | ||
37 | |||
38 | // paint the bitmap to our context which will fill in the pixels array | ||
39 | CGContextDrawImage(context, CGRectMake(0, 0, width, height), [self CGImage]); | ||
40 | |||
41 | for(int y = 0; y < height; y++) { | ||
42 | for(int x = 0; x < width; x++) { | ||
43 | uint8_t *rgbaPixel = (uint8_t *) &pixels[y * width + x]; | ||
44 | |||
45 | if ((rgbaPixel[RED] == 255) && (rgbaPixel[GREEN] == 255) && (rgbaPixel[BLUE] == 255) && (rgbaPixel[ALPHA] == 255)) | ||
46 | { | ||
47 | rgbaPixel[RED] = 255; | ||
48 | rgbaPixel[GREEN] = 255; | ||
49 | rgbaPixel[BLUE] = 255; | ||
50 | rgbaPixel[ALPHA] = 255; | ||
51 | } else { | ||
52 | rgbaPixel[RED] = 0; | ||
53 | rgbaPixel[GREEN] = 0; | ||
54 | rgbaPixel[BLUE] = 0; | ||
55 | rgbaPixel[ALPHA] = 0; | ||
56 | } | ||
57 | } | ||
58 | } | ||
59 | |||
60 | // create a new CGImageRef from our context with the modified pixels | ||
61 | CGImageRef image = CGBitmapContextCreateImage(context); | ||
62 | |||
63 | // we're done with the context, color space, and pixels | ||
64 | CGContextRelease(context); | ||
65 | CGColorSpaceRelease(colorSpace); | ||
66 | free(pixels); | ||
67 | |||
68 | // make a new UIImage to return | ||
69 | UIImage *resultUIImage = [UIImage imageWithCGImage:image]; | ||
70 | |||
71 | // we're done with image now too | ||
72 | CGImageRelease(image); | ||
73 | |||
74 | return resultUIImage; | ||
75 | } | ||
76 | |||
77 | @end | ||
diff --git a/Resources/Info.plist b/Resources/Info.plist index 9f3118a..92dca77 100755 --- a/Resources/Info.plist +++ b/Resources/Info.plist | |||
@@ -27,7 +27,7 @@ | |||
27 | <key>CFBundlePackageType</key> | 27 | <key>CFBundlePackageType</key> |
28 | <string>APPL</string> | 28 | <string>APPL</string> |
29 | <key>CFBundleShortVersionString</key> | 29 | <key>CFBundleShortVersionString</key> |
30 | <string>0.2.1</string> | 30 | <string>0.3</string> |
31 | <key>CFBundleSignature</key> | 31 | <key>CFBundleSignature</key> |
32 | <string>????</string> | 32 | <string>????</string> |
33 | <key>CFBundleURLTypes</key> | 33 | <key>CFBundleURLTypes</key> |
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 | |||