Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

initial import. raw file copies from Jacob's Shapes. http://www.littl…

  • Loading branch information...
commit 45e640c38f2321f89f0bcda911c522811982b465 0 parents
@jashmenn authored
Showing with 9,672 additions and 0 deletions.
  1. +14 −0 .gitignore
  2. +14 −0 Classes/Controllers/CocosOverlayViewController.h
  3. +32 −0 Classes/Controllers/CocosOverlayViewController.m
  4. +52 −0 Classes/Controllers/GameController.h
  5. +174 −0 Classes/Controllers/GameController.mm
  6. +202 −0 Classes/External/Analytics-README.txt
  7. +82 −0 Classes/Other/SynthesizeSingleton.h
  8. +35 −0 Classes/Scenes/HCUPPanelScene.h
  9. +286 −0 Classes/Scenes/HCUPPanelScene.m
  10. +18 −0 Classes/Views/CocosOverlayScrollView.h
  11. +106 −0 Classes/Views/CocosOverlayScrollView.m
  12. +23 −0 Classes/Views/NMPanelMenu.h
  13. +170 −0 Classes/Views/NMPanelMenu.m
  14. +36 −0 Classes/Views/NMPanelMenuItem.h
  15. +96 −0 Classes/Views/NMPanelMenuItem.m
  16. +18 −0 Classes/Views/PreviewScrollContainerView.h
  17. +36 −0 Classes/Views/PreviewScrollContainerView.m
  18. +17 −0 Classes/common.h
  19. +24 −0 Classes/shapesAppDelegate.h
  20. +208 −0 Classes/shapesAppDelegate.m
  21. +20 −0 Classes/tmp.txt
  22. +22 −0 LICENSE.cocos2d
  23. +21 −0 LICENSE.cocosdenshion
  24. BIN  Resources/Icon.png
  25. +39 −0 Resources/Info.plist
  26. BIN  Resources/fps_images.png
  27. +1 −0  libs/README
  28. +16 −0 main.m
  29. +6,424 −0 shapes-panels.xcodeproj/.dat89be.363
  30. +1,478 −0 shapes-panels.xcodeproj/project.pbxproj
  31. +8 −0 shapes_Prefix.pch
14 .gitignore
@@ -0,0 +1,14 @@
+.DS_Store
+*.swp
+*~.nib
+build/
+*.pbxuser
+*.perspective
+*.perspectivev3
+*.mode1v3
+*.mode2v3
+.autosession.vim
+./html/
+session.vim
+*/.DS_Store
+Resources/sounds/raw/
14 Classes/Controllers/CocosOverlayViewController.h
@@ -0,0 +1,14 @@
+//
+// CocosOverlayViewController.h
+// shapes
+//
+// Created by Nate Murray on 8/23/10.
+// Copyright 2010 LittleHiccup. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface CocosOverlayViewController : UIViewController
+{
+}
+@end
32 Classes/Controllers/CocosOverlayViewController.m
@@ -0,0 +1,32 @@
+//
+// CocosOverlayViewController.m
+// shapes
+//
+// Created by Nate Murray on 8/23/10.
+// Copyright 2010 LittleHiccup. All rights reserved.
+//
+
+#import "CocosOverlayViewController.h"
+#import "CocosOverlayScrollView.h"
+
+@implementation CocosOverlayViewController
+
+// Implement loadView to create a view hierarchy programmatically, without using a nib.
+- (void)loadView
+{
+ CocosOverlayScrollView *scrollView = [[CocosOverlayScrollView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
+
+ // NOTE - I have hardcoded the size to 1024x1024 as that is the size of the levels in
+ // our game. Ideally this value would be parameterized or configurable.
+ //
+ scrollView.contentSize = CGSizeMake(1024, 1024);
+
+ scrollView.delegate = scrollView;
+ [scrollView setUserInteractionEnabled:TRUE];
+ [scrollView setScrollEnabled:TRUE];
+
+ self.view = scrollView;
+
+ [scrollView release];
+}
+@end
52 Classes/Controllers/GameController.h
@@ -0,0 +1,52 @@
+/*
+ * GameController.h
+ * deadmanschest
+ *
+ * Created by Nate Murray on 6/27/10.
+ * Copyright 2010 YetiApps. All rights reserved.
+ *
+ */
+
+#import "cocos2d.h"
+#import "common.h"
+#import "SynthesizeSingleton.h"
+
+@class HSGameScene;
+@class JSWorld;
+@class JSLevel;
+
+@interface GameController : NSObject {
+ int piecesRemaining;
+ JSWorld* currentWorld;
+ JSLevel* currentLevel;
+ int currentWorld_i;
+ int currentLevel_i;
+ NSString* currentVoice;
+ NSOperationQueue* operationQueue;
+ BOOL newPlayer;
+ BOOL levelReady;
+ // HSGameScene* gameScene;
+}
+@property(nonatomic) int piecesRemaining;
+@property(nonatomic, retain) JSWorld* currentWorld;
+@property(nonatomic, retain) JSLevel* currentLevel;
+@property(nonatomic) int currentWorld_i;
+@property(nonatomic) int currentLevel_i;
+@property(nonatomic, retain) NSString* currentVoice;
+@property(nonatomic, retain) NSOperationQueue* operationQueue;
+@property(nonatomic) BOOL newPlayer;
+@property(nonatomic) BOOL levelReady;
+// @property(nonatomic, retain) HSGameScene* gameScene;
+
++(GameController *) sharedGameController;
+- (void) noPiecesRemaining;
+- (void) piecePlaced;
+- (void)setWorld:(int)i level:(int)j;
+- (void)replaceWorld:(int)i level:(int)j;
+- (HSGameScene*) gameScene;
+- (void) cleanupCaches;
+- (void) loadVoicePrefs;
+- (void) changeVoiceTo: (NSString*) newVoice;
+- (void) levelIsReady;
+- (BOOL) firstLaunch;
+@end
174 Classes/Controllers/GameController.mm
@@ -0,0 +1,174 @@
+/*
+ * GameController.mm
+ * deadmanschest
+ *
+ * Created by Nate Murray on 6/27/10.
+ * Copyright 2010 YetiApps. All rights reserved.
+ *
+ */
+
+/*
+ game controller should hold a reference to the current world, the current
+ world holds a reference to the current level the world and level know how to
+ parse the plists. we need to have the world class load the world
+ definitions dictionary then it can create a level with a particular
+ dictionary then the game controller asks its world for the current level and
+ builds the gamescene based on the level. it gives the gamescene the level
+
+ the panel scene has one panel for all. and otherwise builds a panel for each
+ world. it asks the or maybe just the world class method. for the dictionary
+ of worlds
+
+ when you are playing the game, you start on the first level of the world. if
+ you win, you get a little message, and then its on to the next level of the
+ world. if there is no next level in this world. then you go to the first
+ level of the next world.
+
+ one problem is how does one get back to the panel world chooser once they
+ have started the game.
+ */
+
+#include "GameController.h"
+#import "GameSoundManager.h"
+#import "HSGameScene.h"
+#import "JSWorld.h"
+
+@interface GameController (Private)
+@end
+
+@implementation GameController
+@synthesize piecesRemaining;
+@synthesize currentWorld;
+@synthesize currentLevel;
+@synthesize currentWorld_i;
+@synthesize currentLevel_i;
+@synthesize currentVoice;
+@synthesize operationQueue;
+@synthesize newPlayer;
+@synthesize levelReady;
+// @synthesize gameScene;
+
+SYNTHESIZE_SINGLETON_FOR_CLASS(GameController);
+SimpleAudioEngine *soundEngine;
+
+-(id)init {
+ if ((self = [super init])){
+ self.piecesRemaining = 0;
+ soundEngine = [GameSoundManager sharedManager].soundEngine;
+ [soundEngine retain];
+ [self setWorld: 0 level: 0];
+ // [self setWorld: 16 level: 0];
+ [self loadVoicePrefs];
+ self.operationQueue = [[NSOperationQueue alloc] init];
+ self.newPlayer = YES;
+ self.levelReady = YES;
+ }
+ return self;
+}
+
+- (void)setWorld:(int)i level:(int)j {
+ self.currentWorld = [JSWorld world: i];
+ self.currentLevel = [currentWorld level: j];
+ self.currentWorld_i = i;
+ self.currentLevel_i = j;
+}
+
+- (void)replaceWorld:(int)i level:(int)j {
+ // this isn't called when you press the green button
+ CGSize s = [[CCDirector sharedDirector] winSize];
+ [self setWorld:i level:j];
+ HSGameScene *currentLevelLayer = [self gameScene];
+
+ // HSGameScene* nextLevelLayer = [[HSGameScene alloc] init];
+ HSGameScene* nextLevelLayer = [HSGameScene node];
+ [[currentLevelLayer parent] addChild: nextLevelLayer]; // add nextLevel to the same scene
+ nextLevelLayer.position = ccp(s.width, 0);
+
+ /* race condition here? */
+ nextLevelLayer.tag = kTag_GameScene;
+ currentLevelLayer.tag = kTag_OldGameScene;
+
+ float move_t = 1.0f;
+
+ CCLOG(@"replacing world");
+ self.levelReady = NO;
+
+ id move_in = [CCMoveTo actionWithDuration:move_t position:ccp(0, 0)];
+ id move_out = [CCMoveTo actionWithDuration:move_t position:ccp(-s.width, 0)];
+ id rm = [CCCallFuncND actionWithTarget:currentLevelLayer selector:@selector(removeFromParentAndCleanup:) data:(void*)YES];
+ id ready = [CCCallFunc actionWithTarget:self selector:@selector(levelIsReady)];
+ id cleanup = [CCCallFunc actionWithTarget:self selector:@selector(cleanupCaches)];
+
+ [currentLevelLayer runAction: [CCSequence actions: move_out, rm, cleanup, nil]];
+ [nextLevelLayer runAction: [CCSequence actions: move_in, ready, nil]];
+}
+
+- (HSGameScene*) gameScene {
+ CCScene* scene = [[CCDirector sharedDirector] runningScene];
+ // HSGameScene* layer = (HSGameScene*)[[scene children] objectAtIndex:0]; // thin ice, use a tag!
+ HSGameScene* layer = (HSGameScene*)[scene getChildByTag:kTag_GameScene];
+ return layer;
+}
+
+-(void)dealloc {
+ [soundEngine release];
+ self.currentVoice = nil;
+ self.operationQueue = nil;
+ [super dealloc];
+}
+
+- (void) piecePlaced {
+ self.piecesRemaining -= 1;
+ if(self.piecesRemaining <= 0) {
+ [self noPiecesRemaining];
+ }
+}
+
+- (void) noPiecesRemaining {
+ // [[self gameScene] levelPassed];
+
+ // todo, i don't like putting this here, but it is the best place
+ // id delay = [CCDelayTime actionWithDuration: 1.0]; // delay to allow the last sound to play
+ id delay = [CCDelayTime actionWithDuration: 1.2]; // delay to allow the last sound to play
+ id passed = [CCCallFunc actionWithTarget:[self gameScene] selector:@selector(levelPassed)];
+ [[self gameScene] runAction: [CCSequence actions: delay, passed, nil]];
+}
+
+- (void) cleanupCaches {
+ // [[CCTextureCache sharedTextureCache] removeUnusedTextures];
+}
+
+- (void) levelIsReady {
+ CCLOG(@"level is ready!");
+ self.levelReady = YES;
+}
+
+- (void) loadVoicePrefs {
+ if (![[NSUserDefaults standardUserDefaults] valueForKey:@"currentVoice"]) {
+ CCLOG(@"setting default voice");
+ [self changeVoiceTo:@"addie"];
+ } else {
+ NSString* voiceName = [[NSUserDefaults standardUserDefaults] objectForKey:@"currentVoice"];
+ CCLOG(@"loading voice: %@", voiceName);
+ self.currentVoice = voiceName;
+ }
+}
+
+- (void) changeVoiceTo: (NSString*) newVoice {
+ self.currentVoice = newVoice;
+ [[NSUserDefaults standardUserDefaults] setObject:newVoice forKey:@"currentVoice"];
+}
+
+- (BOOL) firstLaunch {
+ if (![[NSUserDefaults standardUserDefaults] boolForKey:@"launchedBefore"]) {
+ CCLOG(@"first launch");
+ [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"launchedBefore"];
+ return YES;
+ } else {
+ CCLOG(@"launched before");
+ // return [[NSUserDefaults standardUserDefaults] boolForKey:@"launchedBefore"];
+ return NO;
+ }
+}
+
+@end
202 Classes/External/Analytics-README.txt
@@ -0,0 +1,202 @@
+Welcome to Flurry Analytics!
+
+This README contains:
+
+1. Introduction
+2. Integration
+3. Latest SDK Update
+4. Optional Features
+5. Recommendations
+6. FAQ
+
+=====================================
+1. Introduction
+
+The Flurry iPhone Analytics Agent allows you to track the usage and behavior of your iPhone application
+on users' phones for viewing in the Flurry Analytics system. It is designed to be as easy as possible
+with a basic setup complete in under 5 minutes.
+
+This archive should contain these files:
+ - ProjectApiKey.txt : This file contains the name of your project and your project's API key.
+ - Analytics-README.txt : This text file containing instructions.
+ - FlurryLibWithLocation/FlurryAPI.h
+ - FlurryLibWithLocation/libFlurryWithLocation.a : The library containing Flurry's collection and reporting code. This version includes GPS location capabilities. Requires Xcode 3.2.3 or above.
+ - FlurryLib/FlurryAPI.h
+ - FlurryLib/libFlurry.a : The library containing Flurry's collection and reporting code. This version does not include GPS location capabilities. Requires Xcode 3.2.3 or above.
+
+ - FlurryLib/FlurryAdDelegate.h
+ - FlurryLibWithLocation/FlurryAdDelegate.h : These are optional files for use with Flurry AppCircle. You do NOT need them for Flurry Analytics.
+
+Note that there are two versions of the Flurry analytics library: With and without location. We recommend using FlurryLibWithLocation so that you can receive detailed analytics about where your users are using your app.
+However, if you do not currently use location in your application, you can use FlurryLib and receive all of the same analytics without detailed location information.
+We also recommend calling FlurryAPI from the main thread. FlurryAPI is not supported when called from other threads.
+
+=====================================
+2. Integration
+
+To integrate Flurry Analytics into your iPhone application, first decide if you want to use location services or not.
+If you do wish to use location, see the steps in 2a. If you do not wish to use location, skip to 2b.
+
+Note that you should only use Flurry location services if your application already uses the CLLocationManager. You should not enable location services for analytics if you do not already use the CLLocationManager as your application will be rejected by Apple.
+Apple requires that your application use location in a way useful to the end user in order to access the CLLocationManager.
+
+2a. Integration without Location
+-------------------------------------------------------------
+
+1. In the finder, drag FlurryLib into project's file folder.
+ NOTE: If you are upgrading the Flurry iPhone SDK, be sure to remove any existing Flurry library folders from your project's file folder before proceeding.
+
+2. Now add it to your project => Project > Add to project > FlurryLib
+ - Choose 'Recursively create groups for any added folders'
+
+3. In your Application Delegate:
+ a. Import FlurryAPI => #import "FlurryAPI.h"
+ b. Inside "applicationDidFinishLaunching:" add => [FlurryAPI startSession:@"YOUR_API_KEY"];
+
+ - (void)applicationDidFinishLaunching:(UIApplication *)application {
+ [FlurryAPI startSession:@"YOUR_API_KEY"];
+ //your code
+ }
+
+You're done! That's all you need to do to begin receiving basic metric data.
+
+2b. Integration with location
+-------------------------------------------------------------
+1. In the finder, drag FlurryLibWithLocation into project's file folder.
+ NOTE: If you are upgrading the Flurry iPhone SDK, be sure to remove any existing Flurry library folders from your project's file folder before proceeding.
+
+2. Now add it to your project => Project > Add to project > FlurryLibWithLocation
+ - Choose 'Recursively create groups for any added folders'
+
+3. At this point, there are two options. First, if your application already has initialized a CLLocationManager, you can simply pass location information to the Flurry API for each session. For this option see the steps in 3a.
+ Second, if your application has not already defined a CLLocationManager and you want Flurry to handle this for you, see the steps in 3b.
+
+3a. You pass location information to the FlurryAPI. In your Application Delegate:
+ a. Import FlurryAPI => #import "FlurryAPI.h"
+ b. Inside "applicationDidFinishLaunching:" add => [FlurryAPI startSession:@"YOUR_API_KEY"];
+
+ - (void)applicationDidFinishLaunching:(UIApplication *)application {
+ [FlurryAPI startSession:@"YOUR_API_KEY"];
+ //your code
+ }
+ c. Each time you want to update the location that Flurry Analytics will record, use the function below. Only the last location reported will be used for each session.
+ [FlurryAPI setLocation:YOUR_UPDATED_CLLOCATION];
+
+3b. Flurry manages all location capabilities. In your Application Delegate:
+ a. Import FlurryAPI => #import "FlurryAPI.h"
+ b. Inside "applicationDidFinishLaunching:" add => [FlurryAPI startSessionWithLocationServices:@"YOUR_API_KEY"];
+
+ - (void)applicationDidFinishLaunching:(UIApplication *)application {
+ [FlurryAPI startSessionWithLocationServices:@"YOUR_API_KEY"];
+ //your code
+ }
+
+ NOTE: You must also include the CoreLocation.framework if you do this. To add this framework, go to
+ Project > Edit Active Target "YOUR_APP" > Add Libraries ('+' sign at the bottom) and select CoreLocation.framework
+
+You're done! That's all you need to do to begin receiving basic metric data. For optional advanced features, skip to Section 3.
+
+=====================================
+3. Latest SDK Update
+Going forward, the Flurry SDK will only support Xcode 3.2.3 and above. Please email support if you need to use older versions of the Flurry SDK.
+
+This version of the Flurry SDK is compatible with Xcode 3.2.3 and designed for OS 4.0 (iOS) applications.
+
+In this version of the Flurry SDK, we modified which data is collected. This updated SDK version does not collect the following device data: device name, operating system version and firmware version. Because Apple allows the collection of UDID for the purpose of advertising, we continue to collect this data as the Flurry SDK includes AppCircle, Flurry's mobile advertising solution.
+
+Per Flurry's existing Terms of Service and Privacy Policy, please inform your consumers about data you collect through the use of our services. Additionally, please remember that you must abide by the rules set forth in the new Apple iPhone Developer Program License Agreement.
+
+Despite our latest efforts, please understand that we are unable to guarantee whether Apple reviewers will approve your application in its App Store submission process.
+
+=====================================
+4. Optional / Advanced Features
+
+You can use the following methods to report additional data. These methods work exactly the same with or without location services enabled.
+
+[FlurryAPI logEvent:@"EVENT_NAME"];
+Use logEvent to count the number of times certain events happen during a session of your application. This can be useful for measuring how often users perform various actions, for example. Your application is currently limited to counting occurrences for 100 different event ids (maximum length 255 characters).
+
+[FlurryAPI logEvent:@"EVENT_NAME" withParameters:YOUR_NSDictionary];
+Use this version of logEvent to count the number of times certain events happen during a session of your application and to pass dynamic parameters to be recorded with that event. For example, you could record that a user used your search box tool and also dynamically record which search terms the user entered. Your application is currently limited to counting occurrences for 100 different event ids (maximum length 255 characters).
+
+ An example NSDictionary to use with this method could be:
+ NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"your dynamic parameter value", @"your dynamic parameter name", nil];
+
+[FlurryAPI logEvent:@"EVENT_NAME" timed:YES];
+Use this version of logEvent to start timed event.
+
+[FlurryAPI logEvent:@"EVENT_NAME" withParameters:YOUR_NSDictionary timed:YES];
+Use this version of logEvent to start timed event with event parameters.
+
+[FlurryAPI endTimedEvent:@"EVENT_NAME"];
+Use endTimedEvent to end timed event before app exists, otherwise timed events automatically end when app exists.
+
+[FlurryAPI logError:@"ERROR_NAME" message:@"ERROR_MESSAGE" exception:e];
+Use this to log exceptions and/or errors that occur in your app. Flurry will report the first 10 errors that occur in each session.
+
+[FlurryAPI setUserID:@"USER_ID"];
+Use this to log the user's assigned ID or username in your system after identifying the user.
+
+[FlurryAPI setAge:21];
+Use this to log the user age after identifying the user. Valid inputs are 0 or greater.
+
+[FlurryAPI countPageViews:navigationController];
+Use this to track user interactions with application's navigation structures. Each interaction is considered a page view. To enable tracking, pass in an instance of UINavigationController and UITabBarController. Multiple UINavigationController and UITabBarController instances can be tracked.
+
+[FlurryAPI countPageView];
+If your app does not use UINavigationController or UITabBarController, Flurry API will not be able to automatically track user's interactions. In this case, you can use manually count a page view after detecting the user interaction yourself.
+
+[FlurryAPI setSessionReportsOnCloseEnabled:(BOOL)sendSessionReportsOnClose];
+This option is on by default. When enabled, Flurry will attempt to send session data when the app is exited as well as it normally does when the app is started. This will improve the speed at which your application analytics are updated but can prolong the app termination process due to network latency. In some cases, the network latency can cause the app to crash.
+
+[FlurryAPI setSessionReportsOnPauseEnabled:(BOOL)sendSessionReportsOnPause];
+This option is off by default. When enabled, Flurry will attempt to send session data when the app is paused as well as it normally does when the app is started. This will improve the speed at which your application analytics are updated but can prolong the app pause process due to network latency. In some cases, the network latency can cause the app to crash.
+
+=====================================
+5. Recommendations
+
+We recommend adding an uncaught exception listener to your application (if you don't already have one) and use logError to record any application crashes.
+Adding an uncaught exception listener is easy; you just need to create a function that looks like the following:
+
+ void uncaughtExceptionHandler(NSException *exception) {
+ [FlurryAPI logError:@"Uncaught" message:@"Crash!" exception:exception];
+ }
+
+You then need to register this function as an uncaught exception listener as follows:
+
+ - (void)applicationDidFinishLaunching:(UIApplication *)application {
+ NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
+ [FlurryAPI startSession:@"YOUR_API_KEY"];
+ ....
+ }
+
+Note that you can name the function whatever you'd like and record whatever error information you'd like in the error name and event fields.
+
+=====================================
+6. FAQ
+
+When does the Flurry Agent send data?
+
+By default, the Flurry Agent will send the stored metrics data to Flurry servers when the app starts, resumes, and terminates.
+To override default Agent behavior, you can turn off sending data on termination with [FlurryAPI setSessionReportsOnCloseEnabled:NO];
+Sending metrics data when the app pauses is also supported, but not enabled by default. You can enable sending data on pause with [FlurryAPI setSessionReportsOnPauseEnabled:YES];
+
+How much data does the Agent send each session?
+
+All data sent by the Flurry Agent is sent in a compact binary format.
+
+What data does the Agent send?
+
+The data sent by the Flurry Agent includes time stamps, logged events, logged errors, and various device specific information. This is the same information that can be seen in the custom event logs on in the Event Analytics section.
+If AppCircle is used, Flurry Agent will also send AppCircle user interaction data. These information can be seen in the AppCircle section.
+We are also collecting App Store ID, purchase date, release date, and purchase price in order to provide more metrics in the future.
+We do not collect personally identifiable information.
+
+=====================================
+
+Please let us know if you have any questions. If you need any help, just email iphonesupport@flurry.com!
+
+Cheers,
+The Flurry Team
+http://www.flurry.com
+iphonesupport@flurry.com
82 Classes/Other/SynthesizeSingleton.h
@@ -0,0 +1,82 @@
+//
+// SynthesizeSingleton.h
+// CocoaWithLove
+//
+// Created by Matt Gallagher on 20/10/08.
+// Copyright 2009 Matt Gallagher. All rights reserved.
+//
+// Permission is given to use this source code file without charge in any
+// project, commercial or otherwise, entirely at your risk, with the condition
+// that any redistribution (in part or whole) of source code must retain
+// this copyright and permission notice. Attribution in compiled projects is
+// appreciated but not required.
+//
+// To use:
+//
+// SYNTHESIZE_SINGLETON_FOR_CLASS(MyClassName);
+//
+// inside the @implementation MyClassName declaration and your class will become a singleton. You will also need to add the line:
+//
+// + (MyClassName *)sharedMyClassName;
+//
+// to the header file for MyClassName so the singleton accessor method can be found from other source files if they #import the header.
+//
+// Once your class is a singleton, you can access the instance of it using the line:
+//
+// [MyClassName sharedMyClassName];
+//
+
+#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \
+ \
+static classname *shared##classname = nil; \
+ \
++ (classname *)shared##classname \
+{ \
+ @synchronized(self) \
+ { \
+ if (shared##classname == nil) \
+ { \
+ shared##classname = [[self alloc] init]; \
+ } \
+ } \
+ \
+ return shared##classname; \
+} \
+ \
++ (id)allocWithZone:(NSZone *)zone \
+{ \
+ @synchronized(self) \
+ { \
+ if (shared##classname == nil) \
+ { \
+ shared##classname = [super allocWithZone:zone]; \
+ return shared##classname; \
+ } \
+ } \
+ \
+ return nil; \
+} \
+ \
+- (id)copyWithZone:(NSZone *)zone \
+{ \
+ return self; \
+} \
+ \
+- (id)retain \
+{ \
+ return self; \
+} \
+ \
+- (NSUInteger)retainCount \
+{ \
+ return NSUIntegerMax; \
+} \
+ \
+- (void)release \
+{ \
+} \
+ \
+- (id)autorelease \
+{ \
+ return self; \
+}
35 Classes/Scenes/HCUPPanelScene.h
@@ -0,0 +1,35 @@
+/*
+ * HSLevelSelectionScene.h
+ * shapes
+ *
+ * Created by Nate Murray on 7/24/10.
+ * Copyright 2010 YetiApps. All rights reserved.
+ *
+ */
+
+// When you import this file, you import all the cocos2d classes
+#import "cocos2d.h"
+#import "CocosOverlayScrollView.h"
+
+@class PreviewScrollContainerView;
+@class NMPanelMenu;
+
+// HSLevelSelectionScene Layer
+@interface HSLevelSelectionScene2 : CCLayer
+{
+ int nextWorld_;
+ BOOL transitioning_;
+ CocosOverlayScrollView* scrollView;
+ PreviewScrollContainerView* scrollViewContainer;
+ UIPageControl* pageControl;
+ NSString* currentLockPanelName_;
+}
+@property(nonatomic,retain) NSString* currentLockPanelName;
+
+// returns a Scene that contains the HSLevelSelectionScene as the only child
++(id) scene;
+- (void) menuButtonPressed: (id) sender;
+- (void) addLockPanelToMenu:(NMPanelMenu*)menu;
+- (void) lockPanelPicked: (id) sender;
+
+@end
286 Classes/Scenes/HCUPPanelScene.m
@@ -0,0 +1,286 @@
+/*
+ * HSLevelSelectionScene2.m
+ * shapes
+ *
+ * Created by Nate Murray on 7/24/10.
+ * Copyright 2010 YetiApps. All rights reserved.
+ *
+ */
+
+#include "HCUPPanelScene.h"
+#import "HSGameScene.h"
+#import "NMPanelMenu.h"
+#import "NMPanelMenuItem.h"
+#import "GameController.h"
+#import "JSWorld.h"
+#import "PreviewScrollContainerView.h"
+#import "HSMenuScene.h"
+#import "JSNetworkManager.h"
+
+#ifdef LITE_VERSION
+#import "FlurryAPI.h"
+#endif
+
+// http://getsetgames.com/2009/08/21/cocos2d-and-uiscrollview/
+// http://blog.proculo.de/archives/180-Paging-enabled-UIScrollView-With-Previews.html
+
+@implementation HSLevelSelectionScene2
+@synthesize currentLockPanelName=currentLockPanelName_;
+
++(id) scene
+{
+ CCScene *scene = [CCScene node];
+ HSLevelSelectionScene2 *layer = [HSLevelSelectionScene2 node];
+ [scene addChild: layer];
+ return scene;
+}
+
+-(id) init
+{
+ if( (self=[super init] )) {
+ nextWorld_ = -1;
+ transitioning_ = NO;
+
+ CCSpriteFrameCache* fcache = [CCSpriteFrameCache sharedSpriteFrameCache];
+ [fcache addSpriteFramesWithFile: @"panels-sheet-1.plist"];
+ [fcache addSpriteFramesWithFile: @"panels-sheet-2.plist"];
+ self.currentLockPanelName = @"n/a";
+
+#ifdef LITE_VERSION
+ [FlurryAPI logEvent:@"LevelSelectionScene"];
+#endif
+
+ }
+ return self;
+}
+
+- (void) onEnter
+{
+ // CCLOG(@"======= HSLevelSelection onEnter");
+ CGSize s = [[CCDirector sharedDirector] winSize];
+
+ CCSprite* bg = [CCSprite spriteWithFile:@"paper-background-2.png"];
+ bg.position = ccp(s.width/2, s.height/2);
+ [self addChild: bg];
+
+ CCLayer* panels = [CCLayer node];
+ CCLOG(@"p.x:%f p.y:%f", panels.position.x, panels.position.y);
+ // panels.position = ccp(s.width/2, s.height/2);
+
+ // create "all" panel
+ CCSprite* pane1 = [CCSprite spriteWithFile:@"main-menu-panel.png"];
+ CCSprite* pane2 = [CCSprite spriteWithFile:@"main-menu-panel-on.png"];
+ // pane1.opacity = 0;
+ NMPanelMenuItem* menuItem1 = [NMPanelMenuItem itemFromNormalSprite:pane1 selectedSprite:pane2 target:self selector:@selector(menuButtonPressed:)];
+ menuItem1.world = 0;
+ menuItem1.name = @"blank";
+
+ NMPanelMenu* menu = [NMPanelMenu menuWithItems: menuItem1, nil];
+ //CCSpriteFrameCache* fcache = [CCSpriteFrameCache sharedSpriteFrameCache];
+
+ for(int i=0; i < [JSWorld numWorlds]; i++) {
+ JSWorld* world = [JSWorld world: i];
+ // CCSprite* pane2 = [CCSprite spriteWithFile:[NSString stringWithFormat: @"%@-panel.png", world.name]];
+ CCSprite* pane2 = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat: @"%@-panel.png", world.name]];
+ // CCSprite* pane2_on = [CCSprite spriteWithFile:[NSString stringWithFormat: @"%@-panel-on.png", world.name]];
+
+ NMPanelMenuItem* menuItem2 = [[NMPanelMenuItem alloc] initFromNormalSprite:pane2
+ selectedSprite:pane2
+ activeSprite:pane2
+ disabledSprite:pane2
+ name:world.name
+ target:self selector:@selector(levelPicked:)];
+ menuItem2.world = i;
+ menuItem2.name = world.name;
+ [menu addChild: menuItem2];
+ [menuItem2 release];
+ }
+
+#ifdef LITE_VERSION
+
+ // [self addLockPanelToMenu: menu];
+ NSUInteger randomIndex = arc4random() % 100;
+ NSString* paneName = randomIndex <= 50 ? @"locked-panel-camp" : @"locked-panel-dino";
+ CCSprite* pane = [CCSprite spriteWithFile:[NSString stringWithFormat: @"%@.png", paneName]];
+ CCSprite* pane_on = [CCSprite spriteWithFile:[NSString stringWithFormat: @"%@-on.png", paneName]];
+
+ NMPanelMenuItem* lockedItem = [[NMPanelMenuItem alloc] initFromNormalSprite:pane
+ selectedSprite:pane
+ activeSprite:pane_on
+ disabledSprite:pane
+ name:@"blank"
+ target:self selector:@selector(lockPanelPicked:)];
+ lockedItem.showGlow = false;
+
+ [menu addChild: lockedItem];
+ // menuItem.position = ccp(menuItem.position.x, menuItem.position.y - 100);
+ [lockedItem release];
+
+#endif
+
+ // where you're at: get the locked panel to align vertically
+ // get it to work
+ // then add the last level buy now screen
+
+ [menu alignItemsHorizontallyWithPadding:30.0];
+ [panels addChild:menu];
+
+#ifdef LITE_VERSION
+ lockedItem.position = ccp(lockedItem.position.x, lockedItem.position.y - 7);
+#endif
+
+
+ // menu.anchorPoint = ccp(0,0);
+ // CCLOG(@"menu.x:%f menu.y:%f", menu.position.x, menu.position.y);
+ // menu.position = ccp(0, s.height/2);
+ // CCLOG(@"menu.x:%f menu.y:%f", menu.position.x, menu.position.y);
+
+ int numberOfPages = [JSWorld numWorlds];
+
+#ifdef LITE_VERSION
+ numberOfPages += 1;
+#endif
+
+ float onePanelWide = 363;
+ //float padding = 15;
+ float totalWidth = numberOfPages * onePanelWide; // panel width + padding * 2
+
+ [self addChild:panels];
+
+ //
+ GameController* gc = [GameController sharedGameController];
+ CCLOG(@"setting to panel: %d", gc.currentWorld_i+1);
+ CCLOG(@"menu.x:%f menu.y:%f", menu.position.x, menu.position.y);
+ // newMenuX =
+ // menu.position = ccp(newMenuX, menu.position.y);
+ // [menu setToPanel: gc.currentWorld_i+1]; // ew
+ CCLOG(@"menu.x:%f menu.y:%f", menu.position.x, menu.position.y);
+ // float unknown = 70;
+ float unknown = 15;
+ // menu.position = ccp(totalWidth/2 + onePanelWide/2 - onePanelWide + unknown, s.height/2);
+ // menu.position = ccpAdd(menu.position, ccp(totalWidth/2 - onePanelWide + unknown, 0));
+ int woff = gc.currentWorld_i;
+ // menu.position = ccpAdd(menu.position, ccp(totalWidth/2 - onePanelWide - (woff * onePanelWide) + unknown, 0));
+ // menu.position = ccpAdd(menu.position, ccp(totalWidth/2 - onePanelWide + unknown, 0)); // use this
+ menu.position = ccpAdd(menu.position, ccp(totalWidth/2 + unknown, 0));
+ // you need to scroll the scoll view container
+
+
+ // Init Scrollview
+
+ // scrollView = [[CocosOverlayScrollView alloc] initWithFrame:CGRectMake(0, 0, 480, 320)];
+ // scrollView = [[CocosOverlayScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
+
+ scrollViewContainer = [[PreviewScrollContainerView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
+
+ scrollView = [[CocosOverlayScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, onePanelWide)
+ numPages: numberOfPages + 1
+ width: onePanelWide
+ layer: panels];
+
+ scrollViewContainer.scrollView = scrollView;
+
+ // pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 0, 50, 480)];
+ // pageControl.numberOfPages = numberOfPages;
+ // pageControl.currentPage = 0;
+ // pageControl.delegate = scrollView;
+
+ [scrollView setContentOffset: CGPointMake(0, (woff + 1) * onePanelWide) animated: NO];
+
+ // Add Scrollview to cocos2d
+ [[[CCDirector sharedDirector] openGLView] addSubview:scrollViewContainer];
+ [[[CCDirector sharedDirector] openGLView] addSubview:scrollView];
+ // [[[CCDirector sharedDirector] openGLView] addSubview:pageControl];
+
+ // set to current level
+ // [scrollView setContentOffset: CGPointMake(woff * onePanelWide, s.height/2) animated: YES];
+
+ [scrollView release];
+ [scrollViewContainer release];
+
+ [super onEnter]; // ?
+}
+
+- (void) menuButtonPressed: (id) sender
+{
+ [[CCDirector sharedDirector] replaceScene:[CCCrossFadeTransition transitionWithDuration:0.5 scene:[HSMenuScene scene]]];
+}
+
+- (void) addLockPanelToMenu:(NMPanelMenu*)menu
+{
+ NSString* paneName = @"locked-panel-camp";
+ CCSprite* pane = [CCSprite spriteWithFile:[NSString stringWithFormat: @"%@.png", paneName]];
+ CCSprite* pane_on = [CCSprite spriteWithFile:[NSString stringWithFormat: @"%@-on.png", paneName]];
+ self.currentLockPanelName = paneName;
+
+ NMPanelMenuItem* menuItem = [[NMPanelMenuItem alloc] initFromNormalSprite:pane
+ selectedSprite:pane
+ activeSprite:pane_on
+ disabledSprite:pane
+ name:@"blank"
+ target:self selector:@selector(lockPanelPicked:)];
+
+ [menu addChild: menuItem];
+ // menuItem.position = ccp(menuItem.position.x, menuItem.position.y - 100);
+ [menuItem release];
+}
+
+- (void) lockPanelPicked: (id) sender {
+ CCLOG(@"buying!");
+
+#ifdef LITE_VERSION
+ NSArray *keys = [NSArray arrayWithObjects:@"image", nil];
+ NSArray *objects = [NSArray arrayWithObjects:self.currentLockPanelName, nil];
+ NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
+ [FlurryAPI logEvent:@"LockPanelBuyNowPressed" withParameters:dictionary];
+#endif
+
+ [[JSNetworkManager manager] openFullVersionURL];
+}
+
+
+
+- (void) levelPicked: (id) sender
+{
+ // tmp
+ // [scrollView removeFromSuperview];
+ // [scrollViewContainer removeFromSuperview];
+
+ CCLOG(@"world %@ %d picked", ((NMPanelMenuItem*)sender).name, ((NMPanelMenuItem*)sender).world);
+ nextWorld_ = ((NMPanelMenuItem*)sender).world;
+ // if(false) {
+ // GameController* gc = [GameController sharedGameController];
+ // [gc setWorld:((NMPanelMenuItem*)sender).world level:0];
+ // [[CCDirector sharedDirector] replaceScene:[CCCrossFadeTransition transitionWithDuration:0.5 scene:[HSGameScene scene]]];
+ // }
+}
+
+- (void) visit {
+ if(nextWorld_ > -1 && !transitioning_) {
+ transitioning_ = YES;
+ GameController* gc = [GameController sharedGameController];
+ [gc setWorld:nextWorld_ level:0]; //maybe this cuold be an object to be slightly faster
+ [[CCDirector sharedDirector] replaceScene:[CCCrossFadeTransition transitionWithDuration:0.5 scene:[HSGameScene scene]]];
+ }
+ [super visit];
+}
+
+- (void) onExit
+{
+ CCLOG(@"=== removing view");
+ [scrollView removeFromSuperview];
+ [scrollViewContainer removeFromSuperview];
+ [super onExit];
+}
+
+- (void) dealloc
+{
+ self.currentLockPanelName = nil;
+ CCLOG(@"=== deallocing HSLevelSelectionScene2");
+ // [scrollView removeFromSuperview];
+ // [scrollViewContainer removeFromSuperview];
+
+ // [pageControl removeFromSuperview];
+ [super dealloc];
+}
+@end
18 Classes/Views/CocosOverlayScrollView.h
@@ -0,0 +1,18 @@
+//
+// CocosOverlayScrollView.h
+// shapes
+//
+// Created by Nate Murray on 8/23/10.
+// Copyright 2010 LittleHiccup. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "cocos2d.h"
+
+@interface CocosOverlayScrollView : UIScrollView
+{
+ CCNode* targetLayer;
+}
+@property(nonatomic, retain) CCNode* targetLayer;
+-(id) initWithFrame: (CGRect) frameRect numPages: (int) numPages width: (float) width layer: (CCNode*) layer;
+@end
106 Classes/Views/CocosOverlayScrollView.m
@@ -0,0 +1,106 @@
+//
+// CocosOverlayScrollView.m
+// shapes
+//
+// Created by Nate Murray on 8/23/10.
+// Copyright 2010 LittleHiccup. All rights reserved.
+//
+
+#import "CocosOverlayScrollView.h"
+
+@implementation CocosOverlayScrollView
+@synthesize targetLayer;
+
+-(id) initWithFrame: (CGRect) frameRect numPages: (int) numPages width: (float) width layer: (CCNode*) layer {
+ if ((self = [super initWithFrame: frameRect])){
+ self.contentSize = CGSizeMake(320, width * numPages);
+ self.bounces = YES;
+ self.delaysContentTouches = NO;
+ self.delegate = self;
+ self.pagingEnabled = YES;
+ self.scrollsToTop = NO;
+ self.showsVerticalScrollIndicator = NO;
+ self.showsHorizontalScrollIndicator = NO;
+ [self setUserInteractionEnabled:TRUE];
+ [self setScrollEnabled:TRUE];
+ self.targetLayer = layer;
+ }
+ return self;
+}
+
+-(void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
+{
+ if (!self.dragging)
+ {
+ UITouch* touch = [[touches allObjects] objectAtIndex:0];
+ //CGPoint location = [touch locationInView: [touch view]];
+ //CCLOG(@"touch at l.x:%f l.y:%f", location.x, location.y);
+
+ [self.nextResponder touchesBegan: touches withEvent:event];
+ [[[CCDirector sharedDirector] openGLView] touchesBegan:touches withEvent:event];
+ }
+
+ [super touchesBegan: touches withEvent: event];
+}
+
+-(void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event
+{
+ if (!self.dragging)
+ {
+ [self.nextResponder touchesEnded: touches withEvent:event];
+ [[[CCDirector sharedDirector] openGLView] touchesEnded:touches withEvent:event];
+ }
+
+ [super touchesEnded: touches withEvent: event];
+}
+
+-(void) touchesCancelled: (NSSet *) touches withEvent: (UIEvent *) event
+{
+ if (!self.dragging)
+ {
+ [self.nextResponder touchesCancelled: touches withEvent:event];
+ [[[CCDirector sharedDirector] openGLView] touchesCancelled:touches withEvent:event];
+ }
+
+ [super touchesCancelled: touches withEvent: event];
+}
+
+
+- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
+{
+ // TODO - Custom code for handling deceleration of the scroll view
+}
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView
+{
+ CGPoint dragPt = [scrollView contentOffset];
+
+ // CCScene* currentScene = [[CCDirector sharedDirector] runningScene];
+
+ // Only take the top layer to modify but other layers could be retrieved as well
+ //
+ // CCLayer* topLayer = (CCLayer *)[currentScene.children objectAtIndex:0];
+
+ //dragPt = [[CCDirector sharedDirector] convertCoordinate:dragPt];
+ dragPt = [[CCDirector sharedDirector] convertToGL:dragPt];
+
+ dragPt.y = dragPt.y * -1;
+ dragPt.x = dragPt.x * -1;
+
+ // CGPoint newLayerPosition = CGPointMake(dragPt.x + (scrollView.contentSize.height * 0.5f), dragPt.y + (scrollView.contentSize.width * 0.5f));
+ CGPoint newLayerPosition = CGPointMake(dragPt.x, dragPt.y);
+
+ [targetLayer setPosition:newLayerPosition];
+}
+
+- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
+{
+ // CGPoint dragPt = [scrollView contentOffset];
+
+}
+
+-(void) dealloc {
+ self.targetLayer = nil;
+ [super dealloc];
+}
+@end
23 Classes/Views/NMPanelMenu.h
@@ -0,0 +1,23 @@
+/*
+ * NMPanelMenu.h
+ * shapes
+ *
+ * Created by Nate Murray on 7/29/10.
+ * Copyright 2010 YetiApps. All rights reserved.
+ *
+ */
+
+#import "cocos2d.h"
+
+@class NMPanelController;
+@interface NMPanelMenu : CCMenu {
+ NMPanelController* pc;
+ BOOL dragged;
+}
+@property(nonatomic, retain) NMPanelController* pc;
+
+-(CCMenuItem *) itemForTouch: (UITouch *) touch;
+- (void) onEnter;
+// -(void) setToPanel: (int) n;
+
+@end
170 Classes/Views/NMPanelMenu.m
@@ -0,0 +1,170 @@
+/*
+ * NMPanelMenu.m
+ * shapes
+ *
+ * Created by Nate Murray on 7/29/10.
+ * Copyright 2010 YetiApps. All rights reserved.
+ *
+ */
+
+#include "NMPanelMenu.h"
+#import "common.h"
+#import "NMPanelController.h"
+#import "NMPanelMenuItem.h"
+
+@interface NMPanelMenu (Private)
+@end
+
+@implementation NMPanelMenu
+@synthesize pc;
+
+- (void) onEnter {
+ [super onEnter];
+ self.pc = [[NMPanelController alloc] initWithNode: self];
+ // todo, set contentSize to be the size of the children + padding
+
+ // CCLOG(@"we have %d children", [[self children] count]);
+ [pc definePanelsWithSprites: [[self children] getNSArray]];
+ // [pc setNodePositionToPanel: 0];
+}
+
+/*
+// the trick here is to give the PanelMenu a high touch priority than its items
+// and if the PanelMenu ignores the touch, only then do you let the items have the touch
+// in this way, you might not need any panel items at all
+-(void) registerWithTouchDispatcher
+{
+ [[CCTouchDispatcher sharedDispatcher]
+ addTargetedDelegate:self
+ priority:touchPriority_panelMenu
+ swallowsTouches:YES];
+}
+
+- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
+{
+ return NO; // ******************* tmp
+ CCMenuItem* sprite = [self itemForTouch: touch];
+ if (sprite) {
+ // [sprite selected];
+ return [pc ccTouchBegan:touch withEvent:event forSprite:sprite];
+ }
+ dragged = NO;
+ return NO;
+}
+
+- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
+{
+ CCMenuItem* sprite = [self itemForTouch: touch];
+ if (sprite) [pc ccTouchMoved:touch withEvent:event forSprite:sprite];
+ dragged = YES;
+}
+
+- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
+{
+ CCMenuItem* sprite = [self itemForTouch: touch];
+
+ // [sprite selected];
+
+ if(dragged) {
+ if (sprite) {
+ [pc ccTouchEnded:touch withEvent:event forSprite:sprite];
+ // [selectedItem unselected];
+ // [selectedItem activate];
+
+ }
+ } else {
+ [sprite selected];
+ [sprite activate];
+ }
+ dragged = NO;
+}
+*/
+
+
+- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
+{
+ CCLOG(@"ccTouchBegan NMPanelMenu");
+ return [super ccTouchBegan:touch withEvent:event];
+}
+
+- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
+{
+ CCLOG(@"ccTouchEnded NMPanelMenu");
+ [super ccTouchEnded:touch withEvent:event];
+}
+
+- (void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event
+{
+ CCLOG(@"ccTouchCancelled NMPanelMenu");
+ [super ccTouchCancelled:touch withEvent:event];
+}
+
+
+
+-(CGRect) rect
+{
+ return CGRectMake( self.position.x - contentSize_.width*anchorPoint_.x, self.position.y-
+ contentSize_.height*anchorPoint_.y,
+ contentSize_.width, contentSize_.height);
+}
+
+- (BOOL)containsTouchLocation:(UITouch *)touch
+{
+ CGPoint location = [touch locationInView: [touch view]];
+ location = [[CCDirector sharedDirector] convertToGL: location];
+ CGPoint local = [self convertToNodeSpace:location];
+ CGRect r = [self rect];
+ r.origin = CGPointZero;
+ return CGRectContainsPoint(r, local);
+}
+
+-(void) dealloc {
+ self.pc = nil;
+ [super dealloc];
+}
+
+-(CCMenuItem *) itemForTouch: (UITouch *) touch
+{
+ CGPoint touchLocation = [touch locationInView: [touch view]];
+ // CCLOG(@".");
+ // CCLOG(@"l.x:%f l.y:%f", [self parent].position.x, [self parent].position.y);
+ // CCLOG(@"m.x:%f m.y:%f", self.position.x, self.position.y);
+ // CCLOG(@"touchLocation.x:%f touchLocation.y:%f", touchLocation.x, touchLocation.y);
+ touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation];
+ // CCLOG(@"gl-touchLocation.x:%f gl-touchLocation.y:%f", touchLocation.x, touchLocation.y);
+
+ CCMenuItem* item;
+ CCARRAY_FOREACH(children_, item){
+ // ignore invisible and disabled items: issue #779, #866
+ if ( [item visible] && [item isEnabled] ) {
+
+ CGPoint local = [item convertToNodeSpace:touchLocation];
+ local = ccpAdd([self parent].position, local); // to account for something <------ key
+
+ // CCLOG(@"%@ gl-local.x:%f gl-local.y:%f", ((NMPanelMenuItem*)item).name, local.x, local.y);
+
+
+ CGRect r = [item rect];
+ r.origin = CGPointZero;
+
+ float dx = -50;
+ float dy = -50;
+ //CGRect rplus = CGRectInset(r, dx, dy);
+
+ if( CGRectContainsPoint( r, local ) ) {
+ // if( CGRectContainsPoint( rplus, local ) ) {
+ return item;
+ }
+ }
+ }
+ return nil;
+}
+
+/*
+-(void) setToPanel: (int) n {
+ [pc setNodePositionToPanel: n];
+}
+*/
+
+
+@end
36 Classes/Views/NMPanelMenuItem.h
@@ -0,0 +1,36 @@
+/*
+ * NMPanelMenuItem.h
+ * shapes
+ *
+ * Created by Nate Murray on 7/29/10.
+ * Copyright 2010 YetiApps. All rights reserved.
+ *
+ */
+
+#import "cocos2d.h"
+
+@interface NMPanelMenuItem : CCMenuItemSprite {
+ int world;
+ NSString* name_;
+ CCSprite* label_;
+ CCSprite* glow_;
+ CCNode<CCRGBAProtocol> *activeImage_;
+ BOOL isActive_;
+ BOOL showGlow_;
+}
+@property (nonatomic) int world;
+@property (nonatomic,readwrite,retain) CCSprite* label;
+@property (nonatomic,readwrite,retain) NSString* name;
+@property (nonatomic,readwrite,retain) CCNode<CCRGBAProtocol> *activeImage;
+@property (nonatomic,readwrite,retain) CCSprite *glow;
+@property (nonatomic,readwrite) BOOL showGlow;
+
+-(id) initFromNormalSprite:(CCNode<CCRGBAProtocol>*)normalSprite
+ selectedSprite:(CCNode<CCRGBAProtocol>*)selectedSprite
+ activeSprite:(CCNode<CCRGBAProtocol>*)activeSprite
+ disabledSprite:(CCNode<CCRGBAProtocol>*)disabledSprite
+ name:(NSString*)name
+ target:(id)target selector:(SEL)selector;
+
+
+@end
96 Classes/Views/NMPanelMenuItem.m
@@ -0,0 +1,96 @@
+/*
+ * NMPanelMenuItem.m
+ * shapes
+ *
+ * Created by Nate Murray on 7/29/10.
+ * Copyright 2010 YetiApps. All rights reserved.
+ *
+ */
+
+#include "NMPanelMenuItem.h"
+#import "GameSoundManager.h"
+#import "GameController.h"
+
+@interface NMPanelMenuItem (Private)
+@end
+
+@implementation NMPanelMenuItem
+@synthesize world;
+@synthesize label=label_;
+@synthesize name=name_;
+@synthesize activeImage=activeImage_;
+@synthesize glow=glow_;
+@synthesize showGlow=showGlow_;
+
+-(id) init {
+ if ((self = [super init])){
+ }
+ return self;
+}
+
+-(id) initFromNormalSprite:(CCNode<CCRGBAProtocol>*)normalSprite
+ selectedSprite:(CCNode<CCRGBAProtocol>*)selectedSprite
+ activeSprite:(CCNode<CCRGBAProtocol>*)activeSprite
+ disabledSprite:(CCNode<CCRGBAProtocol>*)disabledSprite
+ name:(NSString*)name
+ target:(id)target selector:(SEL)selector
+{
+ if( (self=[super initFromNormalSprite:normalSprite
+ selectedSprite:selectedSprite
+ disabledSprite:disabledSprite
+ target:target selector:selector]))
+ {
+ self.activeImage = activeSprite;
+ self.name = name;
+
+ CCSpriteFrameCache* fcache = [CCSpriteFrameCache sharedSpriteFrameCache];
+ NSString* glowName = @"frames-glow.png";
+ if([fcache spriteFrameByName: glowName]) {
+ } else {
+ // todo, move this to extensions once it works
+ CCTexture2D* glowTex = [[CCTexture2D alloc] initWithImage: [UIImage imageNamed:glowName]];
+ CCSpriteFrame* spriteFrame = [[CCSpriteFrame alloc] initWithTexture:glowTex
+ rect:CGRectMake(0,0,glowTex.pixelsWide,glowTex.pixelsHigh) offset: ccp(0,0)];
+ [fcache addSpriteFrame:spriteFrame name:glowName];
+ [spriteFrame release];
+ [glowTex release];
+ }
+ self.glow = [CCSprite spriteWithSpriteFrameName:glowName];
+ self.showGlow = true;
+ }
+ return self;
+}
+
+-(void) activate
+{
+ isActive_ = YES;
+ SimpleAudioEngine* soundEngine = [GameSoundManager sharedManager].soundEngine;
+ if(self.name && ![self.name isEqualToString:@"blank"]) {
+ GameController* gc = [GameController sharedGameController];
+ NSString* soundName = [NSString stringWithFormat:@"%@-%@.caf", gc.currentVoice, self.name];
+ [soundEngine playEffect:soundName pitch:1.0f pan:0.0f gain:1.0f];
+ } else {
+ [soundEngine playEffect:@"briefcase-click-1.caf" pitch:1.0f pan:0.0f gain:0.7f];
+ }
+ [super activate];
+}
+
+-(void) draw
+{
+ if(isActive_) {
+ [self.activeImage draw];
+ if(self.showGlow) [self.glow draw];
+ } else {
+ [super draw];
+ }
+}
+
+-(void) dealloc {
+ self.label = nil;
+ self.name = nil;
+ self.activeImage = nil;
+ self.glow = nil;
+ [super dealloc];
+}
+
+@end
18 Classes/Views/PreviewScrollContainerView.h
@@ -0,0 +1,18 @@
+//
+// PreviewScrollContainerView.h
+// shapes
+//
+// Created by Nate Murray on 8/23/10.
+// Copyright 2010 LittleHiccup. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "CocosOverLayScrollView.h"
+
+@interface PreviewScrollContainerView : UIView {
+ // UIPageControl* pageControl;
+ CocosOverlayScrollView* scrollView;
+}
+@property(nonatomic, retain) CocosOverlayScrollView* scrollView;
+
+@end
36 Classes/Views/PreviewScrollContainerView.m
@@ -0,0 +1,36 @@
+//
+// PreviewScrollContainerView.m
+// shapes
+//
+// Created by Nate Murray on 8/23/10.
+// Copyright 2010 LittleHiccup. All rights reserved.
+//
+
+#import "PreviewScrollContainerView.h"
+
+
+@implementation PreviewScrollContainerView
+@synthesize scrollView;
+
+/*
+-(id) init {
+ if ((self = [super init])){
+ }
+ return self;
+}
+*/
+
+
+- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
+ if ([self pointInside:point withEvent:event]) {
+ return self.scrollView;
+ }
+ return nil;
+}
+
+-(void) dealloc {
+ self.scrollView = nil;
+ [super dealloc];
+}
+
+@end
17 Classes/common.h
@@ -0,0 +1,17 @@
+/*
+ * common.h
+ * Jacob's Shapes
+ *
+ * Created by Nate Murray on 7/26/10.
+ * Copyright 2010 YetiApps. All rights reserved.
+ *
+ */
+
+#pragma mark -
+#pragma mark Enums
+
+enum {
+ kTag_x,
+};
+
+
24 Classes/shapesAppDelegate.h
@@ -0,0 +1,24 @@
+//
+// shapesAppDelegate.h
+// shapes
+//
+// Created by Nate Murray on 7/24/10.
+// Copyright LittleHiccup 2010. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface shapesAppDelegate : NSObject <UIApplicationDelegate> {
+ UIWindow *window;
+}
+
+@property (nonatomic, retain) UIWindow *window;
+- (void) setupCocos2d;
+@end
+
+#ifdef LITE_VERSION
+void uncaughtExceptionHandler(NSException *exception);
+#endif
+
+
+
208 Classes/shapesAppDelegate.m
@@ -0,0 +1,208 @@
+//
+// shapesAppDelegate.m
+// shapes
+//
+// Created by Nate Murray on 7/24/10.
+// Copyright LittleHiccup 2010. All rights reserved.
+//
+
+#import "shapesAppDelegate.h"
+#import "cocos2d.h"
+#import "HSMenuScene.h"
+#import "HSGameScene.h"
+#import "GameSoundManager.h"
+#import "JSWorld.h"
+#import "HSLevelSelectionScene.h"
+#import "HCUPPanelScene.h"
+
+
+
+@implementation shapesAppDelegate
+
+@synthesize window;
+
+- (void) applicationDidFinishLaunching:(UIApplication*)application
+{
+
+ // CC_DIRECTOR_INIT()
+ //
+ // 1. Initializes an EAGLView with 0-bit depth format, and RGB565 render buffer
+ // 2. EAGLView multiple touches: disabled
+ // 3. creates a UIWindow, and assign it to the "window" var (it must already be declared)
+ // 4. Parents EAGLView to the newly created window
+ // 5. Creates Display Link Director
+ // 5a. If it fails, it will use an NSTimer director
+ // 6. It will try to run at 60 FPS
+ // 7. Display FPS: NO
+ // 8. Device orientation: Portrait
+ // 9. Connects the director to the EAGLView
+ //
+ // CC_DIRECTOR_INIT();
+
+#ifdef LITE_VERSION
+ NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
+ [FlurryAPI startSession:@"GJSNXELXLP5ER11HN391"];
+#endif
+
+
+// do {
+ window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
+ [self setupCocos2d];
+ // [self playIntroVideo];
+
+}
+
+- (void)playIntroVideo {
+
+ NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"HiccupLogoShort" ofType:@"m4v"]];
+ MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
+
+ // Register to receive a notification when the movie has finished playing.
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(moviePlayBackDidFinish:)
+ name:MPMoviePlayerPlaybackDidFinishNotification
+ object:moviePlayer];
+
+ if ([moviePlayer respondsToSelector:@selector(setFullscreen:animated:)]) {
+ // Use the new 3.2 style API
+ moviePlayer.controlStyle = MPMovieControlStyleNone;
+ moviePlayer.shouldAutoplay = YES;
+ // This does blows up in cocos2d, so we'll resize manually
+ // [moviePlayer setFullscreen:YES animated:YES];
+ [moviePlayer.view setTransform:CGAffineTransformMakeRotation((float)M_PI_2)];
+
+// CGSize winSize = [[CCDirector sharedDirector] winSize];
+ CGSize winSize = CGSizeMake(480, 320); // hmm
+ moviePlayer.view.frame = CGRectMake(0, 0, winSize.height, winSize.width); // width and height are swapped after rotation
+ [window addSubview:moviePlayer.view];
+// [[[CCDirector sharedDirector] openGLView] addSubview:moviePlayer.view];
+ } else {
+ // Use the old 2.0 style API
+ moviePlayer.movieControlMode = MPMovieControlModeHidden;
+ [moviePlayer play];
+ }
+
+ [window makeKeyAndVisible];
+}
+
+- (void)moviePlayBackDidFinish:(NSNotification*)notification {
+ MPMoviePlayerController *moviePlayer = [notification object];
+ [[NSNotificationCenter defaultCenter] removeObserver:self
+ name:MPMoviePlayerPlaybackDidFinishNotification
+ object:moviePlayer];
+
+ // If the moviePlayer.view was added to the openGL view, it needs to be removed
+ if ([moviePlayer respondsToSelector:@selector(setFullscreen:animated:)]) {
+ [moviePlayer.view removeFromSuperview];
+ }
+
+ [moviePlayer release];
+ CCLOG(@"DONE");
+// [[CCDirector sharedDirector] replaceScene: [HSMenuScene scene]];
+}
+
+
+
+- (void) setupCocos2d {
+
+ //Kick off sound initialisation, this will happen in a separate thread
+ [[GameSoundManager sharedManager] setup];
+
+ if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )
+ [CCDirector setDirectorType:kCCDirectorTypeNSTimer];
+ CCDirector *__director = [CCDirector sharedDirector];
+ [__director setDeviceOrientation:kCCDeviceOrientationPortrait];
+ [__director setDisplayFPS:NO];
+ [__director setAnimationInterval:1.0/60];
+ EAGLView *__glView = [EAGLView viewWithFrame:[window bounds]
+ pixelFormat:kEAGLColorFormatRGB565
+ depthFormat:0 /* GL_DEPTH_COMPONENT24_OES */
+ preserveBackbuffer:NO];
+ [__director setOpenGLView:__glView];
+ [window addSubview:__glView];
+ [window makeKeyAndVisible];
+
+ // not sure why, the page turn says to turn that on
+ // [[CCDirector sharedDirector] setDepthBufferFormat:kDepthBuffer16];
+
+ // Obtain the shared director in order to...
+ CCDirector *director = [CCDirector sharedDirector];
+
+ // Sets landscape mode
+ [director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft];
+
+ // Turn on display FPS
+ //[director setDisplayFPS:YES];
+
+ // Turn on multiple touches
+ EAGLView *view = [director openGLView];
+ [view setMultipleTouchEnabled:YES];
+
+ // Default texture format for PNG/BMP/TIFF/JPEG/GIF images
+ // It can be RGBA8888, RGBA4444, RGB5_A1, RGB565
+ // You can change anytime.
+ [CCTexture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA8888];
+
+ // kick off level loading. todo figure out best place to do this
+ [JSWorld setup];
+ GameController* gc = [GameController sharedGameController];
+ [gc retain];
+
+ if([gc firstLaunch])
+ [[CCDirector sharedDirector] runWithScene: [HSIntroScene scene]];
+ els
+ [[CCDirector sharedDirector] runWithScene: [HSMenuScene scene]];
+
+ // [[CCDirector sharedDirector] runWithScene: [HSOptionsScene scene]];
+ // [[CCDirector sharedDirector] runWithScene: [HSLevelSelectionScene2 scene]];
+ // [[CCDirector sharedDirector] runWithScene: [HSGameScene scene]];
+ // [[CCDirector sharedDirector] runWithScene: [HSBuyNowSceneFlat scene]];
+}
+
+
+- (void)applicationWillResignActive:(UIApplication *)application {
+ [[CCDirector sharedDirector] pause];
+}
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+ [[CCDirector sharedDirector] resume];
+}
+
+- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
+ NSLog(@"memory warning");
+ [[CCDirector sharedDirector] purgeCachedData];
+ // [[CCTextureCache sharedTextureCache] removeUnusedTextures];
+ [[CCTextureCache sharedTextureCache] removeAllTextures];
+}
+
+-(void) applicationDidEnterBackground:(UIApplication*)application {
+ [[CCDirector sharedDirector] stopAnimation];
+}
+
+-(void) applicationWillEnterForeground:(UIApplication*)application {
+ [[CCDirector sharedDirector] startAnimation];
+}
+
+- (void)applicationWillTerminate:(UIApplication *)application {
+ [[CCDirector sharedDirector] end];
+}
+
+- (void)applicationSignificantTimeChange:(UIApplication *)application {
+ [[CCDirector sharedDirector] setNextDeltaTimeZero:YES];
+}
+
+- (void)dealloc {
+ [[GameController sharedGameController] release];
+ [[CCDirector sharedDirector] release];
+ [window release];
+ [super dealloc];
+}
+
+#ifdef LITE_VERSION
+void uncaughtExceptionHandler(NSException *exception) {
+ [FlurryAPI logError:@"Uncaught" message:@"Crash!" exception:exception];
+}
+#endif
+
+
+@end
20 Classes/tmp.txt
@@ -0,0 +1,20 @@
+2010-08-24 07:35:18.638 JacobsShapes[11242:40b] touch at l.x:40.000000 l.y:96.000000
+2010-08-24 07:35:18.641 JacobsShapes[11242:40b] .
+2010-08-24 07:35:18.646 JacobsShapes[11242:40b] l.x:0.000000 l.y:0.000000
+2010-08-24 07:35:18.648 JacobsShapes[11242:40b] m.x:2811.000000 m.y:160.000000
+2010-08-24 07:35:18.648 JacobsShapes[11242:40b] touchLocation.x:40.000000 touchLocation.y:96.000000
+2010-08-24 07:35:18.649 JacobsShapes[11242:40b] gl-touchLocation.x:96.000000 gl-touchLocation.y:40.000000
+2010-08-24 07:35:18.649 JacobsShapes[11242:40b] blank gl-local.x:348.000000 gl-local.y:-6.500000
+2010-08-24 07:35:18.650 JacobsShapes[11242:40b] safari gl-local.x:0.000000 gl-local.y:8.000000
+
+
+2010-08-24 07:35:48.886 JacobsShapes[11242:40b] touch at l.x:47.000000 l.y:460.000000
+2010-08-24 07:35:48.894 JacobsShapes[11242:40b] .
+2010-08-24 07:35:48.897 JacobsShapes[11242:40b] l.x:-363.000000 l.y:-0.000000
+2010-08-24 07:35:48.900 JacobsShapes[11242:40b] m.x:2811.000000 m.y:160.000000
+2010-08-24 07:35:48.902 JacobsShapes[11242:40b] touchLocation.x:47.000000 touchLocation.y:460.000000
+2010-08-24 07:35:48.904 JacobsShapes[11242:40b] gl-touchLocation.x:460.000000 gl-touchLocation.y:47.000000
+2010-08-24 07:35:48.906 JacobsShapes[11242:40b] blank gl-local.x:1075.000000 gl-local.y:0.500000
+2010-08-24 07:35:48.907 JacobsShapes[11242:40b] safari gl-local.x:727.000000 gl-local.y:15.000000
+2010-08-24 07:35:48.910 JacobsShapes[11242:40b] city gl-local.x:364.000000 gl-local.y:15.000000
+2010-08-24 07:35:48.912 JacobsShapes[11242:40b] amazon gl-local.x:1.000000 gl-local.y:15.000000
22 LICENSE.cocos2d
@@ -0,0 +1,22 @@
+cocos2d for iPhone: http://www.cocos2d-iphone.org
+
+Copyright (c) 2008-2010 - (see each file to see the different copyright owners)
+
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
21 LICENSE.cocosdenshion
@@ -0,0 +1,21 @@
+ CocosDenshion Sound Engine
+
+ Copyright (c) 2010 Steve Oldmeadow
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
BIN  Resources/Icon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 Resources/Info.plist
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleDisplayName</key>
+ <string>${PRODUCT_DISPLAY_NAME}</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string>JacobsShapes</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>UIApplicationExitsOnSuspend</key>
+ <false/>
+ <key>UIPrerenderedIcon</key>
+ <true/>
+ <key>UIRequiredDeviceCapabilities</key>
+ <dict>
+ <key>accelerometer</key>
+ <true/>
+ <key>opengles-1</key>
+ <true/>
+ </dict>
+ <key>UIStatusBarHidden</key>
+ <true/>
+ <key>Application requires iPhone environment</key>
+ <string>YES</string>
+</dict>
+</plist>
BIN  Resources/fps_images.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1  libs/README
@@ -0,0 +1 @@
+This directory contains the libraries used in cocos2d
16 main.m
@@ -0,0 +1,16 @@
+//
+// main.m
+// shapes
+//
+// Created by Nate Murray on 7/24/10.
+// Copyright YetiApps 2010. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+int main(int argc, char *argv[]) {
+ NSAutoreleasePool *pool = [NSAutoreleasePool new];
+ int retVal = UIApplicationMain(argc, argv, nil, @"shapesAppDelegate");
+ [pool release];
+ return retVal;
+}
6,424 shapes-panels.xcodeproj/.dat89be.363
6,424 additions, 0 deletions not shown
1,478 shapes-panels.xcodeproj/project.pbxproj
@@ -0,0 +1,1478 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
+ 1F3B9A2D0EF2145700286867 /* shapesAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F3B9A2B0EF2145700286867 /* shapesAppDelegate.m */; };
+ 433BD8211201C7090025525E /* NMPanelMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 433BD8201201C7090025525E /* NMPanelMenu.m */; };
+ 433BD84A1201C73F0025525E /* NMPanelMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 433BD8491201C73F0025525E /* NMPanelMenuItem.m */; };
+ 434F461C11FB2F9400603A4D /* libcocos2d.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 434F45A311FB2F6A00603A4D /* libcocos2d.a */; };
+ 4365CA5C120A6AFB00E598B9 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4365CA5B120A6AFB00E598B9 /* MediaPlayer.framework */; };
+ 436B00F311FFB134007B2F00 /* GameController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 436B00F211FFB134007B2F00 /* GameController.mm */; };
+ 4379A70B12125BBA00256487 /* libFontLabel.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 434F45AB11FB2F6A00603A4D /* libFontLabel.a */; };
+ 43A94B471222B5990030A3BA /* HCUPPanelScene.m in Sources */ = {isa = PBXBuildFile; fileRef = 43A94B461222B5990030A3BA /* HCUPPanelScene.m */; };
+ 43A94B591222B83E0030A3BA /* CocosOverlayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 43A94B571222B83E0030A3BA /* CocosOverlayViewController.m */; };
+ 43A94B5E1222B87D0030A3BA /* CocosOverlayScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 43A94B5D1222B87D0030A3BA /* CocosOverlayScrollView.m */; };
+ 43D170D4122345AA0081657D /* PreviewScrollContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 43D170D3122345AA0081657D /* PreviewScrollContainerView.m */; };
+ 43E9C7E411FF2BD8000CA26E /* libCocosDenshion.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 434F45A711FB2F6A00603A4D /* libCocosDenshion.a */; };
+ 506EDB88102F4C4000A389B3 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 506EDB87102F4C4000A389B3 /* libz.dylib */; };
+ 506EDBA5102F4C9F00A389B3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 506EDBA4102F4C9F00A389B3 /* AVFoundation.framework */; };
+ 50F414F11069373D002A0D5E /* fps_images.png in Resources */ = {isa = PBXBuildFile; fileRef = 50F414ED1069373D002A0D5E /* fps_images.png */; };
+ 50F414F21069373D002A0D5E /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 50F414EE1069373D002A0D5E /* Icon.png */; };
+ DC6640030F83B3EA000B3E49 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC6640020F83B3EA000B3E49 /* AudioToolbox.framework */; };
+ DC6640050F83B3EA000B3E49 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC6640040F83B3EA000B3E49 /* OpenAL.framework */; };
+ DCCBF1B70F6022AE0040855A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCCBF1B60F6022AE0040855A /* CoreGraphics.framework */; };
+ DCCBF1B90F6022AE0040855A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCCBF1B80F6022AE0040855A /* Foundation.framework */; };
+ DCCBF1BB0F6022AE0040855A /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCCBF1BA0F6022AE0040855A /* OpenGLES.framework */; };
+ DCCBF1BD0F6022AE0040855A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCCBF1BC0F6022AE0040855A /* QuartzCore.framework */; };
+ DCCBF1BF0F6022AE0040855A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCCBF1BE0F6022AE0040855A /* UIKit.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 434F459C11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 509807081175041800EA7266;
+ remoteInfo = "build all tests";
+ };
+ 434F459E11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 504225700FC0B39C00B992F7;
+ remoteInfo = box2d;
+ };
+ 434F45A011FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50B2C4D10E100AEA00AE9530;
+ remoteInfo = Chipmunk;
+ };
+ 434F45A211FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 5018F24D0DFDEAC400C013A5;
+ remoteInfo = cocos2d;
+ };
+ 434F45A411FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 502C65EE0DFEF3DD00E4107D;
+ remoteInfo = "cocos2d-documentation";
+ };
+ 434F45A611FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50CB2FCA1004C8B100B7A750;
+ remoteInfo = CocosDenshion;
+ };
+ 434F45A811FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 509B3A0D0F31024E00F2FB95;
+ remoteInfo = cocosLive;
+ };
+ 434F45AA11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 505461DF10616AE100AB7C52;
+ remoteInfo = FontLabel;
+ };
+ 434F45AC11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 503164CD10277665003ACFE7;
+ remoteInfo = libpng;
+ };
+ 434F45AE11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 509B39DF0F31020900F2FB95;
+ remoteInfo = TouchJSON;
+ };
+ 434F45B011FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 8E6CBEEF0F7A758000D47B3A;
+ remoteInfo = vorbis;
+ };
+ 434F45B211FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 504CC32F1035BDE90096894C;
+ remoteInfo = ActionManagerTest;
+ };
+ 434F45B411FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50C93AAD0E0BF6E000517B01;
+ remoteInfo = ActionsTest;
+ };
+ 434F45B611FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 05CA7B0410ED674700F12774;
+ remoteInfo = ActionsWithBlocksSample;
+ };
+ 434F45B811FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 506882110E95761200F943E5;
+ remoteInfo = AtlasTest;
+ };
+ 434F45BA11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 504828800F45AED700A30CEF;
+ remoteInfo = AttachTest;
+ };
+ 434F45BC11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 5042262E0FC0B5D500B992F7;
+ remoteInfo = Box2dAccelTouchTest;
+ };
+ 434F45BE11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50010ED2103B3DB80059EC2E;
+ remoteInfo = Box2dTestBed;
+ };
+ 434F45C011FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50B2C5E80E100EF000AE9530;
+ remoteInfo = ChipmunkAccelTouchTest;
+ };
+ 434F45C211FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50B2CE460E129FD900AE9530;
+ remoteInfo = ChipmunkTestBed;
+ };
+ 434F45C411FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 506C77E20E01520900B48100;
+ remoteInfo = ClickAndMoveTest;
+ };
+ 434F45C611FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 505224F911B3D4700061670F;
+ remoteInfo = "CocosDenshion - Tom The Turret";
+ };
+ 434F45C811FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 505228BA11B3DBB90061670F;
+ remoteInfo = "CocosDenshion - Drum Pad";
+ };
+ 434F45CA11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 5052293C11B3DCD80061670F;
+ remoteInfo = "CocosDenshion - Fade To Grey";
+ };
+ 434F45CC11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 5052296E11B3DCE90061670F;
+ remoteInfo = "CocosDenshion - FancyRat Metering";
+ };
+ 434F45CE11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 509B3A280F3102FD00F2FB95;
+ remoteInfo = cocosLiveTest;
+ };
+ 434F45D011FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 506144080E589A2E003CCDB7;
+ remoteInfo = cocosnodeTest;
+ };
+ 434F45D211FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 501945740F964C620059CE7C;
+ remoteInfo = drawPrimitivesTest;
+ };
+ 434F45D411FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 504E17DC11C4C7E100E19835;
+ remoteInfo = EAGLViewTest;
+ };
+ 434F45D611FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 505B63A30F2F4210001B4104;
+ remoteInfo = EaseActionsTest;
+ };
+ 434F45D811FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50A24E440F377FA1007CAEB0;
+ remoteInfo = EffectsTest;
+ };
+ 434F45DA11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50D56FD20F3FABEC007CD6B9;
+ remoteInfo = EffectsAdvancedTest;
+ };
+ 434F45DC11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = DAABAA9A1059A42E00794EB3;
+ remoteInfo = FontTest;
+ };
+ 434F45DE11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50C7D4950E5C2ED80035ACA2;
+ remoteInfo = IntervalTest;
+ };
+ 434F45E011FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50E77D1211D4C926009CA2C2;
+ remoteInfo = HiResTest;
+ };
+ 434F45E211FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 504799B1100F6A4200D1C71A;
+ remoteInfo = LayerTest;
+ };
+ 434F45E411FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 506C7A090E01C73A00B48100;
+ remoteInfo = MenuTest;
+ };
+ 434F45E611FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 05AAF3E410EE85B300CACA2B;
+ remoteInfo = MenuTestWithBlocks;
+ };
+ 434F45E811FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50A783C40F3AFCE500104C45;
+ remoteInfo = MotionStreakTest;
+ };
+ 434F45EA11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50C195600EE4B57E00829067;
+ remoteInfo = ParallaxTest;
+ };
+ 434F45EC11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50DB1BCA0E1C1E5900A89DFF;
+ remoteInfo = ParticleTest;
+ };
+ 434F45EE11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 8EDF3ED80F6BDA0000F54643;
+ remoteInfo = "PASoundEngineTest (experimental)";
+ };
+ 434F45F011FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 5006BD0D11BCF3C300E488BD;
+ remoteInfo = PerformanceTestChildrenNode;
+ };
+ 434F45F211FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50E2A40010A4A53000D894CE;
+ remoteInfo = PerformanceTestParticles;
+ };
+ 434F45F411FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50E2A3F410A4A51C00D894CE;
+ remoteInfo = PerformanceTestSprites;
+ };
+ 434F45F611FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 504018FB10FE800D0017842A;
+ remoteInfo = PerformanceTestTouches;
+ };
+ 434F45F811FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 501504ED11330E1700A9CA65;
+ remoteInfo = ProgressActionsTest;
+ };
+ 434F45FA11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 495E73F7104B74E20012BB52;
+ remoteInfo = RenderTextureTest;
+ };
+ 434F45FC11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 502C66180DFEFCCA00E4107D;
+ remoteInfo = RotateWorldTest;
+ };
+ 434F45FE11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 506C800E0E041C9300B48100;
+ remoteInfo = SceneTest;
+ };
+ 434F460011FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 508CA7DA1193270F003AC397;
+ remoteInfo = SchedulerTest;
+ };
+ 434F460211FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 501C7C910F91EFFF0024A296;
+ remoteInfo = SpriteTest;
+ };
+ 434F460411FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 505B62D60F2E6A0F001B4104;
+ remoteInfo = Texture2dTest;
+ };
+ 434F460611FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 503F5CBE101FE930002A37E5;
+ remoteInfo = TileMapTest;
+ };
+ 434F460811FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 5012DD3B0FE2994300D6DDD1;
+ remoteInfo = TouchesTest;
+ };
+ 434F460A11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50C938E00E0A9DBB00517B01;
+ remoteInfo = TransitionsTest;
+ };
+ 434F460C11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50DFC29F0FF627B6007E7827;
+ remoteInfo = HelloWorldSample;
+ };
+ 434F460E11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50D0E05F0FF9232E00098927;
+ remoteInfo = HelloActionsSample;
+ };
+ 434F461011FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50D0E0DE0FF930BA00098927;
+ remoteInfo = HelloEventsSample;
+ };
+ 434F461211FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 507FF8F2116D16F600B6FAB2;
+ remoteInfo = Bug350;
+ };
+ 434F461411FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50CB34DD100765EF00B7A750;
+ remoteInfo = Bug422;
+ };
+ 434F461611FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 50CBA48711CBD6FB007B009D;
+ remoteInfo = Bug886;
+ };
+ 434F461811FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 507C0F0B11D609290075E747;
+ remoteInfo = Bug899;
+ };
+ 434F461A11FB2F6A00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 502BF56911E39CC30030C477;
+ remoteInfo = Bug914;
+ };
+ 434F461D11FB2F9B00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = 5018F24C0DFDEAC400C013A5;
+ remoteInfo = cocos2d;
+ };
+ 434F461F11FB2FA000603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = 50CB2FC91004C8B100B7A750;
+ remoteInfo = CocosDenshion;
+ };
+ 434F462111FB2FA300603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = 505461DE10616AE100AB7C52;
+ remoteInfo = FontLabel;
+ };
+ 434F462311FB2FA700603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = 503164CC10277665003ACFE7;
+ remoteInfo = libpng;
+ };
+ 434F462511FB2FAA00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = 509B39DE0F31020900F2FB95;
+ remoteInfo = TouchJSON;
+ };
+ 434F462711FB2FAE00603A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = 8E6CBEEE0F7A758000D47B3A;
+ remoteInfo = vorbis;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 1D6058910D05DD3D006BFB54 /* PanelsExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PanelsExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1F3B9A2B0EF2145700286867 /* shapesAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = shapesAppDelegate.m; path = Classes/shapesAppDelegate.m; sourceTree = SOURCE_ROOT; };
+ 1F3B9A2C0EF2145700286867 /* shapesAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = shapesAppDelegate.h; path = Classes/shapesAppDelegate.h; sourceTree = SOURCE_ROOT; };
+ 1F3B9A820EF2151B00286867 /* shapes_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = shapes_Prefix.pch; sourceTree = SOURCE_ROOT; };
+ 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ 433BD81F1201C7090025525E /* NMPanelMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMPanelMenu.h; sourceTree = "<group>"; };
+ 433BD8201201C7090025525E /* NMPanelMenu.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMPanelMenu.m; sourceTree = "<group>"; };
+ 433BD8481201C73F0025525E /* NMPanelMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMPanelMenuItem.h; sourceTree = "<group>"; };
+ 433BD8491201C73F0025525E /* NMPanelMenuItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMPanelMenuItem.m; sourceTree = "<group>"; };
+ 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = "cocos2d-iphone.xcodeproj"; sourceTree = COCOS2D_SRC; };
+ 4365CA5B120A6AFB00E598B9 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; };
+ 436B00F011FFB124007B2F00 /* SynthesizeSingleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SynthesizeSingleton.h; path = Classes/Other/SynthesizeSingleton.h; sourceTree = "<group>"; };
+ 436B00F111FFB134007B2F00 /* GameController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameController.h; sourceTree = "<group>"; };
+ 436B00F211FFB134007B2F00 /* GameController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GameController.mm; sourceTree = "<group>"; };
+ 43A94B451222B5990030A3BA /* HCUPPanelScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HCUPPanelScene.h; sourceTree = "<group>"; };
+ 43A94B461222B5990030A3BA /* HCUPPanelScene.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HCUPPanelScene.m; sourceTree = "<group>"; };
+ 43A94B561222B83E0030A3BA /* CocosOverlayViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CocosOverlayViewController.h; sourceTree = "<group>"; };
+ 43A94B571222B83E0030A3BA /* CocosOverlayViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CocosOverlayViewController.m; sourceTree = "<group>"; };
+ 43A94B5C1222B87D0030A3BA /* CocosOverlayScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CocosOverlayScrollView.h; sourceTree = "<group>"; };
+ 43A94B5D1222B87D0030A3BA /* CocosOverlayScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CocosOverlayScrollView.m; sourceTree = "<group>"; };
+ 43D170D2122345AA0081657D /* PreviewScrollContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreviewScrollContainerView.h; sourceTree = "<group>"; };
+ 43D170D3122345AA0081657D /* PreviewScrollContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PreviewScrollContainerView.m; sourceTree = "<group>"; };
+ 43D92D7C11FDD3E80055D2D5 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = common.h; path = Classes/common.h; sourceTree = SOURCE_ROOT; };
+ 504DFC6810AF1739006D82FE /* LICENSE.cocos2d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.cocos2d; sourceTree = "<group>"; };
+ 504DFC6910AF1739006D82FE /* LICENSE.cocosdenshion */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.cocosdenshion; sourceTree = "<group>"; };
+ 506EDB87102F4C4000A389B3 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
+ 506EDBA4102F4C9F00A389B3 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
+ 50F414ED1069373D002A0D5E /* fps_images.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = fps_images.png; sourceTree = "<group>"; };
+ 50F414EE1069373D002A0D5E /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = "<group>"; };
+ 50F414EF1069373D002A0D5E /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ DC6640020F83B3EA000B3E49 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
+ DC6640040F83B3EA000B3E49 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; };
+ DCCBF1B60F6022AE0040855A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ DCCBF1B80F6022AE0040855A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ DCCBF1BA0F6022AE0040855A /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
+ DCCBF1BC0F6022AE0040855A /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+ DCCBF1BE0F6022AE0040855A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 1D60588F0D05DD3D006BFB54 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 434F461C11FB2F9400603A4D /* libcocos2d.a in Frameworks */,
+ 43E9C7E411FF2BD8000CA26E /* libCocosDenshion.a in Frameworks */,
+ 4379A70B12125BBA00256487 /* libFontLabel.a in Frameworks */,
+ DCCBF1B70F6022AE0040855A /* CoreGraphics.framework in Frameworks */,
+ DCCBF1B90F6022AE0040855A /* Foundation.framework in Frameworks */,
+ DCCBF1BB0F6022AE0040855A /* OpenGLES.framework in Frameworks */,
+ DCCBF1BD0F6022AE0040855A /* QuartzCore.framework in Frameworks */,
+ DCCBF1BF0F6022AE0040855A /* UIKit.framework in Frameworks */,
+ DC6640030F83B3EA000B3E49 /* AudioToolbox.framework in Frameworks */,
+ DC6640050F83B3EA000B3E49 /* OpenAL.framework in Frameworks */,
+ 506EDB88102F4C4000A389B3 /* libz.dylib in Frameworks */,
+ 506EDBA5102F4C9F00A389B3 /* AVFoundation.framework in Frameworks */,
+ 4365CA5C120A6AFB00E598B9 /* MediaPlayer.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 19C28FACFE9D520D11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 1D6058910D05DD3D006BFB54 /* PanelsExample.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
+ isa = PBXGroup;
+ children = (
+ 434F449111FB2F6100603A4D /* cocos2d-iphone.xcodeproj */,
+ 504DFC6810AF1739006D82FE /* LICENSE.cocos2d */,
+ 504DFC6910AF1739006D82FE /* LICENSE.cocosdenshion */,
+ 2D500B1D0D5A766B00DBA0E3 /* Classes */,
+ 29B97315FDCFA39411CA2CEA /* Other Sources */,
+ 50F414EB1069373D002A0D5E /* Resources */,
+ 29B97323FDCFA39411CA2CEA /* Frameworks */,
+ 19C28FACFE9D520D11CA2CBB /* Products */,
+ );
+ name = CustomTemplate;
+ sourceTree = "<group>";
+ };
+ 29B97315FDCFA39411CA2CEA /* Other Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 29B97316FDCFA39411CA2CEA /* main.m */,
+ 1F3B9A820EF2151B00286867 /* shapes_Prefix.pch */,
+ 436B00F011FFB124007B2F00 /* SynthesizeSingleton.h */,
+ );
+ name = "Other Sources";
+ sourceTree = "<group>";
+ };
+ 29B97323FDCFA39411CA2CEA /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 4365CA5B120A6AFB00E598B9 /* MediaPlayer.framework */,
+ DCCBF1B60F6022AE0040855A /* CoreGraphics.framework */,
+ DCCBF1B80F6022AE0040855A /* Foundation.framework */,
+ DCCBF1BA0F6022AE0040855A /* OpenGLES.framework */,
+ DCCBF1BC0F6022AE0040855A /* QuartzCore.framework */,
+ DCCBF1BE0F6022AE0040855A /* UIKit.framework */,
+ DC6640040F83B3EA000B3E49 /* OpenAL.framework */,
+ DC6640020F83B3EA000B3E49 /* AudioToolbox.framework */,
+ 506EDB87102F4C4000A389B3 /* libz.dylib */,
+ 506EDBA4102F4C9F00A389B3 /* AVFoundation.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ 2D500B1D0D5A766B00DBA0E3 /* Classes */ = {
+ isa = PBXGroup;
+ children = (
+ 433BD7D61201C6B60025525E /* Views */,
+ 43E9C7C311FF2A5A000CA26E /* Controllers */,
+ 43D92D9811FDD8FB0055D2D5 /* Models */,
+ 434F465111FB317300603A4D /* Scenes */,
+ 1F3B9A2C0EF2145700286867 /* shapesAppDelegate.h */,
+ 1F3B9A2B0EF2145700286867 /* shapesAppDelegate.m */,
+ );
+ path = Classes;