Adds Sparrow as source dep, as linker flags -ObjC -all_load break Box2D. sparrow
authordsc <david.schoonover@gmail.com>
Sun, 8 May 2011 04:19:08 +0000 (21:19 -0700)
committerdsc <david.schoonover@gmail.com>
Sun, 8 May 2011 04:19:08 +0000 (21:19 -0700)
33 files changed:
etc/en.lproj/InfoPlist.strings [moved from tanks/tanks/en.lproj/InfoPlist.strings with 100% similarity]
etc/tanks-Info.plist [moved from tanks/tanks/tanks-Info.plist with 96% similarity]
src/RootAppDelegate.h [moved from tanks/tanks/tanksAppDelegate.h with 77% similarity]
src/RootAppDelegate.m [moved from tanks/tanks/tanksAppDelegate.m with 85% similarity]
src/main.m [moved from tanks/tanks/main.m with 100% similarity]
src/prefix.pch [moved from tanks/tanks/tanks-Prefix.pch with 100% similarity]
src/render/Box2DAppDelegate.h [new file with mode: 0644]
src/render/Box2DAppDelegate.mm [new file with mode: 0644]
src/render/Box2DView.h [new file with mode: 0644]
src/render/Box2DView.mm [new file with mode: 0644]
src/render/Delegates.h [new file with mode: 0644]
src/render/GLES-Render.h [new file with mode: 0644]
src/render/GLES-Render.mm [new file with mode: 0644]
src/render/TestEntriesViewController.h [new file with mode: 0644]
src/render/TestEntriesViewController.mm [new file with mode: 0644]
src/render/iPhoneTest.h [new file with mode: 0644]
src/render/iPhoneTest.mm [new file with mode: 0644]
src/render/iPhoneTestEntries.mm [new file with mode: 0644]
src/tanks/Game.h [moved from tanks/tanks/Game.h with 100% similarity]
src/tanks/Game.m [moved from tanks/tanks/Game.m with 100% similarity]
src/ui/iPad/RootAppDelegate_iPad.h [moved from tanks/tanks/iPad/tanksAppDelegate_iPad.h with 55% similarity]
src/ui/iPad/RootAppDelegate_iPad.m [moved from tanks/tanks/iPad/tanksAppDelegate_iPad.m with 59% similarity]
src/ui/iPad/en.lproj/MainWindow_iPad.xib [moved from tanks/tanks/iPad/en.lproj/MainWindow_iPad.xib with 61% similarity]
src/ui/iPhone/RootAppDelegate_iPhone.h [moved from tanks/tanks/iPhone/tanksAppDelegate_iPhone.h with 55% similarity]
src/ui/iPhone/RootAppDelegate_iPhone.m [moved from tanks/tanks/iPhone/tanksAppDelegate_iPhone.m with 58% similarity]
src/ui/iPhone/en.lproj/MainWindow_iPhone.xib [moved from tanks/tanks/iPhone/en.lproj/MainWindow_iPhone.xib with 59% similarity]
tanks.xcodeproj/project.pbxproj [new file with mode: 0644]
tanks/tanks.xcodeproj/project.pbxproj [deleted file]
tanks/tanksTests/en.lproj/InfoPlist.strings [deleted file]
tanks/tanksTests/tanksTests-Info.plist [deleted file]
tanks/tanksTests/tanksTests-Prefix.pch [deleted file]
tanks/tanksTests/tanksTests.h [deleted file]
tanks/tanksTests/tanksTests.m [deleted file]

similarity index 96%
rename from tanks/tanks/tanks-Info.plist
rename to etc/tanks-Info.plist
index 3d0f19a..2a1e14a 100644 (file)
@@ -35,6 +35,7 @@
                <string>UIInterfaceOrientationPortrait</string>
                <string>UIInterfaceOrientationLandscapeLeft</string>
                <string>UIInterfaceOrientationLandscapeRight</string>
+               <string>UIInterfaceOrientationPortraitUpsideDown</string>
        </array>
        <key>UISupportedInterfaceOrientations~ipad</key>
        <array>
similarity index 77%
rename from tanks/tanks/tanksAppDelegate.h
rename to src/RootAppDelegate.h
index 2db3133..b3d29e3 100644 (file)
@@ -1,5 +1,5 @@
 //
-//  tanksAppDelegate.h
+//  RootAppDelegate.h
 //  tanks
 //
 //  Created by dsc on 4/27/11.
@@ -9,7 +9,7 @@
 #import <UIKit/UIKit.h>
 #import "Sparrow.h"
 
-@interface tanksAppDelegate : NSObject <UIApplicationDelegate>
+@interface RootAppDelegate : NSObject <UIApplicationDelegate>
 {
     UIWindow *window;
     SPView *sparrowView;
similarity index 85%
rename from tanks/tanks/tanksAppDelegate.m
rename to src/RootAppDelegate.m
index f936da6..0cdfe1d 100644 (file)
@@ -1,15 +1,15 @@
 //
-//  tanksAppDelegate.m
+//  RootAppDelegate.m
 //  tanks
 //
 //  Created by dsc on 4/27/11.
 //  Copyright 2011 lttlst.com. All rights reserved.
 //
 
-#import "tanksAppDelegate.h"
+#import "RootAppDelegate.h"
 #import "Game.h"
 
-@implementation tanksAppDelegate
+@implementation RootAppDelegate
 
 @synthesize window;
 @synthesize sparrowView;
@@ -21,7 +21,7 @@
     [SPStage setSupportHighResolutions:YES];
     [SPAudioEngine start];
     
-    Game *game = [[Game alloc] init];        
+    Game *game = [[Game alloc] init];
     sparrowView.stage = game;
     [game release];
     
similarity index 100%
rename from tanks/tanks/main.m
rename to src/main.m
similarity index 100%
rename from tanks/tanks/tanks-Prefix.pch
rename to src/prefix.pch
diff --git a/src/render/Box2DAppDelegate.h b/src/render/Box2DAppDelegate.h
new file mode 100644 (file)
index 0000000..f081ba3
--- /dev/null
@@ -0,0 +1,24 @@
+//
+//  Box2DAppDelegate.h
+//  Box2D
+//
+//  Box2D iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
+//
+
+#import <UIKit/UIKit.h>
+#import "TestEntriesViewController.h"
+#import "Delegates.h"
+
+@class Box2DView;
+
+@interface Box2DAppDelegate : NSObject <UIApplicationDelegate,TestSelectDelegate> {
+    UIWindow *window;
+    Box2DView *glView;
+       TestEntriesViewController *testEntriesView;
+}
+
+@property (nonatomic, retain) IBOutlet UIWindow *window;
+@property (nonatomic, retain) IBOutlet Box2DView *glView;
+
+@end
+
diff --git a/src/render/Box2DAppDelegate.mm b/src/render/Box2DAppDelegate.mm
new file mode 100644 (file)
index 0000000..e04a09e
--- /dev/null
@@ -0,0 +1,62 @@
+//
+//  Box2DAppDelegate.m
+//  Box2D
+//
+//  Box2D iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
+//
+
+#import <UIKit/UIKit.h>
+#import "Box2DAppDelegate.h"
+#import "Box2DView.h"
+
+@implementation Box2DAppDelegate
+
+@synthesize window;
+@synthesize glView;
+
+- (void)applicationDidFinishLaunching:(UIApplication *)application {
+    [application setStatusBarHidden:true];
+       
+       [glView removeFromSuperview];
+       
+       glView.animationInterval = 1.0 / 60.0;
+       
+       testEntriesView=[[TestEntriesViewController alloc] initWithStyle:UITableViewStylePlain];
+       [testEntriesView setDelegate:self];
+       [glView setDelegate:self];
+       
+       [window addSubview:[testEntriesView view]];
+}
+
+-(void) selectTest:(int) testIndex
+{
+       [[testEntriesView view] removeFromSuperview];
+       [window addSubview:glView];
+       [glView startAnimation];
+       [glView selectTestEntry:testIndex];
+}
+
+-(void) leaveTest
+{
+       [glView stopAnimation];
+       [glView removeFromSuperview];
+       [window addSubview:[testEntriesView view]];
+}
+
+- (void)applicationWillResignActive:(UIApplication *)application {
+       glView.animationInterval = 1.0 / 5.0;
+}
+
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+       glView.animationInterval = 1.0 / 60.0;
+}
+
+
+- (void)dealloc {
+       [window release];
+       [glView release];
+       [super dealloc];
+}
+
+@end
diff --git a/src/render/Box2DView.h b/src/render/Box2DView.h
new file mode 100644 (file)
index 0000000..81d50b3
--- /dev/null
@@ -0,0 +1,63 @@
+//
+//  Box2DView.h
+//  Box2D OpenGL View
+//
+//  Box2D iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
+//
+
+
+#import <UIKit/UIKit.h>
+#import <OpenGLES/EAGL.h>
+#import <OpenGLES/ES1/gl.h>
+#import <OpenGLES/ES1/glext.h>
+
+#import "iPhoneTest.h"
+#import "Delegates.h"
+
+/*
+This class wraps the CAEAGLLayer from CoreAnimation into a convenient UIView subclass.
+The view content is basically an EAGL surface you render your OpenGL scene into.
+Note that setting the view non-opaque will only work if the EAGL surface has an alpha channel.
+*/
+@interface Box2DView : UIView <UIAccelerometerDelegate> {
+    
+@private
+    /* The pixel dimensions of the backbuffer */
+    GLint backingWidth;
+    GLint backingHeight;
+    
+    EAGLContext *context;
+    
+    /* OpenGL names for the renderbuffer and framebuffers used to render to this view */
+    GLuint viewRenderbuffer, viewFramebuffer;
+    
+    /* OpenGL name for the depth buffer that is attached to viewFramebuffer, if it exists (0 if it does not exist) */
+    GLuint depthRenderbuffer;
+    
+    NSTimer *animationTimer;
+    NSTimeInterval animationInterval;
+       
+       TestEntry* entry;
+       Test* test;
+
+       // Position offset and scale
+       float sceneScale;
+       CGPoint positionOffset;
+       CGPoint lastWorldTouch;
+       CGPoint lastScreenTouch;
+       
+       bool panning;
+       int doubleClickValidCountdown;
+       
+       id<TestSelectDelegate> _delegate;
+       
+}
+@property(assign) id<TestSelectDelegate> delegate;
+@property NSTimeInterval animationInterval;
+
+- (void)startAnimation;
+- (void)stopAnimation;
+- (void)drawView;
+-(void) selectTestEntry:(int) testIndex;
+
+@end
diff --git a/src/render/Box2DView.mm b/src/render/Box2DView.mm
new file mode 100644 (file)
index 0000000..11743b0
--- /dev/null
@@ -0,0 +1,295 @@
+//
+//  Box2DView.mm
+//  Box2D OpenGL View
+//
+//  Box2D iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
+//
+
+#import <QuartzCore/QuartzCore.h>
+#import <OpenGLES/EAGLDrawable.h>
+
+#import "Box2DView.h"
+
+#define USE_DEPTH_BUFFER 0
+#define kAccelerometerFrequency 30
+#define FRAMES_BETWEEN_PRESSES_FOR_DOUBLE_CLICK 10
+
+Settings settings;
+
+// A class extension to declare private methods
+@interface Box2DView ()
+
+@property (nonatomic, retain) EAGLContext *context;
+@property (nonatomic, assign) NSTimer *animationTimer;
+
+- (BOOL) createFramebuffer;
+- (void) destroyFramebuffer;
+
+@end
+
+
+@implementation Box2DView
+
+@synthesize context;
+@synthesize animationTimer;
+@synthesize animationInterval;
+@synthesize delegate=_delegate;
+
+// You must implement this method
++ (Class)layerClass {
+    return [CAEAGLLayer class];
+}
+
+
+//The GL view is stored in the nib file. When it's unarchived it's sent -initWithCoder:
+- (id)initWithCoder:(NSCoder*)coder {
+    
+    if ((self = [super initWithCoder:coder])) {
+        // Get the layer
+        CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
+        
+        eaglLayer.opaque = YES;
+        eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
+                                        [NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];
+        
+        context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
+        
+        if (!context || ![EAGLContext setCurrentContext:context]) {
+            [self release];
+            return nil;
+        }
+        
+        animationInterval = 1.0 / 60.0;
+               sceneScale=10.0f;
+               positionOffset=CGPointMake(0, 0);
+               lastWorldTouch=CGPointMake(0, 0);
+               
+               [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / kAccelerometerFrequency)];
+               [[UIAccelerometer sharedAccelerometer] setDelegate:self];
+    }
+       
+       
+    return self;
+}
+
+-(void) selectTestEntry:(int) testIndex
+{
+       // Destroy existing scene
+       delete test;
+       
+       entry = g_testEntries + testIndex;
+       test = entry->createFcn();
+       
+       doubleClickValidCountdown=0;
+       
+       sceneScale=10.0f;
+       positionOffset=CGPointMake(0, 0);
+       lastWorldTouch=CGPointMake(0, 0);
+}
+
+
+
+- (void)drawView {
+    
+
+       
+       if (doubleClickValidCountdown>0) doubleClickValidCountdown--;
+       
+    [EAGLContext setCurrentContext:context];
+    
+    glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
+    glViewport(0, 0, backingWidth, backingHeight);
+    
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+       
+       glOrthof(-sceneScale, sceneScale, -sceneScale*1.5f, sceneScale*1.5f, -1.0f, 1.0f);
+       
+    glMatrixMode(GL_MODELVIEW);
+    glLoadIdentity();
+       glTranslatef(positionOffset.x, positionOffset.y,0);
+    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
+    glClear(GL_COLOR_BUFFER_BIT);
+    
+       glEnable(GL_BLEND);
+       glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+       
+    glEnableClientState(GL_VERTEX_ARRAY);
+
+       test->Step(&settings);
+       
+       glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
+    [context presentRenderbuffer:GL_RENDERBUFFER_OES];
+}
+
+
+- (void)layoutSubviews {
+    [EAGLContext setCurrentContext:context];
+    [self destroyFramebuffer];
+    [self createFramebuffer];
+    [self drawView];
+}
+
+
+- (BOOL)createFramebuffer {
+    
+    glGenFramebuffersOES(1, &viewFramebuffer);
+    glGenRenderbuffersOES(1, &viewRenderbuffer);
+    
+    glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
+    glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
+    [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer];
+    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);
+    
+    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
+    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
+    
+    if (USE_DEPTH_BUFFER) {
+        glGenRenderbuffersOES(1, &depthRenderbuffer);
+        glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
+        glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight);
+        glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);
+    }
+    
+    if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) {
+        NSLog(@"failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
+        return NO;
+    }
+    
+    return YES;
+}
+
+
+- (void)destroyFramebuffer {
+    
+    glDeleteFramebuffersOES(1, &viewFramebuffer);
+    viewFramebuffer = 0;
+    glDeleteRenderbuffersOES(1, &viewRenderbuffer);
+    viewRenderbuffer = 0;
+    
+    if(depthRenderbuffer) {
+        glDeleteRenderbuffersOES(1, &depthRenderbuffer);
+        depthRenderbuffer = 0;
+    }
+}
+
+
+- (void)startAnimation {
+    self.animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(drawView) userInfo:nil repeats:YES];
+}
+
+
+- (void)stopAnimation {
+    self.animationTimer = nil;
+}
+
+
+- (void)setAnimationTimer:(NSTimer *)newTimer {
+    [animationTimer invalidate];
+    animationTimer = newTimer;
+}
+
+
+- (void)setAnimationInterval:(NSTimeInterval)interval {
+    
+    animationInterval = interval;
+    if (animationTimer) {
+        [self stopAnimation];
+        [self startAnimation];
+    }
+}
+
+
+- (void)dealloc {
+    
+    [self stopAnimation];
+    
+    if ([EAGLContext currentContext] == context) {
+        [EAGLContext setCurrentContext:nil];
+    }
+    
+    [context release];  
+    [super dealloc];
+}
+
+-(CGPoint) screenSpaceToWorldSpace:(CGPoint) screenLocation
+{
+       screenLocation.x-=160;
+       screenLocation.y-=240;
+       screenLocation.x/=160;
+       screenLocation.y/=160;
+       screenLocation.x*=sceneScale;
+       screenLocation.y*=-sceneScale;
+       
+       screenLocation.x-=positionOffset.x;
+       screenLocation.y-=positionOffset.y;
+       return screenLocation;
+}
+
+- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
+{
+       
+       if (doubleClickValidCountdown>0)
+       {
+               [_delegate leaveTest];
+               return;
+       }
+               
+       doubleClickValidCountdown=FRAMES_BETWEEN_PRESSES_FOR_DOUBLE_CLICK;      
+       
+       
+       panning=false;
+       for (UITouch *touch in touches)
+       {
+               CGPoint touchLocation=[touch locationInView:self];
+               CGPoint worldPosition=[self screenSpaceToWorldSpace:touchLocation];
+               //printf("Screen touched %f,%f -> %f,%f\n",touchLocation.x,touchLocation.y,worldPosition.x,worldPosition.y);
+               lastScreenTouch=touchLocation;
+               lastWorldTouch=worldPosition;
+               test->MouseDown(b2Vec2(lastWorldTouch.x,lastWorldTouch.y));
+               
+               if (!test->m_mouseJoint) panning=true;
+       }
+}
+
+- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
+{
+       for (UITouch *touch in touches)
+       {
+               CGPoint touchLocation=[touch locationInView:self];
+               CGPoint worldPosition=[self screenSpaceToWorldSpace:touchLocation];
+               //printf("Screen touched %f,%f -> %f,%f\n",touchLocation.x,touchLocation.y,worldPosition.x,worldPosition.y);
+               
+               
+               CGPoint screenDistanceMoved=CGPointMake(touchLocation.x-lastScreenTouch.x,touchLocation.y-lastScreenTouch.y);
+               if (panning)
+               {
+                       screenDistanceMoved.x/=160;
+                       screenDistanceMoved.y/=160;
+                       screenDistanceMoved.x*=sceneScale;
+                       screenDistanceMoved.y*=-sceneScale;
+                       positionOffset.x+=screenDistanceMoved.x;
+                       positionOffset.y+=screenDistanceMoved.y;
+               }
+               
+               lastScreenTouch=touchLocation;
+               lastWorldTouch=worldPosition;
+               test->MouseMove(b2Vec2(lastWorldTouch.x,lastWorldTouch.y));
+               
+       }
+}
+- (void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
+{
+       test->MouseUp(b2Vec2(lastWorldTouch.x,lastWorldTouch.y));
+}
+
+- (void) accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration
+{
+       // Only run for valid values
+       if (acceleration.y!=0 && acceleration.x!=0)
+       {
+               if (test) test->SetGravity(acceleration.x,acceleration.y);
+       }
+}
+
+@end
diff --git a/src/render/Delegates.h b/src/render/Delegates.h
new file mode 100644 (file)
index 0000000..b4b7976
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ *  Delegates.h
+ *  Box2D
+ *
+ *  Box2D iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
+ *
+ *
+ */
+
+@protocol TestSelectDelegate <NSObject>
+       -(void) selectTest:(int) testIndex;
+       -(void) leaveTest;
+
+@end
\ No newline at end of file
diff --git a/src/render/GLES-Render.h b/src/render/GLES-Render.h
new file mode 100644 (file)
index 0000000..2551666
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com
+*
+* iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
+*
+* This software is provided 'as-is', without any express or implied
+* warranty.  In no event will the authors be held liable for any damages
+* arising from the use of this software.
+* Permission is granted to anyone to use this software for any purpose,
+* including commercial applications, and to alter it and redistribute it
+* freely, subject to the following restrictions:
+* 1. The origin of this software must not be misrepresented; you must not
+* claim that you wrote the original software. If you use this software
+* in a product, an acknowledgment in the product documentation would be
+* appreciated but is not required.
+* 2. Altered source versions must be plainly marked as such, and must not be
+* misrepresented as being the original software.
+* 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#ifndef RENDER_H
+#define RENDER_H
+
+#import <UIKit/UIKit.h>
+#import <OpenGLES/EAGL.h>
+#import <OpenGLES/ES1/gl.h>
+#import <OpenGLES/ES1/glext.h>
+
+#include <Box2D/Box2D.h>
+
+struct b2AABB;
+
+// This class implements debug drawing callbacks that are invoked
+// inside b2World::Step.
+class GLESDebugDraw : public b2DebugDraw
+{
+public:
+       void DrawPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color);
+
+       void DrawSolidPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color);
+
+       void DrawCircle(const b2Vec2& center, float32 radius, const b2Color& color);
+
+       void DrawSolidCircle(const b2Vec2& center, float32 radius, const b2Vec2& axis, const b2Color& color);
+
+       void DrawSegment(const b2Vec2& p1, const b2Vec2& p2, const b2Color& color);
+
+       void DrawTransform(const b2Transform& xf);
+
+    void DrawPoint(const b2Vec2& p, float32 size, const b2Color& color);
+
+    void DrawString(int x, int y, const char* string, ...); 
+
+    void DrawAABB(b2AABB* aabb, const b2Color& color);
+};
+
+
+#endif
diff --git a/src/render/GLES-Render.mm b/src/render/GLES-Render.mm
new file mode 100644 (file)
index 0000000..abf5c57
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com
+*
+* iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
+*
+* This software is provided 'as-is', without any express or implied
+* warranty.  In no event will the authors be held liable for any damages
+* arising from the use of this software.
+* Permission is granted to anyone to use this software for any purpose,
+* including commercial applications, and to alter it and redistribute it
+* freely, subject to the following restrictions:
+* 1. The origin of this software must not be misrepresented; you must not
+* claim that you wrote the original software. If you use this software
+* in a product, an acknowledgment in the product documentation would be
+* appreciated but is not required.
+* 2. Altered source versions must be plainly marked as such, and must not be
+* misrepresented as being the original software.
+* 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "GLES-Render.h"
+
+
+#include <cstdio>
+#include <cstdarg>
+
+#include <cstring>
+
+void GLESDebugDraw::DrawPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color)
+{
+       glColor4f(color.r, color.g, color.b,1);
+       glVertexPointer(2, GL_FLOAT, 0, vertices);
+       glDrawArrays(GL_LINE_LOOP, 0, vertexCount);
+}
+
+void GLESDebugDraw::DrawSolidPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color)
+{
+       glVertexPointer(2, GL_FLOAT, 0, vertices);
+       
+       glColor4f(color.r, color.g, color.b,0.5f);
+       glDrawArrays(GL_TRIANGLE_FAN, 0, vertexCount);
+       
+       glColor4f(color.r, color.g, color.b,1);
+       glDrawArrays(GL_LINE_LOOP, 0, vertexCount);
+}
+
+void GLESDebugDraw::DrawCircle(const b2Vec2& center, float32 radius, const b2Color& color)
+{
+       const float32 k_segments = 16.0f;
+       int vertexCount=16;
+       const float32 k_increment = 2.0f * b2_pi / k_segments;
+       float32 theta = 0.0f;
+       
+       GLfloat                         glVertices[vertexCount*2];
+       for (int32 i = 0; i < k_segments; ++i)
+       {
+               b2Vec2 v = center + radius * b2Vec2(cosf(theta), sinf(theta));
+               glVertices[i*2]=v.x;
+               glVertices[i*2+1]=v.y;
+               theta += k_increment;
+       }
+       
+       glColor4f(color.r, color.g, color.b,1);
+       glVertexPointer(2, GL_FLOAT, 0, glVertices);
+       
+       glDrawArrays(GL_TRIANGLE_FAN, 0, vertexCount);
+}
+
+void GLESDebugDraw::DrawSolidCircle(const b2Vec2& center, float32 radius, const b2Vec2& axis, const b2Color& color)
+{
+       const float32 k_segments = 16.0f;
+       int vertexCount=16;
+       const float32 k_increment = 2.0f * b2_pi / k_segments;
+       float32 theta = 0.0f;
+       
+       GLfloat                         glVertices[vertexCount*2];
+       for (int32 i = 0; i < k_segments; ++i)
+       {
+               b2Vec2 v = center + radius * b2Vec2(cosf(theta), sinf(theta));
+               glVertices[i*2]=v.x;
+               glVertices[i*2+1]=v.y;
+               theta += k_increment;
+       }
+       
+       glColor4f(color.r, color.g, color.b,0.5f);
+       glVertexPointer(2, GL_FLOAT, 0, glVertices);
+       glDrawArrays(GL_TRIANGLE_FAN, 0, vertexCount);
+       glColor4f(color.r, color.g, color.b,1);
+       glDrawArrays(GL_LINE_LOOP, 0, vertexCount);
+       
+       // Draw the axis line
+       DrawSegment(center,center+radius*axis,color);
+}
+
+void GLESDebugDraw::DrawSegment(const b2Vec2& p1, const b2Vec2& p2, const b2Color& color)
+{
+       glColor4f(color.r, color.g, color.b,1);
+       GLfloat                         glVertices[] = {
+               p1.x,p1.y,p2.x,p2.y
+       };
+       glVertexPointer(2, GL_FLOAT, 0, glVertices);
+       glDrawArrays(GL_LINES, 0, 2);
+}
+
+void GLESDebugDraw::DrawTransform(const b2Transform& xf)
+{
+       b2Vec2 p1 = xf.position, p2;
+       const float32 k_axisScale = 0.4f;
+
+       p2 = p1 + k_axisScale * xf.R.col1;
+       DrawSegment(p1,p2,b2Color(1,0,0));
+       
+       p2 = p1 + k_axisScale * xf.R.col2;
+       DrawSegment(p1,p2,b2Color(0,1,0));
+}
+
+void GLESDebugDraw::DrawPoint(const b2Vec2& p, float32 size, const b2Color& color)
+{
+       glColor4f(color.r, color.g, color.b,1);
+       glPointSize(size);
+       GLfloat                         glVertices[] = {
+               p.x,p.y
+       };
+       glVertexPointer(2, GL_FLOAT, 0, glVertices);
+       glDrawArrays(GL_POINTS, 0, 1);
+       glPointSize(1.0f);
+}
+
+void GLESDebugDraw::DrawString(int x, int y, const char *string, ...)
+{
+
+       /* Unsupported as yet. Could replace with bitmap font renderer at a later date */
+}
+
+void GLESDebugDraw::DrawAABB(b2AABB* aabb, const b2Color& c)
+{
+       
+       glColor4f(c.r, c.g, c.b,1);
+
+       GLfloat                         glVertices[] = {
+               aabb->lowerBound.x, aabb->lowerBound.y,
+               aabb->upperBound.x, aabb->lowerBound.y,
+               aabb->upperBound.x, aabb->upperBound.y,
+               aabb->lowerBound.x, aabb->upperBound.y
+       };
+       glVertexPointer(2, GL_FLOAT, 0, glVertices);
+       glDrawArrays(GL_LINE_LOOP, 0, 8);
+       
+}
diff --git a/src/render/TestEntriesViewController.h b/src/render/TestEntriesViewController.h
new file mode 100644 (file)
index 0000000..d28a655
--- /dev/null
@@ -0,0 +1,19 @@
+//
+//  TestEntriesViewController.h
+//  Box2D
+//
+//  Box2D iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
+//
+
+#import <UIKit/UIKit.h>
+#import "iPhoneTest.h"
+#import "Delegates.h"
+
+@interface TestEntriesViewController : UITableViewController {
+       int32 testCount;
+       id<TestSelectDelegate> _delegate;
+}
+
+@property(assign) id<TestSelectDelegate> delegate;
+
+@end
diff --git a/src/render/TestEntriesViewController.mm b/src/render/TestEntriesViewController.mm
new file mode 100644 (file)
index 0000000..2e016b3
--- /dev/null
@@ -0,0 +1,75 @@
+//
+//  TestEntriesViewController.m
+//  Box2D
+//
+//  Box2D iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
+//
+
+#import "TestEntriesViewController.h"
+
+
+@implementation TestEntriesViewController
+
+@synthesize delegate=_delegate;
+
+- (id)initWithStyle:(UITableViewStyle)style {
+       if ((self = [super initWithStyle:style])) {
+               testCount = 0;
+               TestEntry* e = g_testEntries;
+               while (e->createFcn)
+               {
+                       ++testCount;
+                       ++e;
+               }
+    }
+    return self;
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
+    // Release anything that's not essential, such as cached data
+}
+
+#pragma mark Table view methods
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    return 1;
+}
+
+
+// Customize the number of rows in the table view.
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return testCount;
+}
+
+
+// Customize the appearance of table view cells.
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+    static NSString *CellIdentifier = @"Cell";
+    
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
+    if (cell == nil) {
+        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
+    }
+    
+    // Set up the cell...
+       TestEntry* e = g_testEntries;
+       e+=indexPath.row;
+
+       [cell.textLabel setText:[NSString stringWithCString:e->name encoding:NSUTF8StringEncoding]];
+    return cell;
+}
+
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+       [_delegate selectTest:indexPath.row];
+}
+
+- (void)dealloc {
+    [super dealloc];
+}
+
+
+@end
+
diff --git a/src/render/iPhoneTest.h b/src/render/iPhoneTest.h
new file mode 100644 (file)
index 0000000..dc82ed5
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+* Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com
+*
+* iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
+*
+* This software is provided 'as-is', without any express or implied
+* warranty.  In no event will the authors be held liable for any damages
+* arising from the use of this software.
+* Permission is granted to anyone to use this software for any purpose,
+* including commercial applications, and to alter it and redistribute it
+* freely, subject to the following restrictions:
+* 1. The origin of this software must not be misrepresented; you must not
+* claim that you wrote the original software. If you use this software
+* in a product, an acknowledgment in the product documentation would be
+* appreciated but is not required.
+* 2. Altered source versions must be plainly marked as such, and must not be
+* misrepresented as being the original software.
+* 3. This notice may not be removed or altered from any source distribution.
+*/
+
+
+
+#ifndef TEST_H
+#define TEST_H
+
+#import <UIKit/UIKit.h>
+#include <Box2D/Box2D.h>
+#include "GLES-Render.h"
+
+#include <cstdlib>
+
+class Test;
+struct Settings;
+
+typedef Test* TestCreateFcn();
+
+#define        RAND_LIMIT      32767
+
+/// Random number in range [-1,1]
+inline float32 RandomFloat()
+{
+       float32 r = (float32)(rand() & (RAND_LIMIT));
+       r /= RAND_LIMIT;
+       r = 2.0f * r - 1.0f;
+       return r;
+}
+
+/// Random floating point number in range [lo, hi]
+inline float32 RandomFloat(float32 lo, float32 hi)
+{
+       float32 r = (float32)(rand() & (RAND_LIMIT));
+       r /= RAND_LIMIT;
+       r = (hi - lo) * r + lo;
+       return r;
+}
+
+/// Test settings. Some can be controlled in the GUI.
+struct Settings
+{
+       Settings() :
+       hz(60.0f),
+       velocityIterations(10),
+       positionIterations(4),
+       drawStats(0),
+       drawShapes(1),
+       drawJoints(1),
+       drawAABBs(0),
+       drawPairs(0),
+       drawContactPoints(0),
+       drawContactNormals(0),
+       drawContactForces(0),
+       drawFrictionForces(0),
+       drawCOMs(0),
+       enableWarmStarting(1),
+       enableContinuous(1),
+       pause(0),
+       singleStep(0)
+       {}
+       
+       float32 hz;
+       int32 velocityIterations;
+       int32 positionIterations;
+       int32 drawShapes;
+       int32 drawJoints;
+       int32 drawAABBs;
+       int32 drawPairs;
+       int32 drawContactPoints;
+       int32 drawContactNormals;
+       int32 drawContactForces;
+       int32 drawFrictionForces;
+       int32 drawCOMs;
+       int32 drawStats;
+       int32 enableWarmStarting;
+       int32 enableContinuous;
+       int32 pause;
+       int32 singleStep;
+};
+
+struct TestEntry
+{
+       const char *name;
+       TestCreateFcn *createFcn;
+};
+
+extern TestEntry g_testEntries[];
+// This is called when a joint in the world is implicitly destroyed
+// because an attached body is destroyed. This gives us a chance to
+// nullify the mouse joint.
+class DestructionListener : public b2DestructionListener
+       {
+       public:
+               void SayGoodbye(b2Fixture* fixture) { B2_NOT_USED(fixture); }
+               void SayGoodbye(b2Joint* joint);
+               
+               Test* test;
+       };
+
+const int32 k_maxContactPoints = 2048;
+
+struct ContactPoint
+{
+       b2Fixture* fixtureA;
+       b2Fixture* fixtureB;
+       b2Vec2 normal;
+       b2Vec2 position;
+       b2PointState state;
+};
+
+class Test : public b2ContactListener
+       {
+       public:
+               
+               Test();
+               virtual ~Test();
+               
+               void SetGravity(float x,float y);
+               void SetTextLine(int32 line) { m_textLine = line; }
+               void DrawTitle(int x, int y, const char *string);
+               virtual void Step(Settings* settings);
+               virtual void Keyboard(unsigned char key) { B2_NOT_USED(key); }
+               void ShiftMouseDown(const b2Vec2& p);
+               virtual void MouseDown(const b2Vec2& p);
+               virtual void MouseUp(const b2Vec2& p);
+               void MouseMove(const b2Vec2& p);
+               void LaunchBomb();
+               void LaunchBomb(const b2Vec2& position, const b2Vec2& velocity);
+               
+               void SpawnBomb(const b2Vec2& worldPt);
+               void CompleteBombSpawn(const b2Vec2& p);
+               
+               // Let derived tests know that a joint was destroyed.
+               virtual void JointDestroyed(b2Joint* joint) { B2_NOT_USED(joint); }
+               
+               // Callbacks for derived classes.
+               virtual void BeginContact(b2Contact* contact) { B2_NOT_USED(contact); }
+               virtual void EndContact(b2Contact* contact) { B2_NOT_USED(contact); }
+               virtual void PreSolve(b2Contact* contact, const b2Manifold* oldManifold);
+               virtual void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse)
+               {
+                       B2_NOT_USED(contact);
+                       B2_NOT_USED(impulse);
+               }
+               
+       protected:
+               friend class DestructionListener;
+               friend class BoundaryListener;
+               friend class ContactListener;
+               
+               b2Body* m_groundBody;
+               b2AABB m_worldAABB;
+               ContactPoint m_points[k_maxContactPoints];
+               int32 m_pointCount;
+               DestructionListener m_destructionListener;
+               GLESDebugDraw m_debugDraw;
+               int32 m_textLine;
+               b2World* m_world;
+               b2Body* m_bomb;
+               b2MouseJoint* m_mouseJoint;
+               b2Vec2 m_bombSpawnPoint;
+               bool m_bombSpawning;
+               b2Vec2 m_mouseWorld;
+               int32 m_stepCount;
+       };
+
+#endif
diff --git a/src/render/iPhoneTest.mm b/src/render/iPhoneTest.mm
new file mode 100644 (file)
index 0000000..16cc5da
--- /dev/null
@@ -0,0 +1,411 @@
+/*
+* Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com
+*
+* iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
+*
+* This software is provided 'as-is', without any express or implied
+* warranty.  In no event will the authors be held liable for any damages
+* arising from the use of this software.
+* Permission is granted to anyone to use this software for any purpose,
+* including commercial applications, and to alter it and redistribute it
+* freely, subject to the following restrictions:
+* 1. The origin of this software must not be misrepresented; you must not
+* claim that you wrote the original software. If you use this software
+* in a product, an acknowledgment in the product documentation would be
+* appreciated but is not required.
+* 2. Altered source versions must be plainly marked as such, and must not be
+* misrepresented as being the original software.
+* 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "iPhoneTest.h"
+#include "GLES-Render.h"
+
+#include <cstdio>
+
+void DestructionListener::SayGoodbye(b2Joint* joint)
+{
+       if (test->m_mouseJoint == joint)
+       {
+               test->m_mouseJoint = NULL;
+       }
+       else
+       {
+               test->JointDestroyed(joint);
+       }
+}
+
+Test::Test()
+: m_debugDraw()
+{
+       b2Vec2 gravity;
+       gravity.Set(0.0f, -10.0f);
+       bool doSleep = true;
+       m_world = new b2World(gravity, doSleep);
+       m_bomb = NULL;
+       m_textLine = 30;
+       m_mouseJoint = NULL;
+       m_pointCount = 0;
+       
+       m_destructionListener.test = this;
+       m_world->SetDestructionListener(&m_destructionListener);
+       m_world->SetContactListener(this);
+       m_world->SetDebugDraw(&m_debugDraw);
+       
+       m_bombSpawning = false;
+       
+       m_stepCount = 0;
+       
+       b2BodyDef bodyDef;
+       m_groundBody = m_world->CreateBody(&bodyDef);
+}
+
+Test::~Test()
+{
+       // By deleting the world, we delete the bomb, mouse joint, etc.
+       delete m_world;
+       m_world = NULL;
+       
+}
+
+void Test::SetGravity( float x, float y)
+{
+       float tVectorLength=sqrt(x*x+y*y);
+       float newGravityX=9.81f*x/tVectorLength;
+       float newGravityY=9.81f*y/tVectorLength;
+       m_world->SetGravity(b2Vec2(newGravityX,newGravityY));   
+}
+
+void Test::PreSolve(b2Contact* contact, const b2Manifold* oldManifold)
+{
+       const b2Manifold* manifold = contact->GetManifold();
+       
+       if (manifold->pointCount == 0)
+       {
+               return;
+       }
+       
+       b2Fixture* fixtureA = contact->GetFixtureA();
+       b2Fixture* fixtureB = contact->GetFixtureB();
+       
+       b2PointState state1[b2_maxManifoldPoints], state2[b2_maxManifoldPoints];
+       b2GetPointStates(state1, state2, oldManifold, manifold);
+       
+       b2WorldManifold worldManifold;
+       contact->GetWorldManifold(&worldManifold);
+       
+       for (int32 i = 0; i < manifold->pointCount && m_pointCount < k_maxContactPoints; ++i)
+       {
+               ContactPoint* cp = m_points + m_pointCount;
+               cp->fixtureA = fixtureA;
+               cp->fixtureB = fixtureB;
+               cp->position = worldManifold.points[i];
+               cp->normal = worldManifold.normal;
+               cp->state = state2[i];
+               ++m_pointCount;
+       }
+}
+
+void Test::DrawTitle(int x, int y, const char *string)
+{
+    m_debugDraw.DrawString(x, y, string);
+}
+
+class QueryCallback : public b2QueryCallback
+       {
+       public:
+               QueryCallback(const b2Vec2& point)
+               {
+                       m_point = point;
+                       m_fixture = NULL;
+               }
+               
+               bool ReportFixture(b2Fixture* fixture)
+               {
+                       b2Body* body = fixture->GetBody();
+                       if (body->GetType() == b2_dynamicBody)
+                       {
+                               bool inside = fixture->TestPoint(m_point);
+                               if (inside)
+                               {
+                                       m_fixture = fixture;
+                                       
+                                       // We are done, terminate the query.
+                                       return false;
+                               }
+                       }
+                       
+                       // Continue the query.
+                       return true;
+               }
+               
+               b2Vec2 m_point;
+               b2Fixture* m_fixture;
+       };
+
+
+void Test::MouseDown(const b2Vec2& p)
+{
+       m_mouseWorld = p;
+       
+       if (m_mouseJoint != NULL)
+       {
+               return;
+       }
+       
+       // Make a small box.
+       b2AABB aabb;
+       b2Vec2 d;
+       d.Set(0.001f, 0.001f);
+       aabb.lowerBound = p - d;
+       aabb.upperBound = p + d;
+       
+       // Query the world for overlapping shapes.
+       QueryCallback callback(p);
+       m_world->QueryAABB(&callback, aabb);
+       
+       if (callback.m_fixture)
+       {
+               b2Body* body = callback.m_fixture->GetBody();
+               b2MouseJointDef md;
+               md.bodyA = m_groundBody;
+               md.bodyB = body;
+               md.target = p;
+#ifdef TARGET_FLOAT32_IS_FIXED
+               md.maxForce = (body->GetMass() < 16.0)? 
+               (1000.0f * body->GetMass()) : float32(16000.0);
+#else
+               md.maxForce = 1000.0f * body->GetMass();
+#endif
+               m_mouseJoint = (b2MouseJoint*)m_world->CreateJoint(&md);
+               body->SetAwake(true);
+       }
+}
+
+void Test::SpawnBomb(const b2Vec2& worldPt)
+{
+       m_bombSpawnPoint = worldPt;
+       m_bombSpawning = true;
+}
+
+void Test::CompleteBombSpawn(const b2Vec2& p)
+{
+       if (m_bombSpawning == false)
+       {
+               return;
+       }
+       
+       const float multiplier = 30.0f;
+       b2Vec2 vel = m_bombSpawnPoint - p;
+       vel *= multiplier;
+       LaunchBomb(m_bombSpawnPoint,vel);
+       m_bombSpawning = false;
+}
+
+void Test::ShiftMouseDown(const b2Vec2& p)
+{
+       m_mouseWorld = p;
+       
+       if (m_mouseJoint != NULL)
+       {
+               return;
+       }
+       
+       SpawnBomb(p);
+}
+
+void Test::MouseUp(const b2Vec2& p)
+{
+       if (m_mouseJoint)
+       {
+               m_world->DestroyJoint(m_mouseJoint);
+               m_mouseJoint = NULL;
+       }
+       
+       if (m_bombSpawning)
+       {
+               CompleteBombSpawn(p);
+       }
+}
+
+void Test::MouseMove(const b2Vec2& p)
+{
+       m_mouseWorld = p;
+       
+       if (m_mouseJoint)
+       {
+               m_mouseJoint->SetTarget(p);
+       }
+}
+
+void Test::LaunchBomb()
+{
+       b2Vec2 p(RandomFloat(-15.0f, 15.0f), 30.0f);
+       b2Vec2 v = -5.0f * p;
+       LaunchBomb(p, v);
+}
+
+void Test::LaunchBomb(const b2Vec2& position, const b2Vec2& velocity)
+{
+       if (m_bomb)
+       {
+               m_world->DestroyBody(m_bomb);
+               m_bomb = NULL;
+       }
+       
+       b2BodyDef bd;
+       bd.type = b2_dynamicBody;
+       bd.position = position;
+       bd.bullet = true;
+       m_bomb = m_world->CreateBody(&bd);
+       m_bomb->SetLinearVelocity(velocity);
+       
+       b2CircleShape circle;
+       circle.m_radius = 0.3f;
+       
+       b2FixtureDef fd;
+       fd.shape = &circle;
+       fd.density = 20.0f;
+       fd.restitution = 0.1f;
+       
+       b2Vec2 minV = position - b2Vec2(0.3f,0.3f);
+       b2Vec2 maxV = position + b2Vec2(0.3f,0.3f);
+       
+       b2AABB aabb;
+       aabb.lowerBound = minV;
+       aabb.upperBound = maxV;
+       
+       m_bomb->CreateFixture(&fd);
+}
+
+void Test::Step(Settings* settings)
+{
+       float32 timeStep = settings->hz > 0.0f ? 1.0f / settings->hz : float32(0.0f);
+       
+       if (settings->pause)
+       {
+               if (settings->singleStep)
+               {
+                       settings->singleStep = 0;
+               }
+               else
+               {
+                       timeStep = 0.0f;
+               }
+               
+               m_debugDraw.DrawString(5, m_textLine, "****PAUSED****");
+               m_textLine += 15;
+       }
+       
+       uint32 flags = 0;
+       flags += settings->drawShapes                   * b2DebugDraw::e_shapeBit;
+       flags += settings->drawJoints                   * b2DebugDraw::e_jointBit;
+       flags += settings->drawAABBs                    * b2DebugDraw::e_aabbBit;
+       flags += settings->drawPairs                    * b2DebugDraw::e_pairBit;
+       flags += settings->drawCOMs                             * b2DebugDraw::e_centerOfMassBit;
+       m_debugDraw.SetFlags(flags);
+       
+       m_world->SetWarmStarting(settings->enableWarmStarting > 0);
+       m_world->SetContinuousPhysics(settings->enableContinuous > 0);
+       
+       m_pointCount = 0;
+       
+       m_world->Step(timeStep, settings->velocityIterations, settings->positionIterations);
+       
+       m_world->DrawDebugData();
+       
+       if (timeStep > 0.0f)
+       {
+               ++m_stepCount;
+       }
+       
+       if (settings->drawStats)
+       {
+               m_debugDraw.DrawString(5, m_textLine, "bodies/contacts/joints/proxies = %d/%d/%d",
+                                                          m_world->GetBodyCount(), m_world->GetContactCount(), m_world->GetJointCount(), m_world->GetProxyCount());
+               m_textLine += 15;
+               
+//             m_debugDraw.DrawString(5, m_textLine, "heap bytes = %d", b2_byteCount);
+//             m_textLine += 15;
+       }
+       
+       if (m_mouseJoint)
+       {
+//             b2Body* body = m_mouseJoint->GetBodyB();
+//             b2Vec2 p1 = body->GetWorldPoint(m_mouseJoint->m_localAnchor);
+//             b2Vec2 p2 = m_mouseJoint->m_target;
+//             
+//             glPointSize(4.0f);
+//             glColor3f(0.0f, 1.0f, 0.0f);
+//             glBegin(GL_POINTS);
+//             glVertex2f(p1.x, p1.y);
+//             glVertex2f(p2.x, p2.y);
+//             glEnd();
+//             glPointSize(1.0f);
+//             
+//             glColor3f(0.8f, 0.8f, 0.8f);
+//             glBegin(GL_LINES);
+//             glVertex2f(p1.x, p1.y);
+//             glVertex2f(p2.x, p2.y);
+//             glEnd();
+       }
+       
+       if (m_bombSpawning)
+       {
+//             glPointSize(4.0f);
+//             glColor3f(0.0f, 0.0f, 1.0f);
+//             glBegin(GL_POINTS);
+//             glColor3f(0.0f, 0.0f, 1.0f);
+//             glVertex2f(m_bombSpawnPoint.x, m_bombSpawnPoint.y);
+//             glEnd();
+//             
+//             glColor3f(0.8f, 0.8f, 0.8f);
+//             glBegin(GL_LINES);
+//             glVertex2f(m_mouseWorld.x, m_mouseWorld.y);
+//             glVertex2f(m_bombSpawnPoint.x, m_bombSpawnPoint.y);
+//             glEnd();
+       }
+       
+       if (settings->drawContactPoints)
+       {
+               //const float32 k_impulseScale = 0.1f;
+               const float32 k_axisScale = 0.3f;
+               
+               for (int32 i = 0; i < m_pointCount; ++i)
+               {
+                       ContactPoint* point = m_points + i;
+                       
+                       if (point->state == b2_addState)
+                       {
+                               // Add
+                               m_debugDraw.DrawPoint(point->position, 10.0f, b2Color(0.3f, 0.95f, 0.3f));
+                       }
+                       else if (point->state == b2_persistState)
+                       {
+                               // Persist
+                               m_debugDraw.DrawPoint(point->position, 5.0f, b2Color(0.3f, 0.3f, 0.95f));
+                       }
+                       
+                       if (settings->drawContactNormals == 1)
+                       {
+                               b2Vec2 p1 = point->position;
+                               b2Vec2 p2 = p1 + k_axisScale * point->normal;
+                               m_debugDraw.DrawSegment(p1, p2, b2Color(0.4f, 0.9f, 0.4f));
+                       }
+                       else if (settings->drawContactForces == 1)
+                       {
+                               //b2Vec2 p1 = point->position;
+                               //b2Vec2 p2 = p1 + k_forceScale * point->normalForce * point->normal;
+                               //DrawSegment(p1, p2, b2Color(0.9f, 0.9f, 0.3f));
+                       }
+                       
+                       if (settings->drawFrictionForces == 1)
+                       {
+                               //b2Vec2 tangent = b2Cross(point->normal, 1.0f);
+                               //b2Vec2 p1 = point->position;
+                               //b2Vec2 p2 = p1 + k_forceScale * point->tangentForce * tangent;
+                               //DrawSegment(p1, p2, b2Color(0.9f, 0.9f, 0.3f));
+                       }
+               }
+       }
+}
diff --git a/src/render/iPhoneTestEntries.mm b/src/render/iPhoneTestEntries.mm
new file mode 100644 (file)
index 0000000..02da5f5
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+#include "iPhoneTest.h"
+//#include "GLES-Render.h"
+
+#include "ApplyForce.h"
+#include "BodyTypes.h"
+
+#include "Breakable.h"
+#include "Bridge.h"
+#include "Chain.h"
+#include "CollisionFiltering.h"
+#include "CollisionProcessing.h"
+#include "CompoundShapes.h"
+#include "Confined.h"
+#include "DistanceTest.h"
+#include "Dominos.h"
+#include "DynamicTreeTest.h"
+#include "Gears.h"
+#include "LineJoint.h"
+#include "OneSidedPlatform.h"
+#include "PolyCollision.h"
+#include "PolyShapes.h"
+#include "Prismatic.h"
+#include "Pulleys.h"
+#include "Pyramid.h"
+#include "RayCast.h"
+#include "Revolute.h"
+#include "SensorTest.h"
+#include "ShapeEditing.h"
+#include "SliderCrank.h"
+#include "SphereStack.h"
+#include "TheoJansen.h"
+#include "TimeOfImpact.h"
+#include "VaryingFriction.h"
+#include "VaryingRestitution.h"
+#include "VerticalStack.h"
+#include "Web.h"
+
+TestEntry g_testEntries[] =
+{
+{"Body Types", BodyTypes::Create},
+{"SphereStack", SphereStack::Create},
+{"Vertical Stack", VerticalStack::Create},
+{"Confined", Confined::Create},
+{"Bridge", Bridge::Create},
+{"Breakable", Breakable::Create},
+{"Varying Restitution", VaryingRestitution::Create},
+{"Ray-Cast", RayCast::Create},
+{"Pyramid", Pyramid::Create},
+{"PolyCollision", PolyCollision::Create},
+{"One-Sided Platform", OneSidedPlatform::Create},
+{"Apply Force", ApplyForce::Create},
+{"Chain", Chain::Create},
+{"Collision Filtering", CollisionFiltering::Create},
+{"Collision Processing", CollisionProcessing::Create},
+{"Compound Shapes", CompoundShapes::Create},
+{"Distance Test", DistanceTest::Create},
+{"Dominos", Dominos::Create},
+{"Dynamic Tree", DynamicTreeTest::Create},
+{"Gears", Gears::Create},
+{"Line Joint", LineJoint::Create},
+{"Polygon Shapes", PolyShapes::Create},
+{"Prismatic", Prismatic::Create},
+{"Pulleys", Pulleys::Create},
+{"Revolute", Revolute::Create},
+{"Sensor Test", SensorTest::Create},
+{"Shape Editing", ShapeEditing::Create},
+{"Slider Crank", SliderCrank::Create},
+{"Theo Jansen's Walker", TheoJansen::Create},
+{"Time of Impact", TimeOfImpact::Create},
+{"Varying Friction", VaryingFriction::Create},
+{"Web", Web::Create},
+{NULL, NULL}
+
+};
similarity index 100%
rename from tanks/tanks/Game.h
rename to src/tanks/Game.h
similarity index 100%
rename from tanks/tanks/Game.m
rename to src/tanks/Game.m
similarity index 55%
rename from tanks/tanks/iPad/tanksAppDelegate_iPad.h
rename to src/ui/iPad/RootAppDelegate_iPad.h
index fef4db0..36cc1ab 100644 (file)
@@ -1,5 +1,5 @@
 //
-//  tanksAppDelegate_iPad.h
+//  RootAppDelegate_iPad.h
 //  tanks
 //
 //  Created by dsc on 4/27/11.
@@ -7,9 +7,9 @@
 //
 
 #import <UIKit/UIKit.h>
-#import "tanksAppDelegate.h"
+#import "RootAppDelegate.h"
 
-@interface tanksAppDelegate_iPad : tanksAppDelegate {
+@interface RootAppDelegate_iPad : RootAppDelegate {
     
 }
 
similarity index 59%
rename from tanks/tanks/iPad/tanksAppDelegate_iPad.m
rename to src/ui/iPad/RootAppDelegate_iPad.m
index 891faa4..75c6d5d 100644 (file)
@@ -1,14 +1,14 @@
 //
-//  tanksAppDelegate_iPad.m
+//  RootAppDelegate_iPad.m
 //  tanks
 //
 //  Created by dsc on 4/27/11.
 //  Copyright 2011 lttlst.com. All rights reserved.
 //
 
-#import "tanksAppDelegate_iPad.h"
+#import "RootAppDelegate_iPad.h"
 
-@implementation tanksAppDelegate_iPad
+@implementation RootAppDelegate_iPad
 
 - (void)dealloc
 {
similarity index 61%
rename from tanks/tanks/iPad/en.lproj/MainWindow_iPad.xib
rename to src/ui/iPad/en.lproj/MainWindow_iPad.xib
index eaef0ce..68e46d8 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="7.10">
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00">
        <data>
                <int key="IBDocument.SystemTarget">1024</int>
                <string key="IBDocument.SystemVersion">10J869</string>
                        <string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
                        <string key="NS.object.0">301</string>
                </object>
-               <object class="NSArray" key="IBDocument.IntegratedClassDependencies">
-                       <bool key="EncodedWithXMLCoder">YES</bool>
+               <array key="IBDocument.IntegratedClassDependencies">
                        <string>IBUIWindow</string>
                        <string>IBUICustomObject</string>
                        <string>IBUILabel</string>
                        <string>IBUIView</string>
                        <string>IBProxyObject</string>
-               </object>
-               <object class="NSArray" key="IBDocument.PluginDependencies">
-                       <bool key="EncodedWithXMLCoder">YES</bool>
+               </array>
+               <array key="IBDocument.PluginDependencies">
                        <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-               </object>
-               <object class="NSMutableDictionary" key="IBDocument.Metadata">
-                       <bool key="EncodedWithXMLCoder">YES</bool>
-                       <object class="NSArray" key="dict.sortedKeys" id="0">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                       </object>
-                       <reference key="dict.values" ref="0"/>
-               </object>
-               <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-                       <bool key="EncodedWithXMLCoder">YES</bool>
+               </array>
+               <dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
+               <array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
                        <object class="IBProxyObject" id="841351856">
                                <string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
                                <string key="targetRuntimeIdentifier">IBIPadFramework</string>
@@ -42,8 +33,7 @@
                        <object class="IBUIWindow" id="62075450">
                                <reference key="NSNextResponder"/>
                                <int key="NSvFlags">292</int>
-                               <object class="NSMutableArray" key="NSSubviews">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                               <array class="NSMutableArray" key="NSSubviews">
                                        <object class="IBUILabel" id="348798989">
                                                <reference key="NSNextResponder" ref="62075450"/>
                                                <int key="NSvFlags">301</int>
@@ -71,6 +61,7 @@
                                                <string key="NSFrame">{{0, 21}, {768, 1003}}</string>
                                                <reference key="NSSuperview" ref="62075450"/>
                                                <reference key="NSWindow"/>
+                                               <reference key="NSNextKeyView" ref="348798989"/>
                                                <object class="NSColor" key="IBUIBackgroundColor">
                                                        <int key="NSColorSpace">3</int>
                                                        <bytes key="NSWhite">MQA</bytes>
                                                <bool key="IBUIMultipleTouchEnabled">YES</bool>
                                                <string key="targetRuntimeIdentifier">IBIPadFramework</string>
                                        </object>
-                               </object>
+                               </array>
                                <string key="NSFrameSize">{768, 1024}</string>
                                <reference key="NSSuperview"/>
                                <reference key="NSWindow"/>
-                               <reference key="NSNextKeyView" ref="348798989"/>
+                               <reference key="NSNextKeyView" ref="607297697"/>
                                <object class="NSColor" key="IBUIBackgroundColor">
                                        <int key="NSColorSpace">1</int>
                                        <bytes key="NSRGB">MSAxIDEAA</bytes>
                        <object class="IBUICustomObject" id="250404236">
                                <string key="targetRuntimeIdentifier">IBIPadFramework</string>
                        </object>
-               </object>
+               </array>
                <object class="IBObjectContainer" key="IBDocument.Objects">
-                       <object class="NSMutableArray" key="connectionRecords">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
+                       <array class="NSMutableArray" key="connectionRecords">
                                <object class="IBConnectionRecord">
                                        <object class="IBCocoaTouchOutletConnection" key="connection">
                                                <string key="label">window</string>
                                                <reference key="source" ref="250404236"/>
                                                <reference key="destination" ref="607297697"/>
                                        </object>
-                                       <int key="connectionID">13</int>
+                                       <int key="connectionID">14</int>
                                </object>
-                       </object>
+                       </array>
                        <object class="IBMutableOrderedSet" key="objectRecords">
-                               <object class="NSArray" key="orderedObjects">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                               <array key="orderedObjects">
                                        <object class="IBObjectRecord">
                                                <int key="objectID">0</int>
-                                               <reference key="object" ref="0"/>
+                                               <array key="object" id="0"/>
                                                <reference key="children" ref="1000"/>
                                                <nil key="parent"/>
                                        </object>
                                        <object class="IBObjectRecord">
                                                <int key="objectID">2</int>
                                                <reference key="object" ref="62075450"/>
-                                               <object class="NSMutableArray" key="children">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                               <array class="NSMutableArray" key="children">
                                                        <reference ref="348798989"/>
                                                        <reference ref="607297697"/>
-                                               </object>
+                                               </array>
                                                <reference key="parent" ref="0"/>
                                        </object>
                                        <object class="IBObjectRecord">
                                                <reference key="object" ref="607297697"/>
                                                <reference key="parent" ref="62075450"/>
                                        </object>
-                               </object>
-                       </object>
-                       <object class="NSMutableDictionary" key="flattenedProperties">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                               <object class="NSArray" key="dict.sortedKeys">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                       <string>-1.CustomClassName</string>
-                                       <string>-2.CustomClassName</string>
-                                       <string>11.IBPluginDependency</string>
-                                       <string>12.CustomClassName</string>
-                                       <string>12.IBPluginDependency</string>
-                                       <string>2.IBEditorWindowLastContentRect</string>
-                                       <string>2.IBPluginDependency</string>
-                                       <string>6.CustomClassName</string>
-                                       <string>6.IBPluginDependency</string>
-                               </object>
-                               <object class="NSMutableArray" key="dict.values">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                       <string>UIApplication</string>
-                                       <string>UIResponder</string>
-                                       <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-                                       <string>SPView</string>
-                                       <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-                                       <string>{{202, 84}, {783, 772}}</string>
-                                       <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-                                       <string>tanksAppDelegate_iPad</string>
-                                       <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-                               </object>
-                       </object>
-                       <object class="NSMutableDictionary" key="unlocalizedProperties">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                               <reference key="dict.sortedKeys" ref="0"/>
-                               <reference key="dict.values" ref="0"/>
+                               </array>
                        </object>
+                       <dictionary class="NSMutableDictionary" key="flattenedProperties">
+                               <string key="-1.CustomClassName">UIApplication</string>
+                               <string key="-2.CustomClassName">UIResponder</string>
+                               <string key="11.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+                               <string key="12.CustomClassName">SPView</string>
+                               <string key="12.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+                               <string key="2.IBEditorWindowLastContentRect">{{202, 84}, {783, 772}}</string>
+                               <string key="2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+                               <string key="6.CustomClassName">RootAppDelegate_iPad</string>
+                               <string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+                       </dictionary>
+                       <dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
                        <nil key="activeLocalization"/>
-                       <object class="NSMutableDictionary" key="localizations">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                               <reference key="dict.sortedKeys" ref="0"/>
-                               <reference key="dict.values" ref="0"/>
-                       </object>
+                       <dictionary class="NSMutableDictionary" key="localizations"/>
                        <nil key="sourceID"/>
-                       <int key="maxID">13</int>
+                       <int key="maxID">14</int>
                </object>
                <object class="IBClassDescriber" key="IBDocument.Classes">
-                       <object class="NSMutableArray" key="referencedPartialClassDescriptions">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
+                       <array class="NSMutableArray" key="referencedPartialClassDescriptions">
                                <object class="IBPartialClassDescription">
-                                       <string key="className">SPView</string>
-                                       <string key="superclassName">UIView</string>
+                                       <string key="className">RootAppDelegate</string>
+                                       <string key="superclassName">NSObject</string>
+                                       <dictionary class="NSMutableDictionary" key="outlets">
+                                               <string key="sparrowView">SPView</string>
+                                               <string key="window">UIWindow</string>
+                                       </dictionary>
+                                       <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+                                               <object class="IBToOneOutletInfo" key="sparrowView">
+                                                       <string key="name">sparrowView</string>
+                                                       <string key="candidateClassName">SPView</string>
+                                               </object>
+                                               <object class="IBToOneOutletInfo" key="window">
+                                                       <string key="name">window</string>
+                                                       <string key="candidateClassName">UIWindow</string>
+                                               </object>
+                                       </dictionary>
                                        <object class="IBClassDescriptionSource" key="sourceIdentifier">
                                                <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/SPView.h</string>
+                                               <string key="minorKey">./Classes/RootAppDelegate.h</string>
                                        </object>
                                </object>
                                <object class="IBPartialClassDescription">
-                                       <string key="className">tanksAppDelegate</string>
-                                       <string key="superclassName">NSObject</string>
-                                       <object class="NSMutableDictionary" key="outlets">
-                                               <bool key="EncodedWithXMLCoder">YES</bool>
-                                               <object class="NSArray" key="dict.sortedKeys">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>sparrowView</string>
-                                                       <string>window</string>
-                                               </object>
-                                               <object class="NSMutableArray" key="dict.values">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>SPView</string>
-                                                       <string>UIWindow</string>
-                                               </object>
-                                       </object>
-                                       <object class="NSMutableDictionary" key="toOneOutletInfosByName">
-                                               <bool key="EncodedWithXMLCoder">YES</bool>
-                                               <object class="NSArray" key="dict.sortedKeys">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>sparrowView</string>
-                                                       <string>window</string>
-                                               </object>
-                                               <object class="NSMutableArray" key="dict.values">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">sparrowView</string>
-                                                               <string key="candidateClassName">SPView</string>
-                                                       </object>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">window</string>
-                                                               <string key="candidateClassName">UIWindow</string>
-                                                       </object>
-                                               </object>
-                                       </object>
+                                       <string key="className">RootAppDelegate_iPad</string>
+                                       <string key="superclassName">RootAppDelegate</string>
                                        <object class="IBClassDescriptionSource" key="sourceIdentifier">
                                                <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/tanksAppDelegate.h</string>
+                                               <string key="minorKey">./Classes/RootAppDelegate_iPad.h</string>
                                        </object>
                                </object>
                                <object class="IBPartialClassDescription">
-                                       <string key="className">tanksAppDelegate_iPad</string>
-                                       <string key="superclassName">tanksAppDelegate</string>
+                                       <string key="className">SPView</string>
+                                       <string key="superclassName">UIView</string>
                                        <object class="IBClassDescriptionSource" key="sourceIdentifier">
                                                <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/tanksAppDelegate_iPad.h</string>
+                                               <string key="minorKey">./Classes/SPView.h</string>
                                        </object>
                                </object>
-                       </object>
+                       </array>
                </object>
                <int key="IBDocument.localizationMode">0</int>
                <string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
                        <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
                        <integer value="1024" key="NS.object.0"/>
                </object>
-               <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-                       <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-                       <integer value="3100" key="NS.object.0"/>
-               </object>
                <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
                <int key="IBDocument.defaultPropertyAccessControl">3</int>
                <string key="IBCocoaTouchPluginVersion">301</string>
similarity index 55%
rename from tanks/tanks/iPhone/tanksAppDelegate_iPhone.h
rename to src/ui/iPhone/RootAppDelegate_iPhone.h
index 8732edb..57fd121 100644 (file)
@@ -1,5 +1,5 @@
 //
-//  tanksAppDelegate_iPhone.h
+//  RootAppDelegate_iPhone.h
 //  tanks
 //
 //  Created by dsc on 4/27/11.
@@ -7,9 +7,9 @@
 //
 
 #import <UIKit/UIKit.h>
-#import "tanksAppDelegate.h"
+#import "RootAppDelegate.h"
 
-@interface tanksAppDelegate_iPhone : tanksAppDelegate {
+@interface RootAppDelegate_iPhone : RootAppDelegate {
     
 }
 
similarity index 58%
rename from tanks/tanks/iPhone/tanksAppDelegate_iPhone.m
rename to src/ui/iPhone/RootAppDelegate_iPhone.m
index 7378645..84c85b0 100644 (file)
@@ -1,14 +1,14 @@
 //
-//  tanksAppDelegate_iPhone.m
+//  RootAppDelegate_iPhone.m
 //  tanks
 //
 //  Created by dsc on 4/27/11.
 //  Copyright 2011 lttlst.com. All rights reserved.
 //
 
-#import "tanksAppDelegate_iPhone.h"
+#import "RootAppDelegate_iPhone.h"
 
-@implementation tanksAppDelegate_iPhone
+@implementation RootAppDelegate_iPhone
 
 - (void)dealloc
 {
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
        <data>
                <int key="IBDocument.SystemTarget">1024</int>
                <string key="IBDocument.SystemVersion">10J869</string>
                        <string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
                        <string key="NS.object.0">301</string>
                </object>
-               <object class="NSArray" key="IBDocument.IntegratedClassDependencies">
-                       <bool key="EncodedWithXMLCoder">YES</bool>
+               <array key="IBDocument.IntegratedClassDependencies">
                        <string>IBUIWindow</string>
                        <string>IBUICustomObject</string>
                        <string>IBUILabel</string>
                        <string>IBUIView</string>
                        <string>IBProxyObject</string>
-               </object>
-               <object class="NSArray" key="IBDocument.PluginDependencies">
-                       <bool key="EncodedWithXMLCoder">YES</bool>
+               </array>
+               <array key="IBDocument.PluginDependencies">
                        <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-               </object>
-               <object class="NSMutableDictionary" key="IBDocument.Metadata">
-                       <bool key="EncodedWithXMLCoder">YES</bool>
-                       <object class="NSArray" key="dict.sortedKeys" id="0">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                       </object>
-                       <reference key="dict.values" ref="0"/>
-               </object>
-               <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-                       <bool key="EncodedWithXMLCoder">YES</bool>
+               </array>
+               <dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
+               <array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
                        <object class="IBProxyObject" id="841351856">
                                <string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
                                <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
                        <object class="IBUIWindow" id="380026005">
                                <reference key="NSNextResponder"/>
                                <int key="NSvFlags">1316</int>
-                               <object class="NSMutableArray" key="NSSubviews">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                               <array class="NSMutableArray" key="NSSubviews">
                                        <object class="IBUILabel" id="723173800">
                                                <reference key="NSNextResponder" ref="380026005"/>
                                                <int key="NSvFlags">1325</int>
                                                <string key="NSFrame">{{51, 229}, {218, 22}}</string>
                                                <reference key="NSSuperview" ref="380026005"/>
                                                <reference key="NSWindow"/>
+                                               <reference key="NSNextKeyView"/>
                                                <bool key="IBUIOpaque">NO</bool>
                                                <bool key="IBUIClipsSubviews">YES</bool>
                                                <int key="IBUIContentMode">7</int>
@@ -73,6 +64,7 @@
                                                <string key="NSFrame">{{0, 21}, {320, 459}}</string>
                                                <reference key="NSSuperview" ref="380026005"/>
                                                <reference key="NSWindow"/>
+                                               <reference key="NSNextKeyView" ref="723173800"/>
                                                <object class="NSColor" key="IBUIBackgroundColor">
                                                        <int key="NSColorSpace">3</int>
                                                        <bytes key="NSWhite">MQA</bytes>
                                                <bool key="IBUIMultipleTouchEnabled">YES</bool>
                                                <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
                                        </object>
-                               </object>
+                               </array>
                                <object class="NSPSMatrix" key="NSFrameMatrix"/>
                                <string key="NSFrameSize">{320, 480}</string>
                                <reference key="NSSuperview"/>
                                <reference key="NSWindow"/>
+                               <reference key="NSNextKeyView" ref="851352140"/>
                                <object class="NSColor" key="IBUIBackgroundColor">
                                        <int key="NSColorSpace">1</int>
                                        <bytes key="NSRGB">MSAxIDEAA</bytes>
                                <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
                                <bool key="IBUIResizesToFullScreen">YES</bool>
                        </object>
-               </object>
+               </array>
                <object class="IBObjectContainer" key="IBDocument.Objects">
-                       <object class="NSMutableArray" key="connectionRecords">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
+                       <array class="NSMutableArray" key="connectionRecords">
                                <object class="IBConnectionRecord">
                                        <object class="IBCocoaTouchOutletConnection" key="connection">
                                                <string key="label">delegate</string>
                                                <reference key="source" ref="987256611"/>
                                                <reference key="destination" ref="851352140"/>
                                        </object>
-                                       <int key="connectionID">10</int>
+                                       <int key="connectionID">11</int>
                                </object>
-                       </object>
+                       </array>
                        <object class="IBMutableOrderedSet" key="objectRecords">
-                               <object class="NSArray" key="orderedObjects">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                               <array key="orderedObjects">
                                        <object class="IBObjectRecord">
                                                <int key="objectID">0</int>
-                                               <reference key="object" ref="0"/>
+                                               <array key="object" id="0"/>
                                                <reference key="children" ref="1000"/>
                                                <nil key="parent"/>
                                        </object>
                                        <object class="IBObjectRecord">
                                                <int key="objectID">2</int>
                                                <reference key="object" ref="380026005"/>
-                                               <object class="NSMutableArray" key="children">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                               <array class="NSMutableArray" key="children">
                                                        <reference ref="723173800"/>
                                                        <reference ref="851352140"/>
-                                               </object>
+                                               </array>
                                                <reference key="parent" ref="0"/>
                                        </object>
                                        <object class="IBObjectRecord">
                                                <int key="objectID">4</int>
                                                <reference key="object" ref="987256611"/>
                                                <reference key="parent" ref="0"/>
-                                               <string key="objectName">App Delegate</string>
                                        </object>
                                        <object class="IBObjectRecord">
                                                <int key="objectID">-2</int>
                                                <reference key="object" ref="851352140"/>
                                                <reference key="parent" ref="380026005"/>
                                        </object>
-                               </object>
-                       </object>
-                       <object class="NSMutableDictionary" key="flattenedProperties">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                               <object class="NSArray" key="dict.sortedKeys">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                       <string>-1.CustomClassName</string>
-                                       <string>-2.CustomClassName</string>
-                                       <string>2.IBAttributePlaceholdersKey</string>
-                                       <string>2.IBEditorWindowLastContentRect</string>
-                                       <string>2.IBPluginDependency</string>
-                                       <string>2.UIWindow.visibleAtLaunch</string>
-                                       <string>4.CustomClassName</string>
-                                       <string>4.IBPluginDependency</string>
-                                       <string>8.IBPluginDependency</string>
-                                       <string>9.CustomClassName</string>
-                                       <string>9.IBPluginDependency</string>
-                               </object>
-                               <object class="NSMutableArray" key="dict.values">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                       <string>UIApplication</string>
-                                       <string>UIResponder</string>
-                                       <object class="NSMutableDictionary">
-                                               <bool key="EncodedWithXMLCoder">YES</bool>
-                                               <reference key="dict.sortedKeys" ref="0"/>
-                                               <reference key="dict.values" ref="0"/>
-                                       </object>
-                                       <string>{{520, 376}, {320, 480}}</string>
-                                       <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-                                       <integer value="1"/>
-                                       <string>tanksAppDelegate_iPhone</string>
-                                       <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-                                       <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-                                       <string>SPView</string>
-                                       <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-                               </object>
-                       </object>
-                       <object class="NSMutableDictionary" key="unlocalizedProperties">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                               <reference key="dict.sortedKeys" ref="0"/>
-                               <reference key="dict.values" ref="0"/>
+                               </array>
                        </object>
+                       <dictionary class="NSMutableDictionary" key="flattenedProperties">
+                               <string key="-1.CustomClassName">UIApplication</string>
+                               <string key="-2.CustomClassName">UIResponder</string>
+                               <dictionary class="NSMutableDictionary" key="2.IBAttributePlaceholdersKey"/>
+                               <string key="2.IBEditorWindowLastContentRect">{{520, 376}, {320, 480}}</string>
+                               <string key="2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+                               <integer value="1" key="2.UIWindow.visibleAtLaunch"/>
+                               <string key="4.CustomClassName">RootAppDelegate_iPhone</string>
+                               <string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+                               <string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+                               <string key="9.CustomClassName">SPView</string>
+                               <string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+                       </dictionary>
+                       <dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
                        <nil key="activeLocalization"/>
-                       <object class="NSMutableDictionary" key="localizations">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                               <reference key="dict.sortedKeys" ref="0"/>
-                               <reference key="dict.values" ref="0"/>
-                       </object>
+                       <dictionary class="NSMutableDictionary" key="localizations"/>
                        <nil key="sourceID"/>
-                       <int key="maxID">10</int>
+                       <int key="maxID">11</int>
                </object>
                <object class="IBClassDescriber" key="IBDocument.Classes">
-                       <object class="NSMutableArray" key="referencedPartialClassDescriptions">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
+                       <array class="NSMutableArray" key="referencedPartialClassDescriptions">
                                <object class="IBPartialClassDescription">
-                                       <string key="className">SPView</string>
-                                       <string key="superclassName">UIView</string>
+                                       <string key="className">RootAppDelegate</string>
+                                       <string key="superclassName">NSObject</string>
+                                       <dictionary class="NSMutableDictionary" key="outlets">
+                                               <string key="sparrowView">SPView</string>
+                                               <string key="window">UIWindow</string>
+                                       </dictionary>
+                                       <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+                                               <object class="IBToOneOutletInfo" key="sparrowView">
+                                                       <string key="name">sparrowView</string>
+                                                       <string key="candidateClassName">SPView</string>
+                                               </object>
+                                               <object class="IBToOneOutletInfo" key="window">
+                                                       <string key="name">window</string>
+                                                       <string key="candidateClassName">UIWindow</string>
+                                               </object>
+                                       </dictionary>
                                        <object class="IBClassDescriptionSource" key="sourceIdentifier">
                                                <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/SPView.h</string>
+                                               <string key="minorKey">./Classes/RootAppDelegate.h</string>
                                        </object>
                                </object>
                                <object class="IBPartialClassDescription">
-                                       <string key="className">tanksAppDelegate</string>
-                                       <string key="superclassName">NSObject</string>
-                                       <object class="NSMutableDictionary" key="outlets">
-                                               <bool key="EncodedWithXMLCoder">YES</bool>
-                                               <object class="NSArray" key="dict.sortedKeys">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>sparrowView</string>
-                                                       <string>window</string>
-                                               </object>
-                                               <object class="NSMutableArray" key="dict.values">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>SPView</string>
-                                                       <string>UIWindow</string>
-                                               </object>
-                                       </object>
-                                       <object class="NSMutableDictionary" key="toOneOutletInfosByName">
-                                               <bool key="EncodedWithXMLCoder">YES</bool>
-                                               <object class="NSArray" key="dict.sortedKeys">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>sparrowView</string>
-                                                       <string>window</string>
-                                               </object>
-                                               <object class="NSMutableArray" key="dict.values">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">sparrowView</string>
-                                                               <string key="candidateClassName">SPView</string>
-                                                       </object>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">window</string>
-                                                               <string key="candidateClassName">UIWindow</string>
-                                                       </object>
-                                               </object>
-                                       </object>
+                                       <string key="className">RootAppDelegate_iPhone</string>
+                                       <string key="superclassName">RootAppDelegate</string>
                                        <object class="IBClassDescriptionSource" key="sourceIdentifier">
                                                <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/tanksAppDelegate.h</string>
+                                               <string key="minorKey">./Classes/RootAppDelegate_iPhone.h</string>
                                        </object>
                                </object>
                                <object class="IBPartialClassDescription">
-                                       <string key="className">tanksAppDelegate_iPhone</string>
-                                       <string key="superclassName">tanksAppDelegate</string>
+                                       <string key="className">SPView</string>
+                                       <string key="superclassName">UIView</string>
                                        <object class="IBClassDescriptionSource" key="sourceIdentifier">
                                                <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/tanksAppDelegate_iPhone.h</string>
+                                               <string key="minorKey">./Classes/SPView.h</string>
                                        </object>
                                </object>
-                       </object>
+                       </array>
                </object>
                <int key="IBDocument.localizationMode">0</int>
                <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
                        <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
                        <integer value="1024" key="NS.object.0"/>
                </object>
-               <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-                       <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-                       <integer value="3100" key="NS.object.0"/>
-               </object>
                <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
                <int key="IBDocument.defaultPropertyAccessControl">3</int>
                <string key="IBCocoaTouchPluginVersion">301</string>
diff --git a/tanks.xcodeproj/project.pbxproj b/tanks.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..f593d0b
--- /dev/null
@@ -0,0 +1,1002 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 46;
+       objects = {
+
+/* Begin PBXBuildFile section */
+               499668C713692E2D006E8125 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499668C613692E2D006E8125 /* UIKit.framework */; };
+               499668C913692E2D006E8125 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499668C813692E2D006E8125 /* Foundation.framework */; };
+               499668CB13692E2D006E8125 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499668CA13692E2D006E8125 /* CoreGraphics.framework */; };
+               49966917136930E8006E8125 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49966912136930E8006E8125 /* AudioToolbox.framework */; };
+               49966918136930E8006E8125 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49966913136930E8006E8125 /* AVFoundation.framework */; };
+               49966919136930E8006E8125 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49966914136930E8006E8125 /* OpenAL.framework */; };
+               4996691A136930E8006E8125 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49966915136930E8006E8125 /* OpenGLES.framework */; };
+               4996691B136930E8006E8125 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49966916136930E8006E8125 /* QuartzCore.framework */; };
+               49F2D99A137645BF000B6B8C /* libSparrow.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 49F2D999137645BF000B6B8C /* libSparrow.a */; };
+               49F2D9AD1376462B000B6B8C /* libBox2D.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 49F2D9AC1376462B000B6B8C /* libBox2D.a */; };
+               49F2D9C413764666000B6B8C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2D9B013764666000B6B8C /* main.m */; };
+               49F2D9C513764666000B6B8C /* RootAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2D9B513764666000B6B8C /* RootAppDelegate.m */; };
+               49F2D9C613764666000B6B8C /* Game.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2D9B813764666000B6B8C /* Game.m */; };
+               49F2D9C713764666000B6B8C /* MainWindow_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 49F2D9BB13764666000B6B8C /* MainWindow_iPad.xib */; };
+               49F2D9C813764666000B6B8C /* RootAppDelegate_iPad.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2D9BE13764666000B6B8C /* RootAppDelegate_iPad.m */; };
+               49F2D9C913764666000B6B8C /* MainWindow_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 49F2D9C013764666000B6B8C /* MainWindow_iPhone.xib */; };
+               49F2D9CA13764666000B6B8C /* RootAppDelegate_iPhone.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2D9C313764666000B6B8C /* RootAppDelegate_iPhone.m */; };
+               49F2D9CD13764710000B6B8C /* RootAppDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2D9B413764666000B6B8C /* RootAppDelegate.h */; };
+               49F2D9CE13764710000B6B8C /* Game.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2D9B713764666000B6B8C /* Game.h */; };
+               49F2D9CF13764710000B6B8C /* RootAppDelegate_iPad.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2D9BD13764666000B6B8C /* RootAppDelegate_iPad.h */; };
+               49F2D9D013764710000B6B8C /* RootAppDelegate_iPhone.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2D9C213764666000B6B8C /* RootAppDelegate_iPhone.h */; };
+               49F2D9D213764763000B6B8C /* prefix.pch in Sources */ = {isa = PBXBuildFile; fileRef = 49F2D9B213764666000B6B8C /* prefix.pch */; };
+               49F2D9D713764A9B000B6B8C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 49F2D9D413764A9B000B6B8C /* InfoPlist.strings */; };
+               49F2D9D813764A9B000B6B8C /* tanks-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 49F2D9D613764A9B000B6B8C /* tanks-Info.plist */; };
+               49F2DA8213764ED6000B6B8C /* SPAVSound.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA2613764ED5000B6B8C /* SPAVSound.h */; };
+               49F2DA8313764ED6000B6B8C /* SPAVSound.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA2713764ED5000B6B8C /* SPAVSound.m */; };
+               49F2DA8413764ED6000B6B8C /* SPAVSoundChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA2813764ED5000B6B8C /* SPAVSoundChannel.h */; };
+               49F2DA8513764ED6000B6B8C /* SPAVSoundChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA2913764ED5000B6B8C /* SPAVSoundChannel.m */; };
+               49F2DA8613764ED6000B6B8C /* SPALSound.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA2A13764ED5000B6B8C /* SPALSound.h */; };
+               49F2DA8713764ED6000B6B8C /* SPALSound.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA2B13764ED5000B6B8C /* SPALSound.m */; };
+               49F2DA8813764ED6000B6B8C /* SPALSoundChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA2C13764ED5000B6B8C /* SPALSoundChannel.h */; };
+               49F2DA8913764ED6000B6B8C /* SPALSoundChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA2D13764ED5000B6B8C /* SPALSoundChannel.m */; };
+               49F2DA8A13764ED6000B6B8C /* SPAudioEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA2013764ED5000B6B8C /* SPAudioEngine.h */; };
+               49F2DA8B13764ED6000B6B8C /* SPAudioEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA2113764ED5000B6B8C /* SPAudioEngine.m */; };
+               49F2DA8C13764ED6000B6B8C /* SPSound.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA2213764ED5000B6B8C /* SPSound.h */; };
+               49F2DA8D13764ED6000B6B8C /* SPSound.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA2313764ED5000B6B8C /* SPSound.m */; };
+               49F2DA8E13764ED6000B6B8C /* SPSoundChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA2413764ED5000B6B8C /* SPSoundChannel.h */; };
+               49F2DA8F13764ED6000B6B8C /* SPSoundChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA2513764ED5000B6B8C /* SPSoundChannel.m */; };
+               49F2DA9013764ED6000B6B8C /* SPView.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA2E13764ED5000B6B8C /* SPView.h */; };
+               49F2DA9113764ED6000B6B8C /* SPView.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA2F13764ED5000B6B8C /* SPView.m */; };
+               49F2DA9213764ED6000B6B8C /* SPTouch_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA3B13764ED5000B6B8C /* SPTouch_Internal.h */; };
+               49F2DA9313764ED6000B6B8C /* SPEvent_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA3C13764ED5000B6B8C /* SPEvent_Internal.h */; };
+               49F2DA9413764ED6000B6B8C /* SPEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA3113764ED5000B6B8C /* SPEvent.h */; };
+               49F2DA9513764ED6000B6B8C /* SPEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA3213764ED5000B6B8C /* SPEvent.m */; };
+               49F2DA9613764ED6000B6B8C /* SPEventDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA3313764ED5000B6B8C /* SPEventDispatcher.h */; };
+               49F2DA9713764ED6000B6B8C /* SPEventDispatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA3413764ED5000B6B8C /* SPEventDispatcher.m */; };
+               49F2DA9813764ED6000B6B8C /* SPTouch.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA3513764ED5000B6B8C /* SPTouch.h */; };
+               49F2DA9913764ED6000B6B8C /* SPTouch.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA3613764ED5000B6B8C /* SPTouch.m */; };
+               49F2DA9A13764ED6000B6B8C /* SPTouchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA3713764ED5000B6B8C /* SPTouchEvent.h */; };
+               49F2DA9B13764ED6000B6B8C /* SPTouchEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA3813764ED5000B6B8C /* SPTouchEvent.m */; };
+               49F2DA9C13764ED6000B6B8C /* SPEnterFrameEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA3913764ED5000B6B8C /* SPEnterFrameEvent.h */; };
+               49F2DA9D13764ED6000B6B8C /* SPEnterFrameEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA3A13764ED5000B6B8C /* SPEnterFrameEvent.m */; };
+               49F2DA9E13764ED6000B6B8C /* SPRendering.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA5213764ED5000B6B8C /* SPRendering.m */; };
+               49F2DA9F13764ED6000B6B8C /* SPRenderSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA5313764ED5000B6B8C /* SPRenderSupport.h */; };
+               49F2DAA013764ED6000B6B8C /* SPRenderSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA5413764ED5000B6B8C /* SPRenderSupport.m */; };
+               49F2DAA113764ED6000B6B8C /* SPTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA5513764ED5000B6B8C /* SPTextField.h */; };
+               49F2DAA213764ED6000B6B8C /* SPTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA5613764ED5000B6B8C /* SPTextField.m */; };
+               49F2DAA313764ED6000B6B8C /* SPBitmapFont.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA5713764ED5000B6B8C /* SPBitmapFont.h */; };
+               49F2DAA413764ED6000B6B8C /* SPBitmapFont.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA5813764ED5000B6B8C /* SPBitmapFont.m */; };
+               49F2DAA513764ED6000B6B8C /* SPBitmapChar.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA5913764ED5000B6B8C /* SPBitmapChar.h */; };
+               49F2DAA613764ED6000B6B8C /* SPBitmapChar.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA5A13764ED5000B6B8C /* SPBitmapChar.m */; };
+               49F2DAA713764ED6000B6B8C /* SPTouchProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA5B13764ED5000B6B8C /* SPTouchProcessor.h */; };
+               49F2DAA813764ED6000B6B8C /* SPTouchProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA5C13764ED5000B6B8C /* SPTouchProcessor.m */; };
+               49F2DAA913764ED6000B6B8C /* SPDisplayObject_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA5D13764ED5000B6B8C /* SPDisplayObject_Internal.h */; };
+               49F2DAAA13764ED6000B6B8C /* SPStage_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA5E13764ED5000B6B8C /* SPStage_Internal.h */; };
+               49F2DAAB13764ED6000B6B8C /* SPDisplayObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA4013764ED5000B6B8C /* SPDisplayObject.h */; };
+               49F2DAAC13764ED6000B6B8C /* SPDisplayObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA4113764ED5000B6B8C /* SPDisplayObject.m */; };
+               49F2DAAD13764ED6000B6B8C /* SPDisplayObjectContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA4213764ED5000B6B8C /* SPDisplayObjectContainer.h */; };
+               49F2DAAE13764ED6000B6B8C /* SPDisplayObjectContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA4313764ED5000B6B8C /* SPDisplayObjectContainer.m */; };
+               49F2DAAF13764ED6000B6B8C /* SPSprite.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA4413764ED5000B6B8C /* SPSprite.h */; };
+               49F2DAB013764ED6000B6B8C /* SPSprite.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA4513764ED5000B6B8C /* SPSprite.m */; };
+               49F2DAB113764ED6000B6B8C /* SPStage.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA4613764ED5000B6B8C /* SPStage.h */; };
+               49F2DAB213764ED6000B6B8C /* SPStage.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA4713764ED5000B6B8C /* SPStage.m */; };
+               49F2DAB313764ED6000B6B8C /* SPQuad.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA4813764ED5000B6B8C /* SPQuad.h */; };
+               49F2DAB413764ED6000B6B8C /* SPQuad.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA4913764ED5000B6B8C /* SPQuad.m */; };
+               49F2DAB513764ED6000B6B8C /* SPImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA4A13764ED5000B6B8C /* SPImage.h */; };
+               49F2DAB613764ED6000B6B8C /* SPImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA4B13764ED5000B6B8C /* SPImage.m */; };
+               49F2DAB713764ED6000B6B8C /* SPButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA4C13764ED5000B6B8C /* SPButton.h */; };
+               49F2DAB813764ED6000B6B8C /* SPButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA4D13764ED5000B6B8C /* SPButton.m */; };
+               49F2DAB913764ED6000B6B8C /* SPMovieClip.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA4E13764ED5000B6B8C /* SPMovieClip.h */; };
+               49F2DABA13764ED6000B6B8C /* SPMovieClip.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA4F13764ED5000B6B8C /* SPMovieClip.m */; };
+               49F2DABB13764ED6000B6B8C /* SPCompiledSprite.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA5013764ED5000B6B8C /* SPCompiledSprite.h */; };
+               49F2DABC13764ED6000B6B8C /* SPCompiledSprite.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA5113764ED5000B6B8C /* SPCompiledSprite.m */; };
+               49F2DABD13764ED6000B6B8C /* SPTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA5F13764ED5000B6B8C /* SPTexture.h */; };
+               49F2DABE13764ED6000B6B8C /* SPTexture.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA6013764ED5000B6B8C /* SPTexture.m */; };
+               49F2DABF13764ED6000B6B8C /* SPGLTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA6113764ED5000B6B8C /* SPGLTexture.h */; };
+               49F2DAC013764ED6000B6B8C /* SPGLTexture.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA6213764ED5000B6B8C /* SPGLTexture.m */; };
+               49F2DAC113764ED6000B6B8C /* SPSubTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA6313764ED5000B6B8C /* SPSubTexture.h */; };
+               49F2DAC213764ED6000B6B8C /* SPSubTexture.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA6413764ED5000B6B8C /* SPSubTexture.m */; };
+               49F2DAC313764ED6000B6B8C /* SPRenderTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA6513764ED5000B6B8C /* SPRenderTexture.h */; };
+               49F2DAC413764ED6000B6B8C /* SPRenderTexture.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA6613764ED5000B6B8C /* SPRenderTexture.m */; };
+               49F2DAC513764ED6000B6B8C /* SPTextureAtlas.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA6713764ED5000B6B8C /* SPTextureAtlas.h */; };
+               49F2DAC613764ED6000B6B8C /* SPTextureAtlas.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA6813764ED5000B6B8C /* SPTextureAtlas.m */; };
+               49F2DAC713764ED6000B6B8C /* SPTweenedProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA7313764ED5000B6B8C /* SPTweenedProperty.h */; };
+               49F2DAC813764ED6000B6B8C /* SPTweenedProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA7413764ED5000B6B8C /* SPTweenedProperty.m */; };
+               49F2DAC913764ED6000B6B8C /* SPAnimatable.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA6A13764ED5000B6B8C /* SPAnimatable.h */; };
+               49F2DACA13764ED6000B6B8C /* SPJuggler.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA6B13764ED5000B6B8C /* SPJuggler.h */; };
+               49F2DACB13764ED6000B6B8C /* SPJuggler.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA6C13764ED5000B6B8C /* SPJuggler.m */; };
+               49F2DACC13764ED6000B6B8C /* SPTransitions.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA6D13764ED5000B6B8C /* SPTransitions.h */; };
+               49F2DACD13764ED6000B6B8C /* SPTransitions.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA6E13764ED5000B6B8C /* SPTransitions.m */; };
+               49F2DACE13764ED6000B6B8C /* SPTween.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA6F13764ED5000B6B8C /* SPTween.h */; };
+               49F2DACF13764ED6000B6B8C /* SPTween.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA7013764ED5000B6B8C /* SPTween.m */; };
+               49F2DAD013764ED6000B6B8C /* SPDelayedInvocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA7113764ED5000B6B8C /* SPDelayedInvocation.h */; };
+               49F2DAD113764ED6000B6B8C /* SPDelayedInvocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA7213764ED5000B6B8C /* SPDelayedInvocation.m */; };
+               49F2DAD213764ED6000B6B8C /* SPMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA7513764ED6000B6B8C /* SPMacros.h */; };
+               49F2DAD313764ED6000B6B8C /* SPMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA7613764ED6000B6B8C /* SPMatrix.h */; };
+               49F2DAD413764ED6000B6B8C /* SPMatrix.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA7713764ED6000B6B8C /* SPMatrix.m */; };
+               49F2DAD513764ED6000B6B8C /* SPPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA7813764ED6000B6B8C /* SPPoint.h */; };
+               49F2DAD613764ED6000B6B8C /* SPPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA7913764ED6000B6B8C /* SPPoint.m */; };
+               49F2DAD713764ED6000B6B8C /* SPRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA7A13764ED6000B6B8C /* SPRectangle.h */; };
+               49F2DAD813764ED6000B6B8C /* SPRectangle.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA7B13764ED6000B6B8C /* SPRectangle.m */; };
+               49F2DAD913764ED6000B6B8C /* SPNSExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA7C13764ED6000B6B8C /* SPNSExtensions.h */; };
+               49F2DADA13764ED6000B6B8C /* SPNSExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA7D13764ED6000B6B8C /* SPNSExtensions.m */; };
+               49F2DADB13764ED6000B6B8C /* SPPoolObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA7E13764ED6000B6B8C /* SPPoolObject.h */; };
+               49F2DADC13764ED6000B6B8C /* SPPoolObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA7F13764ED6000B6B8C /* SPPoolObject.m */; };
+               49F2DADD13764ED6000B6B8C /* SPUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA8013764ED6000B6B8C /* SPUtils.h */; };
+               49F2DADE13764ED6000B6B8C /* SPUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DA8113764ED6000B6B8C /* SPUtils.m */; };
+               49F2DADF13764ED6000B6B8C /* Sparrow.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DA1D13764ED5000B6B8C /* Sparrow.h */; };
+               49F2DAF213765004000B6B8C /* GLES-Render.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2DAE613765004000B6B8C /* GLES-Render.h */; };
+               49F2DAF313765004000B6B8C /* GLES-Render.mm in Sources */ = {isa = PBXBuildFile; fileRef = 49F2DAE713765004000B6B8C /* GLES-Render.mm */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+               49F2D9A2137645E0000B6B8C /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 49F2D99B137645DF000B6B8C /* box2d-ios.xcodeproj */;
+                       proxyType = 2;
+                       remoteGlobalIDString = 4913305F1372610400DFB46D;
+                       remoteInfo = Box2D;
+               };
+               49F2D9AA13764624000B6B8C /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 49F2D99B137645DF000B6B8C /* box2d-ios.xcodeproj */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 4913305E1372610400DFB46D;
+                       remoteInfo = Box2D;
+               };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+               499668C213692E2D006E8125 /* Tanks.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Tanks.app; sourceTree = BUILT_PRODUCTS_DIR; };
+               499668C613692E2D006E8125 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+               499668C813692E2D006E8125 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+               499668CA13692E2D006E8125 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+               49966912136930E8006E8125 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
+               49966913136930E8006E8125 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
+               49966914136930E8006E8125 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; };
+               49966915136930E8006E8125 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
+               49966916136930E8006E8125 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+               49F2D999137645BF000B6B8C /* libSparrow.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libSparrow.a; sourceTree = SOURCE_ROOT; };
+               49F2D99B137645DF000B6B8C /* box2d-ios.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "box2d-ios.xcodeproj"; path = "libs/box2d/box2d-ios.xcodeproj"; sourceTree = "<group>"; };
+               49F2D9AC1376462B000B6B8C /* libBox2D.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libBox2D.a; sourceTree = SOURCE_ROOT; };
+               49F2D9B013764666000B6B8C /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+               49F2D9B213764666000B6B8C /* prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = prefix.pch; sourceTree = "<group>"; };
+               49F2D9B413764666000B6B8C /* RootAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RootAppDelegate.h; sourceTree = "<group>"; };
+               49F2D9B513764666000B6B8C /* RootAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RootAppDelegate.m; sourceTree = "<group>"; };
+               49F2D9B713764666000B6B8C /* Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Game.h; sourceTree = "<group>"; };
+               49F2D9B813764666000B6B8C /* Game.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Game.m; sourceTree = "<group>"; };
+               49F2D9BC13764666000B6B8C /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainWindow_iPad.xib; sourceTree = "<group>"; };
+               49F2D9BD13764666000B6B8C /* RootAppDelegate_iPad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RootAppDelegate_iPad.h; sourceTree = "<group>"; };
+               49F2D9BE13764666000B6B8C /* RootAppDelegate_iPad.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RootAppDelegate_iPad.m; sourceTree = "<group>"; };
+               49F2D9C113764666000B6B8C /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainWindow_iPhone.xib; sourceTree = "<group>"; };
+               49F2D9C213764666000B6B8C /* RootAppDelegate_iPhone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RootAppDelegate_iPhone.h; sourceTree = "<group>"; };
+               49F2D9C313764666000B6B8C /* RootAppDelegate_iPhone.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RootAppDelegate_iPhone.m; sourceTree = "<group>"; };
+               49F2D9D513764A9B000B6B8C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+               49F2D9D613764A9B000B6B8C /* tanks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "tanks-Info.plist"; sourceTree = "<group>"; };
+               49F2DA1D13764ED5000B6B8C /* Sparrow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sparrow.h; sourceTree = "<group>"; };
+               49F2DA2013764ED5000B6B8C /* SPAudioEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPAudioEngine.h; sourceTree = "<group>"; };
+               49F2DA2113764ED5000B6B8C /* SPAudioEngine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPAudioEngine.m; sourceTree = "<group>"; };
+               49F2DA2213764ED5000B6B8C /* SPSound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPSound.h; sourceTree = "<group>"; };
+               49F2DA2313764ED5000B6B8C /* SPSound.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPSound.m; sourceTree = "<group>"; };
+               49F2DA2413764ED5000B6B8C /* SPSoundChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPSoundChannel.h; sourceTree = "<group>"; };
+               49F2DA2513764ED5000B6B8C /* SPSoundChannel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPSoundChannel.m; sourceTree = "<group>"; };
+               49F2DA2613764ED5000B6B8C /* SPAVSound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPAVSound.h; sourceTree = "<group>"; };
+               49F2DA2713764ED5000B6B8C /* SPAVSound.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPAVSound.m; sourceTree = "<group>"; };
+               49F2DA2813764ED5000B6B8C /* SPAVSoundChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPAVSoundChannel.h; sourceTree = "<group>"; };
+               49F2DA2913764ED5000B6B8C /* SPAVSoundChannel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPAVSoundChannel.m; sourceTree = "<group>"; };
+               49F2DA2A13764ED5000B6B8C /* SPALSound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPALSound.h; sourceTree = "<group>"; };
+               49F2DA2B13764ED5000B6B8C /* SPALSound.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPALSound.m; sourceTree = "<group>"; };
+               49F2DA2C13764ED5000B6B8C /* SPALSoundChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPALSoundChannel.h; sourceTree = "<group>"; };
+               49F2DA2D13764ED5000B6B8C /* SPALSoundChannel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPALSoundChannel.m; sourceTree = "<group>"; };
+               49F2DA2E13764ED5000B6B8C /* SPView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPView.h; sourceTree = "<group>"; };
+               49F2DA2F13764ED5000B6B8C /* SPView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPView.m; sourceTree = "<group>"; };
+               49F2DA3113764ED5000B6B8C /* SPEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPEvent.h; sourceTree = "<group>"; };
+               49F2DA3213764ED5000B6B8C /* SPEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPEvent.m; sourceTree = "<group>"; };
+               49F2DA3313764ED5000B6B8C /* SPEventDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPEventDispatcher.h; sourceTree = "<group>"; };
+               49F2DA3413764ED5000B6B8C /* SPEventDispatcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPEventDispatcher.m; sourceTree = "<group>"; };
+               49F2DA3513764ED5000B6B8C /* SPTouch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPTouch.h; sourceTree = "<group>"; };
+               49F2DA3613764ED5000B6B8C /* SPTouch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPTouch.m; sourceTree = "<group>"; };
+               49F2DA3713764ED5000B6B8C /* SPTouchEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPTouchEvent.h; sourceTree = "<group>"; };
+               49F2DA3813764ED5000B6B8C /* SPTouchEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPTouchEvent.m; sourceTree = "<group>"; };
+               49F2DA3913764ED5000B6B8C /* SPEnterFrameEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPEnterFrameEvent.h; sourceTree = "<group>"; };
+               49F2DA3A13764ED5000B6B8C /* SPEnterFrameEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPEnterFrameEvent.m; sourceTree = "<group>"; };
+               49F2DA3B13764ED5000B6B8C /* SPTouch_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPTouch_Internal.h; sourceTree = "<group>"; };
+               49F2DA3C13764ED5000B6B8C /* SPEvent_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPEvent_Internal.h; sourceTree = "<group>"; };
+               49F2DA4013764ED5000B6B8C /* SPDisplayObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPDisplayObject.h; sourceTree = "<group>"; };
+               49F2DA4113764ED5000B6B8C /* SPDisplayObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPDisplayObject.m; sourceTree = "<group>"; };
+               49F2DA4213764ED5000B6B8C /* SPDisplayObjectContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPDisplayObjectContainer.h; sourceTree = "<group>"; };
+               49F2DA4313764ED5000B6B8C /* SPDisplayObjectContainer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPDisplayObjectContainer.m; sourceTree = "<group>"; };
+               49F2DA4413764ED5000B6B8C /* SPSprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPSprite.h; sourceTree = "<group>"; };
+               49F2DA4513764ED5000B6B8C /* SPSprite.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPSprite.m; sourceTree = "<group>"; };
+               49F2DA4613764ED5000B6B8C /* SPStage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPStage.h; sourceTree = "<group>"; };
+               49F2DA4713764ED5000B6B8C /* SPStage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPStage.m; sourceTree = "<group>"; };
+               49F2DA4813764ED5000B6B8C /* SPQuad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPQuad.h; sourceTree = "<group>"; };
+               49F2DA4913764ED5000B6B8C /* SPQuad.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPQuad.m; sourceTree = "<group>"; };
+               49F2DA4A13764ED5000B6B8C /* SPImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPImage.h; sourceTree = "<group>"; };
+               49F2DA4B13764ED5000B6B8C /* SPImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPImage.m; sourceTree = "<group>"; };
+               49F2DA4C13764ED5000B6B8C /* SPButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPButton.h; sourceTree = "<group>"; };
+               49F2DA4D13764ED5000B6B8C /* SPButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPButton.m; sourceTree = "<group>"; };
+               49F2DA4E13764ED5000B6B8C /* SPMovieClip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPMovieClip.h; sourceTree = "<group>"; };
+               49F2DA4F13764ED5000B6B8C /* SPMovieClip.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPMovieClip.m; sourceTree = "<group>"; };
+               49F2DA5013764ED5000B6B8C /* SPCompiledSprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPCompiledSprite.h; sourceTree = "<group>"; };
+               49F2DA5113764ED5000B6B8C /* SPCompiledSprite.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPCompiledSprite.m; sourceTree = "<group>"; };
+               49F2DA5213764ED5000B6B8C /* SPRendering.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPRendering.m; sourceTree = "<group>"; };
+               49F2DA5313764ED5000B6B8C /* SPRenderSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPRenderSupport.h; sourceTree = "<group>"; };
+               49F2DA5413764ED5000B6B8C /* SPRenderSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPRenderSupport.m; sourceTree = "<group>"; };
+               49F2DA5513764ED5000B6B8C /* SPTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPTextField.h; sourceTree = "<group>"; };
+               49F2DA5613764ED5000B6B8C /* SPTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPTextField.m; sourceTree = "<group>"; };
+               49F2DA5713764ED5000B6B8C /* SPBitmapFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPBitmapFont.h; sourceTree = "<group>"; };
+               49F2DA5813764ED5000B6B8C /* SPBitmapFont.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPBitmapFont.m; sourceTree = "<group>"; };
+               49F2DA5913764ED5000B6B8C /* SPBitmapChar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPBitmapChar.h; sourceTree = "<group>"; };
+               49F2DA5A13764ED5000B6B8C /* SPBitmapChar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPBitmapChar.m; sourceTree = "<group>"; };
+               49F2DA5B13764ED5000B6B8C /* SPTouchProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPTouchProcessor.h; sourceTree = "<group>"; };
+               49F2DA5C13764ED5000B6B8C /* SPTouchProcessor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPTouchProcessor.m; sourceTree = "<group>"; };
+               49F2DA5D13764ED5000B6B8C /* SPDisplayObject_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPDisplayObject_Internal.h; sourceTree = "<group>"; };
+               49F2DA5E13764ED5000B6B8C /* SPStage_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPStage_Internal.h; sourceTree = "<group>"; };
+               49F2DA5F13764ED5000B6B8C /* SPTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPTexture.h; sourceTree = "<group>"; };
+               49F2DA6013764ED5000B6B8C /* SPTexture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPTexture.m; sourceTree = "<group>"; };
+               49F2DA6113764ED5000B6B8C /* SPGLTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPGLTexture.h; sourceTree = "<group>"; };
+               49F2DA6213764ED5000B6B8C /* SPGLTexture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPGLTexture.m; sourceTree = "<group>"; };
+               49F2DA6313764ED5000B6B8C /* SPSubTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPSubTexture.h; sourceTree = "<group>"; };
+               49F2DA6413764ED5000B6B8C /* SPSubTexture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPSubTexture.m; sourceTree = "<group>"; };
+               49F2DA6513764ED5000B6B8C /* SPRenderTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPRenderTexture.h; sourceTree = "<group>"; };
+               49F2DA6613764ED5000B6B8C /* SPRenderTexture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPRenderTexture.m; sourceTree = "<group>"; };
+               49F2DA6713764ED5000B6B8C /* SPTextureAtlas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPTextureAtlas.h; sourceTree = "<group>"; };
+               49F2DA6813764ED5000B6B8C /* SPTextureAtlas.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPTextureAtlas.m; sourceTree = "<group>"; };
+               49F2DA6A13764ED5000B6B8C /* SPAnimatable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPAnimatable.h; sourceTree = "<group>"; };
+               49F2DA6B13764ED5000B6B8C /* SPJuggler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPJuggler.h; sourceTree = "<group>"; };
+               49F2DA6C13764ED5000B6B8C /* SPJuggler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPJuggler.m; sourceTree = "<group>"; };
+               49F2DA6D13764ED5000B6B8C /* SPTransitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPTransitions.h; sourceTree = "<group>"; };
+               49F2DA6E13764ED5000B6B8C /* SPTransitions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPTransitions.m; sourceTree = "<group>"; };
+               49F2DA6F13764ED5000B6B8C /* SPTween.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPTween.h; sourceTree = "<group>"; };
+               49F2DA7013764ED5000B6B8C /* SPTween.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPTween.m; sourceTree = "<group>"; };
+               49F2DA7113764ED5000B6B8C /* SPDelayedInvocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPDelayedInvocation.h; sourceTree = "<group>"; };
+               49F2DA7213764ED5000B6B8C /* SPDelayedInvocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPDelayedInvocation.m; sourceTree = "<group>"; };
+               49F2DA7313764ED5000B6B8C /* SPTweenedProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPTweenedProperty.h; sourceTree = "<group>"; };
+               49F2DA7413764ED5000B6B8C /* SPTweenedProperty.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPTweenedProperty.m; sourceTree = "<group>"; };
+               49F2DA7513764ED6000B6B8C /* SPMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPMacros.h; sourceTree = "<group>"; };
+               49F2DA7613764ED6000B6B8C /* SPMatrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPMatrix.h; sourceTree = "<group>"; };
+               49F2DA7713764ED6000B6B8C /* SPMatrix.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPMatrix.m; sourceTree = "<group>"; };
+               49F2DA7813764ED6000B6B8C /* SPPoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPPoint.h; sourceTree = "<group>"; };
+               49F2DA7913764ED6000B6B8C /* SPPoint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPPoint.m; sourceTree = "<group>"; };
+               49F2DA7A13764ED6000B6B8C /* SPRectangle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPRectangle.h; sourceTree = "<group>"; };
+               49F2DA7B13764ED6000B6B8C /* SPRectangle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPRectangle.m; sourceTree = "<group>"; };
+               49F2DA7C13764ED6000B6B8C /* SPNSExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPNSExtensions.h; sourceTree = "<group>"; };
+               49F2DA7D13764ED6000B6B8C /* SPNSExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPNSExtensions.m; sourceTree = "<group>"; };
+               49F2DA7E13764ED6000B6B8C /* SPPoolObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPPoolObject.h; sourceTree = "<group>"; };
+               49F2DA7F13764ED6000B6B8C /* SPPoolObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPPoolObject.m; sourceTree = "<group>"; };
+               49F2DA8013764ED6000B6B8C /* SPUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPUtils.h; sourceTree = "<group>"; };
+               49F2DA8113764ED6000B6B8C /* SPUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPUtils.m; sourceTree = "<group>"; };
+               49F2DAE113765004000B6B8C /* Box2DAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Box2DAppDelegate.h; sourceTree = "<group>"; };
+               49F2DAE213765004000B6B8C /* Box2DAppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Box2DAppDelegate.mm; sourceTree = "<group>"; };
+               49F2DAE313765004000B6B8C /* Box2DView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Box2DView.h; sourceTree = "<group>"; };
+               49F2DAE413765004000B6B8C /* Box2DView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Box2DView.mm; sourceTree = "<group>"; };
+               49F2DAE513765004000B6B8C /* Delegates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Delegates.h; sourceTree = "<group>"; };
+               49F2DAE613765004000B6B8C /* GLES-Render.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GLES-Render.h"; sourceTree = "<group>"; };
+               49F2DAE713765004000B6B8C /* GLES-Render.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "GLES-Render.mm"; sourceTree = "<group>"; };
+               49F2DAE813765004000B6B8C /* iPhoneTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iPhoneTest.h; sourceTree = "<group>"; };
+               49F2DAE913765004000B6B8C /* iPhoneTest.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = iPhoneTest.mm; sourceTree = "<group>"; };
+               49F2DAEA13765004000B6B8C /* iPhoneTestEntries.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = iPhoneTestEntries.mm; sourceTree = "<group>"; };
+               49F2DAEB13765004000B6B8C /* TestEntriesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestEntriesViewController.h; sourceTree = "<group>"; };
+               49F2DAEC13765004000B6B8C /* TestEntriesViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = TestEntriesViewController.mm; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+               499668BF13692E2D006E8125 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               49F2D9AD1376462B000B6B8C /* libBox2D.a in Frameworks */,
+                               49F2D99A137645BF000B6B8C /* libSparrow.a in Frameworks */,
+                               49966917136930E8006E8125 /* AudioToolbox.framework in Frameworks */,
+                               49966918136930E8006E8125 /* AVFoundation.framework in Frameworks */,
+                               49966919136930E8006E8125 /* OpenAL.framework in Frameworks */,
+                               4996691A136930E8006E8125 /* OpenGLES.framework in Frameworks */,
+                               4996691B136930E8006E8125 /* QuartzCore.framework in Frameworks */,
+                               499668C713692E2D006E8125 /* UIKit.framework in Frameworks */,
+                               499668C913692E2D006E8125 /* Foundation.framework in Frameworks */,
+                               499668CB13692E2D006E8125 /* CoreGraphics.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+               499668B713692E2D006E8125 = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2D9D313764A9B000B6B8C /* etc */,
+                               49F2D9AE13764666000B6B8C /* src */,
+                               49F2DAE013764EDF000B6B8C /* libs */,
+                               499668C513692E2D006E8125 /* Frameworks */,
+                               499668C313692E2D006E8125 /* Products */,
+                       );
+                       sourceTree = "<group>";
+               };
+               499668C313692E2D006E8125 /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               499668C213692E2D006E8125 /* Tanks.app */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               499668C513692E2D006E8125 /* Frameworks */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2D999137645BF000B6B8C /* libSparrow.a */,
+                               49F2D9AC1376462B000B6B8C /* libBox2D.a */,
+                               49F2D99B137645DF000B6B8C /* box2d-ios.xcodeproj */,
+                               49966912136930E8006E8125 /* AudioToolbox.framework */,
+                               49966913136930E8006E8125 /* AVFoundation.framework */,
+                               49966914136930E8006E8125 /* OpenAL.framework */,
+                               49966915136930E8006E8125 /* OpenGLES.framework */,
+                               49966916136930E8006E8125 /* QuartzCore.framework */,
+                               499668C613692E2D006E8125 /* UIKit.framework */,
+                               499668C813692E2D006E8125 /* Foundation.framework */,
+                               499668CA13692E2D006E8125 /* CoreGraphics.framework */,
+                       );
+                       name = Frameworks;
+                       sourceTree = "<group>";
+               };
+               49F2D99C137645DF000B6B8C /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2D9A3137645E0000B6B8C /* libBox2D.a */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               49F2D9AE13764666000B6B8C /* src */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2D9AF13764666000B6B8C /* display */,
+                               49F2D9B013764666000B6B8C /* main.m */,
+                               49F2D9B113764666000B6B8C /* physics */,
+                               49F2D9B213764666000B6B8C /* prefix.pch */,
+                               49F2D9B313764666000B6B8C /* render */,
+                               49F2D9B413764666000B6B8C /* RootAppDelegate.h */,
+                               49F2D9B513764666000B6B8C /* RootAppDelegate.m */,
+                               49F2D9B613764666000B6B8C /* tanks */,
+                               49F2D9B913764666000B6B8C /* ui */,
+                       );
+                       path = src;
+                       sourceTree = "<group>";
+               };
+               49F2D9AF13764666000B6B8C /* display */ = {
+                       isa = PBXGroup;
+                       children = (
+                       );
+                       path = display;
+                       sourceTree = "<group>";
+               };
+               49F2D9B113764666000B6B8C /* physics */ = {
+                       isa = PBXGroup;
+                       children = (
+                       );
+                       path = physics;
+                       sourceTree = "<group>";
+               };
+               49F2D9B313764666000B6B8C /* render */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DAE113765004000B6B8C /* Box2DAppDelegate.h */,
+                               49F2DAE213765004000B6B8C /* Box2DAppDelegate.mm */,
+                               49F2DAE313765004000B6B8C /* Box2DView.h */,
+                               49F2DAE413765004000B6B8C /* Box2DView.mm */,
+                               49F2DAE513765004000B6B8C /* Delegates.h */,
+                               49F2DAE613765004000B6B8C /* GLES-Render.h */,
+                               49F2DAE713765004000B6B8C /* GLES-Render.mm */,
+                               49F2DAE813765004000B6B8C /* iPhoneTest.h */,
+                               49F2DAE913765004000B6B8C /* iPhoneTest.mm */,
+                               49F2DAEA13765004000B6B8C /* iPhoneTestEntries.mm */,
+                               49F2DAEB13765004000B6B8C /* TestEntriesViewController.h */,
+                               49F2DAEC13765004000B6B8C /* TestEntriesViewController.mm */,
+                       );
+                       path = render;
+                       sourceTree = "<group>";
+               };
+               49F2D9B613764666000B6B8C /* tanks */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2D9B713764666000B6B8C /* Game.h */,
+                               49F2D9B813764666000B6B8C /* Game.m */,
+                       );
+                       path = tanks;
+                       sourceTree = "<group>";
+               };
+               49F2D9B913764666000B6B8C /* ui */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2D9BA13764666000B6B8C /* iPad */,
+                               49F2D9BF13764666000B6B8C /* iPhone */,
+                       );
+                       path = ui;
+                       sourceTree = "<group>";
+               };
+               49F2D9BA13764666000B6B8C /* iPad */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2D9BB13764666000B6B8C /* MainWindow_iPad.xib */,
+                               49F2D9BD13764666000B6B8C /* RootAppDelegate_iPad.h */,
+                               49F2D9BE13764666000B6B8C /* RootAppDelegate_iPad.m */,
+                       );
+                       path = iPad;
+                       sourceTree = "<group>";
+               };
+               49F2D9BF13764666000B6B8C /* iPhone */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2D9C013764666000B6B8C /* MainWindow_iPhone.xib */,
+                               49F2D9C213764666000B6B8C /* RootAppDelegate_iPhone.h */,
+                               49F2D9C313764666000B6B8C /* RootAppDelegate_iPhone.m */,
+                       );
+                       path = iPhone;
+                       sourceTree = "<group>";
+               };
+               49F2D9D313764A9B000B6B8C /* etc */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2D9D413764A9B000B6B8C /* InfoPlist.strings */,
+                               49F2D9D613764A9B000B6B8C /* tanks-Info.plist */,
+                       );
+                       path = etc;
+                       sourceTree = "<group>";
+               };
+               49F2DA1513764ED5000B6B8C /* Sparrow */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA1613764ED5000B6B8C /* Audio */,
+                               49F2DA1713764ED5000B6B8C /* System */,
+                               49F2DA1813764ED5000B6B8C /* Events */,
+                               49F2DA1913764ED5000B6B8C /* Display */,
+                               49F2DA1A13764ED5000B6B8C /* Textures */,
+                               49F2DA1B13764ED5000B6B8C /* Animation */,
+                               49F2DA1C13764ED5000B6B8C /* Utils */,
+                               49F2DA1D13764ED5000B6B8C /* Sparrow.h */,
+                       );
+                       name = Sparrow;
+                       path = libs/sparrow/src/Classes;
+                       sourceTree = "<group>";
+               };
+               49F2DA1613764ED5000B6B8C /* Audio */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA1E13764ED5000B6B8C /* AVFoundation */,
+                               49F2DA1F13764ED5000B6B8C /* OpenAL */,
+                               49F2DA2013764ED5000B6B8C /* SPAudioEngine.h */,
+                               49F2DA2113764ED5000B6B8C /* SPAudioEngine.m */,
+                               49F2DA2213764ED5000B6B8C /* SPSound.h */,
+                               49F2DA2313764ED5000B6B8C /* SPSound.m */,
+                               49F2DA2413764ED5000B6B8C /* SPSoundChannel.h */,
+                               49F2DA2513764ED5000B6B8C /* SPSoundChannel.m */,
+                       );
+                       name = Audio;
+                       sourceTree = "<group>";
+               };
+               49F2DA1713764ED5000B6B8C /* System */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA2E13764ED5000B6B8C /* SPView.h */,
+                               49F2DA2F13764ED5000B6B8C /* SPView.m */,
+                       );
+                       name = System;
+                       sourceTree = "<group>";
+               };
+               49F2DA1813764ED5000B6B8C /* Events */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA3013764ED5000B6B8C /* Internal */,
+                               49F2DA3113764ED5000B6B8C /* SPEvent.h */,
+                               49F2DA3213764ED5000B6B8C /* SPEvent.m */,
+                               49F2DA3313764ED5000B6B8C /* SPEventDispatcher.h */,
+                               49F2DA3413764ED5000B6B8C /* SPEventDispatcher.m */,
+                               49F2DA3513764ED5000B6B8C /* SPTouch.h */,
+                               49F2DA3613764ED5000B6B8C /* SPTouch.m */,
+                               49F2DA3713764ED5000B6B8C /* SPTouchEvent.h */,
+                               49F2DA3813764ED5000B6B8C /* SPTouchEvent.m */,
+                               49F2DA3913764ED5000B6B8C /* SPEnterFrameEvent.h */,
+                               49F2DA3A13764ED5000B6B8C /* SPEnterFrameEvent.m */,
+                       );
+                       name = Events;
+                       sourceTree = "<group>";
+               };
+               49F2DA1913764ED5000B6B8C /* Display */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA3D13764ED5000B6B8C /* Rendering */,
+                               49F2DA3E13764ED5000B6B8C /* Text */,
+                               49F2DA3F13764ED5000B6B8C /* Internal */,
+                               49F2DA4013764ED5000B6B8C /* SPDisplayObject.h */,
+                               49F2DA4113764ED5000B6B8C /* SPDisplayObject.m */,
+                               49F2DA4213764ED5000B6B8C /* SPDisplayObjectContainer.h */,
+                               49F2DA4313764ED5000B6B8C /* SPDisplayObjectContainer.m */,
+                               49F2DA4413764ED5000B6B8C /* SPSprite.h */,
+                               49F2DA4513764ED5000B6B8C /* SPSprite.m */,
+                               49F2DA4613764ED5000B6B8C /* SPStage.h */,
+                               49F2DA4713764ED5000B6B8C /* SPStage.m */,
+                               49F2DA4813764ED5000B6B8C /* SPQuad.h */,
+                               49F2DA4913764ED5000B6B8C /* SPQuad.m */,
+                               49F2DA4A13764ED5000B6B8C /* SPImage.h */,
+                               49F2DA4B13764ED5000B6B8C /* SPImage.m */,
+                               49F2DA4C13764ED5000B6B8C /* SPButton.h */,
+                               49F2DA4D13764ED5000B6B8C /* SPButton.m */,
+                               49F2DA4E13764ED5000B6B8C /* SPMovieClip.h */,
+                               49F2DA4F13764ED5000B6B8C /* SPMovieClip.m */,
+                               49F2DA5013764ED5000B6B8C /* SPCompiledSprite.h */,
+                               49F2DA5113764ED5000B6B8C /* SPCompiledSprite.m */,
+                       );
+                       name = Display;
+                       sourceTree = "<group>";
+               };
+               49F2DA1A13764ED5000B6B8C /* Textures */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA5F13764ED5000B6B8C /* SPTexture.h */,
+                               49F2DA6013764ED5000B6B8C /* SPTexture.m */,
+                               49F2DA6113764ED5000B6B8C /* SPGLTexture.h */,
+                               49F2DA6213764ED5000B6B8C /* SPGLTexture.m */,
+                               49F2DA6313764ED5000B6B8C /* SPSubTexture.h */,
+                               49F2DA6413764ED5000B6B8C /* SPSubTexture.m */,
+                               49F2DA6513764ED5000B6B8C /* SPRenderTexture.h */,
+                               49F2DA6613764ED5000B6B8C /* SPRenderTexture.m */,
+                               49F2DA6713764ED5000B6B8C /* SPTextureAtlas.h */,
+                               49F2DA6813764ED5000B6B8C /* SPTextureAtlas.m */,
+                       );
+                       name = Textures;
+                       sourceTree = "<group>";
+               };
+               49F2DA1B13764ED5000B6B8C /* Animation */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA6913764ED5000B6B8C /* Internal */,
+                               49F2DA6A13764ED5000B6B8C /* SPAnimatable.h */,
+                               49F2DA6B13764ED5000B6B8C /* SPJuggler.h */,
+                               49F2DA6C13764ED5000B6B8C /* SPJuggler.m */,
+                               49F2DA6D13764ED5000B6B8C /* SPTransitions.h */,
+                               49F2DA6E13764ED5000B6B8C /* SPTransitions.m */,
+                               49F2DA6F13764ED5000B6B8C /* SPTween.h */,
+                               49F2DA7013764ED5000B6B8C /* SPTween.m */,
+                               49F2DA7113764ED5000B6B8C /* SPDelayedInvocation.h */,
+                               49F2DA7213764ED5000B6B8C /* SPDelayedInvocation.m */,
+                       );
+                       name = Animation;
+                       sourceTree = "<group>";
+               };
+               49F2DA1C13764ED5000B6B8C /* Utils */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA7513764ED6000B6B8C /* SPMacros.h */,
+                               49F2DA7613764ED6000B6B8C /* SPMatrix.h */,
+                               49F2DA7713764ED6000B6B8C /* SPMatrix.m */,
+                               49F2DA7813764ED6000B6B8C /* SPPoint.h */,
+                               49F2DA7913764ED6000B6B8C /* SPPoint.m */,
+                               49F2DA7A13764ED6000B6B8C /* SPRectangle.h */,
+                               49F2DA7B13764ED6000B6B8C /* SPRectangle.m */,
+                               49F2DA7C13764ED6000B6B8C /* SPNSExtensions.h */,
+                               49F2DA7D13764ED6000B6B8C /* SPNSExtensions.m */,
+                               49F2DA7E13764ED6000B6B8C /* SPPoolObject.h */,
+                               49F2DA7F13764ED6000B6B8C /* SPPoolObject.m */,
+                               49F2DA8013764ED6000B6B8C /* SPUtils.h */,
+                               49F2DA8113764ED6000B6B8C /* SPUtils.m */,
+                       );
+                       name = Utils;
+                       sourceTree = "<group>";
+               };
+               49F2DA1E13764ED5000B6B8C /* AVFoundation */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA2613764ED5000B6B8C /* SPAVSound.h */,
+                               49F2DA2713764ED5000B6B8C /* SPAVSound.m */,
+                               49F2DA2813764ED5000B6B8C /* SPAVSoundChannel.h */,
+                               49F2DA2913764ED5000B6B8C /* SPAVSoundChannel.m */,
+                       );
+                       name = AVFoundation;
+                       sourceTree = "<group>";
+               };
+               49F2DA1F13764ED5000B6B8C /* OpenAL */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA2A13764ED5000B6B8C /* SPALSound.h */,
+                               49F2DA2B13764ED5000B6B8C /* SPALSound.m */,
+                               49F2DA2C13764ED5000B6B8C /* SPALSoundChannel.h */,
+                               49F2DA2D13764ED5000B6B8C /* SPALSoundChannel.m */,
+                       );
+                       name = OpenAL;
+                       sourceTree = "<group>";
+               };
+               49F2DA3013764ED5000B6B8C /* Internal */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA3B13764ED5000B6B8C /* SPTouch_Internal.h */,
+                               49F2DA3C13764ED5000B6B8C /* SPEvent_Internal.h */,
+                       );
+                       name = Internal;
+                       sourceTree = "<group>";
+               };
+               49F2DA3D13764ED5000B6B8C /* Rendering */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA5213764ED5000B6B8C /* SPRendering.m */,
+                               49F2DA5313764ED5000B6B8C /* SPRenderSupport.h */,
+                               49F2DA5413764ED5000B6B8C /* SPRenderSupport.m */,
+                       );
+                       name = Rendering;
+                       sourceTree = "<group>";
+               };
+               49F2DA3E13764ED5000B6B8C /* Text */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA5513764ED5000B6B8C /* SPTextField.h */,
+                               49F2DA5613764ED5000B6B8C /* SPTextField.m */,
+                               49F2DA5713764ED5000B6B8C /* SPBitmapFont.h */,
+                               49F2DA5813764ED5000B6B8C /* SPBitmapFont.m */,
+                               49F2DA5913764ED5000B6B8C /* SPBitmapChar.h */,
+                               49F2DA5A13764ED5000B6B8C /* SPBitmapChar.m */,
+                       );
+                       name = Text;
+                       sourceTree = "<group>";
+               };
+               49F2DA3F13764ED5000B6B8C /* Internal */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA5B13764ED5000B6B8C /* SPTouchProcessor.h */,
+                               49F2DA5C13764ED5000B6B8C /* SPTouchProcessor.m */,
+                               49F2DA5D13764ED5000B6B8C /* SPDisplayObject_Internal.h */,
+                               49F2DA5E13764ED5000B6B8C /* SPStage_Internal.h */,
+                       );
+                       name = Internal;
+                       sourceTree = "<group>";
+               };
+               49F2DA6913764ED5000B6B8C /* Internal */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA7313764ED5000B6B8C /* SPTweenedProperty.h */,
+                               49F2DA7413764ED5000B6B8C /* SPTweenedProperty.m */,
+                       );
+                       name = Internal;
+                       sourceTree = "<group>";
+               };
+               49F2DAE013764EDF000B6B8C /* libs */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49F2DA1513764ED5000B6B8C /* Sparrow */,
+                       );
+                       name = libs;
+                       sourceTree = "<group>";
+               };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+               49F2D9CC13764697000B6B8C /* Headers */ = {
+                       isa = PBXHeadersBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               49F2D9CD13764710000B6B8C /* RootAppDelegate.h in Headers */,
+                               49F2D9CE13764710000B6B8C /* Game.h in Headers */,
+                               49F2D9CF13764710000B6B8C /* RootAppDelegate_iPad.h in Headers */,
+                               49F2D9D013764710000B6B8C /* RootAppDelegate_iPhone.h in Headers */,
+                               49F2DA8213764ED6000B6B8C /* SPAVSound.h in Headers */,
+                               49F2DA8413764ED6000B6B8C /* SPAVSoundChannel.h in Headers */,
+                               49F2DA8613764ED6000B6B8C /* SPALSound.h in Headers */,
+                               49F2DA8813764ED6000B6B8C /* SPALSoundChannel.h in Headers */,
+                               49F2DA8A13764ED6000B6B8C /* SPAudioEngine.h in Headers */,
+                               49F2DA8C13764ED6000B6B8C /* SPSound.h in Headers */,
+                               49F2DA8E13764ED6000B6B8C /* SPSoundChannel.h in Headers */,
+                               49F2DA9013764ED6000B6B8C /* SPView.h in Headers */,
+                               49F2DA9213764ED6000B6B8C /* SPTouch_Internal.h in Headers */,
+                               49F2DA9313764ED6000B6B8C /* SPEvent_Internal.h in Headers */,
+                               49F2DA9413764ED6000B6B8C /* SPEvent.h in Headers */,
+                               49F2DA9613764ED6000B6B8C /* SPEventDispatcher.h in Headers */,
+                               49F2DA9813764ED6000B6B8C /* SPTouch.h in Headers */,
+                               49F2DA9A13764ED6000B6B8C /* SPTouchEvent.h in Headers */,
+                               49F2DA9C13764ED6000B6B8C /* SPEnterFrameEvent.h in Headers */,
+                               49F2DA9F13764ED6000B6B8C /* SPRenderSupport.h in Headers */,
+                               49F2DAA113764ED6000B6B8C /* SPTextField.h in Headers */,
+                               49F2DAA313764ED6000B6B8C /* SPBitmapFont.h in Headers */,
+                               49F2DAA513764ED6000B6B8C /* SPBitmapChar.h in Headers */,
+                               49F2DAA713764ED6000B6B8C /* SPTouchProcessor.h in Headers */,
+                               49F2DAA913764ED6000B6B8C /* SPDisplayObject_Internal.h in Headers */,
+                               49F2DAAA13764ED6000B6B8C /* SPStage_Internal.h in Headers */,
+                               49F2DAAB13764ED6000B6B8C /* SPDisplayObject.h in Headers */,
+                               49F2DAAD13764ED6000B6B8C /* SPDisplayObjectContainer.h in Headers */,
+                               49F2DAAF13764ED6000B6B8C /* SPSprite.h in Headers */,
+                               49F2DAB113764ED6000B6B8C /* SPStage.h in Headers */,
+                               49F2DAB313764ED6000B6B8C /* SPQuad.h in Headers */,
+                               49F2DAB513764ED6000B6B8C /* SPImage.h in Headers */,
+                               49F2DAB713764ED6000B6B8C /* SPButton.h in Headers */,
+                               49F2DAB913764ED6000B6B8C /* SPMovieClip.h in Headers */,
+                               49F2DABB13764ED6000B6B8C /* SPCompiledSprite.h in Headers */,
+                               49F2DABD13764ED6000B6B8C /* SPTexture.h in Headers */,
+                               49F2DABF13764ED6000B6B8C /* SPGLTexture.h in Headers */,
+                               49F2DAC113764ED6000B6B8C /* SPSubTexture.h in Headers */,
+                               49F2DAC313764ED6000B6B8C /* SPRenderTexture.h in Headers */,
+                               49F2DAC513764ED6000B6B8C /* SPTextureAtlas.h in Headers */,
+                               49F2DAC713764ED6000B6B8C /* SPTweenedProperty.h in Headers */,
+                               49F2DAC913764ED6000B6B8C /* SPAnimatable.h in Headers */,
+                               49F2DACA13764ED6000B6B8C /* SPJuggler.h in Headers */,
+                               49F2DACC13764ED6000B6B8C /* SPTransitions.h in Headers */,
+                               49F2DACE13764ED6000B6B8C /* SPTween.h in Headers */,
+                               49F2DAD013764ED6000B6B8C /* SPDelayedInvocation.h in Headers */,
+                               49F2DAD213764ED6000B6B8C /* SPMacros.h in Headers */,
+                               49F2DAD313764ED6000B6B8C /* SPMatrix.h in Headers */,
+                               49F2DAD513764ED6000B6B8C /* SPPoint.h in Headers */,
+                               49F2DAD713764ED6000B6B8C /* SPRectangle.h in Headers */,
+                               49F2DAD913764ED6000B6B8C /* SPNSExtensions.h in Headers */,
+                               49F2DADB13764ED6000B6B8C /* SPPoolObject.h in Headers */,
+                               49F2DADD13764ED6000B6B8C /* SPUtils.h in Headers */,
+                               49F2DADF13764ED6000B6B8C /* Sparrow.h in Headers */,
+                               49F2DAF213765004000B6B8C /* GLES-Render.h in Headers */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+               499668C113692E2D006E8125 /* Tanks */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 499668FE13692E2D006E8125 /* Build configuration list for PBXNativeTarget "Tanks" */;
+                       buildPhases = (
+                               499668BE13692E2D006E8125 /* Sources */,
+                               499668BF13692E2D006E8125 /* Frameworks */,
+                               499668C013692E2D006E8125 /* Resources */,
+                               49F2D9CC13764697000B6B8C /* Headers */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               49F2D9AB13764624000B6B8C /* PBXTargetDependency */,
+                       );
+                       name = Tanks;
+                       productName = tanks;
+                       productReference = 499668C213692E2D006E8125 /* Tanks.app */;
+                       productType = "com.apple.product-type.application";
+               };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+               499668B913692E2D006E8125 /* Project object */ = {
+                       isa = PBXProject;
+                       buildConfigurationList = 499668BC13692E2D006E8125 /* Build configuration list for PBXProject "tanks" */;
+                       compatibilityVersion = "Xcode 3.2";
+                       developmentRegion = English;
+                       hasScannedForEncodings = 0;
+                       knownRegions = (
+                               en,
+                       );
+                       mainGroup = 499668B713692E2D006E8125;
+                       productRefGroup = 499668C313692E2D006E8125 /* Products */;
+                       projectDirPath = "";
+                       projectReferences = (
+                               {
+                                       ProductGroup = 49F2D99C137645DF000B6B8C /* Products */;
+                                       ProjectRef = 49F2D99B137645DF000B6B8C /* box2d-ios.xcodeproj */;
+                               },
+                       );
+                       projectRoot = "";
+                       targets = (
+                               499668C113692E2D006E8125 /* Tanks */,
+                       );
+               };
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+               49F2D9A3137645E0000B6B8C /* libBox2D.a */ = {
+                       isa = PBXReferenceProxy;
+                       fileType = archive.ar;
+                       path = libBox2D.a;
+                       remoteRef = 49F2D9A2137645E0000B6B8C /* PBXContainerItemProxy */;
+                       sourceTree = BUILT_PRODUCTS_DIR;
+               };
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+               499668C013692E2D006E8125 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               49F2D9C713764666000B6B8C /* MainWindow_iPad.xib in Resources */,
+                               49F2D9C913764666000B6B8C /* MainWindow_iPhone.xib in Resources */,
+                               49F2D9D713764A9B000B6B8C /* InfoPlist.strings in Resources */,
+                               49F2D9D813764A9B000B6B8C /* tanks-Info.plist in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+               499668BE13692E2D006E8125 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               49F2D9D213764763000B6B8C /* prefix.pch in Sources */,
+                               49F2D9C413764666000B6B8C /* main.m in Sources */,
+                               49F2D9C513764666000B6B8C /* RootAppDelegate.m in Sources */,
+                               49F2D9C613764666000B6B8C /* Game.m in Sources */,
+                               49F2D9C813764666000B6B8C /* RootAppDelegate_iPad.m in Sources */,
+                               49F2D9CA13764666000B6B8C /* RootAppDelegate_iPhone.m in Sources */,
+                               49F2DA8313764ED6000B6B8C /* SPAVSound.m in Sources */,
+                               49F2DA8513764ED6000B6B8C /* SPAVSoundChannel.m in Sources */,
+                               49F2DA8713764ED6000B6B8C /* SPALSound.m in Sources */,
+                               49F2DA8913764ED6000B6B8C /* SPALSoundChannel.m in Sources */,
+                               49F2DA8B13764ED6000B6B8C /* SPAudioEngine.m in Sources */,
+                               49F2DA8D13764ED6000B6B8C /* SPSound.m in Sources */,
+                               49F2DA8F13764ED6000B6B8C /* SPSoundChannel.m in Sources */,
+                               49F2DA9113764ED6000B6B8C /* SPView.m in Sources */,
+                               49F2DA9513764ED6000B6B8C /* SPEvent.m in Sources */,
+                               49F2DA9713764ED6000B6B8C /* SPEventDispatcher.m in Sources */,
+                               49F2DA9913764ED6000B6B8C /* SPTouch.m in Sources */,
+                               49F2DA9B13764ED6000B6B8C /* SPTouchEvent.m in Sources */,
+                               49F2DA9D13764ED6000B6B8C /* SPEnterFrameEvent.m in Sources */,
+                               49F2DA9E13764ED6000B6B8C /* SPRendering.m in Sources */,
+                               49F2DAA013764ED6000B6B8C /* SPRenderSupport.m in Sources */,
+                               49F2DAA213764ED6000B6B8C /* SPTextField.m in Sources */,
+                               49F2DAA413764ED6000B6B8C /* SPBitmapFont.m in Sources */,
+                               49F2DAA613764ED6000B6B8C /* SPBitmapChar.m in Sources */,
+                               49F2DAA813764ED6000B6B8C /* SPTouchProcessor.m in Sources */,
+                               49F2DAAC13764ED6000B6B8C /* SPDisplayObject.m in Sources */,
+                               49F2DAAE13764ED6000B6B8C /* SPDisplayObjectContainer.m in Sources */,
+                               49F2DAB013764ED6000B6B8C /* SPSprite.m in Sources */,
+                               49F2DAB213764ED6000B6B8C /* SPStage.m in Sources */,
+                               49F2DAB413764ED6000B6B8C /* SPQuad.m in Sources */,
+                               49F2DAB613764ED6000B6B8C /* SPImage.m in Sources */,
+                               49F2DAB813764ED6000B6B8C /* SPButton.m in Sources */,
+                               49F2DABA13764ED6000B6B8C /* SPMovieClip.m in Sources */,
+                               49F2DABC13764ED6000B6B8C /* SPCompiledSprite.m in Sources */,
+                               49F2DABE13764ED6000B6B8C /* SPTexture.m in Sources */,
+                               49F2DAC013764ED6000B6B8C /* SPGLTexture.m in Sources */,
+                               49F2DAC213764ED6000B6B8C /* SPSubTexture.m in Sources */,
+                               49F2DAC413764ED6000B6B8C /* SPRenderTexture.m in Sources */,
+                               49F2DAC613764ED6000B6B8C /* SPTextureAtlas.m in Sources */,
+                               49F2DAC813764ED6000B6B8C /* SPTweenedProperty.m in Sources */,
+                               49F2DACB13764ED6000B6B8C /* SPJuggler.m in Sources */,
+                               49F2DACD13764ED6000B6B8C /* SPTransitions.m in Sources */,
+                               49F2DACF13764ED6000B6B8C /* SPTween.m in Sources */,
+                               49F2DAD113764ED6000B6B8C /* SPDelayedInvocation.m in Sources */,
+                               49F2DAD413764ED6000B6B8C /* SPMatrix.m in Sources */,
+                               49F2DAD613764ED6000B6B8C /* SPPoint.m in Sources */,
+                               49F2DAD813764ED6000B6B8C /* SPRectangle.m in Sources */,
+                               49F2DADA13764ED6000B6B8C /* SPNSExtensions.m in Sources */,
+                               49F2DADC13764ED6000B6B8C /* SPPoolObject.m in Sources */,
+                               49F2DADE13764ED6000B6B8C /* SPUtils.m in Sources */,
+                               49F2DAF313765004000B6B8C /* GLES-Render.mm in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+               49F2D9AB13764624000B6B8C /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       name = Box2D;
+                       targetProxy = 49F2D9AA13764624000B6B8C /* PBXContainerItemProxy */;
+               };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+               49F2D9BB13764666000B6B8C /* MainWindow_iPad.xib */ = {
+                       isa = PBXVariantGroup;
+                       children = (
+                               49F2D9BC13764666000B6B8C /* en */,
+                       );
+                       name = MainWindow_iPad.xib;
+                       sourceTree = "<group>";
+               };
+               49F2D9C013764666000B6B8C /* MainWindow_iPhone.xib */ = {
+                       isa = PBXVariantGroup;
+                       children = (
+                               49F2D9C113764666000B6B8C /* en */,
+                       );
+                       name = MainWindow_iPhone.xib;
+                       sourceTree = "<group>";
+               };
+               49F2D9D413764A9B000B6B8C /* InfoPlist.strings */ = {
+                       isa = PBXVariantGroup;
+                       children = (
+                               49F2D9D513764A9B000B6B8C /* en */,
+                       );
+                       name = InfoPlist.strings;
+                       sourceTree = "<group>";
+               };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+               499668FC13692E2D006E8125 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+                               GCC_C_LANGUAGE_STANDARD = gnu99;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
+                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+                               GCC_VERSION = com.apple.compilers.llvmgcc42;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 4.3;
+                               SDKROOT = iphoneos;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                       };
+                       name = Debug;
+               };
+               499668FD13692E2D006E8125 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+                               GCC_C_LANGUAGE_STANDARD = gnu99;
+                               GCC_VERSION = com.apple.compilers.llvmgcc42;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 4.3;
+                               OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+                               SDKROOT = iphoneos;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                       };
+                       name = Release;
+               };
+               499668FF13692E2D006E8125 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = YES;
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;
+                               GCC_PREFIX_HEADER = src/prefix.pch;
+                               INFOPLIST_FILE = "etc/tanks-Info.plist";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "libs/**",
+                                       "\"$(SRCROOT)\"",
+                               );
+                               OTHER_LDFLAGS = "";
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               USER_HEADER_SEARCH_PATHS = "libs/** src/**";
+                               WRAPPER_EXTENSION = app;
+                       };
+                       name = Debug;
+               };
+               4996690013692E2D006E8125 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = YES;
+                               COPY_PHASE_STRIP = YES;
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;
+                               GCC_PREFIX_HEADER = src/prefix.pch;
+                               INFOPLIST_FILE = "etc/tanks-Info.plist";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "libs/**",
+                                       "\"$(SRCROOT)\"",
+                               );
+                               OTHER_LDFLAGS = "";
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               USER_HEADER_SEARCH_PATHS = "libs/** src/**";
+                               VALIDATE_PRODUCT = YES;
+                               WRAPPER_EXTENSION = app;
+                       };
+                       name = Release;
+               };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+               499668BC13692E2D006E8125 /* Build configuration list for PBXProject "tanks" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               499668FC13692E2D006E8125 /* Debug */,
+                               499668FD13692E2D006E8125 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               499668FE13692E2D006E8125 /* Build configuration list for PBXNativeTarget "Tanks" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               499668FF13692E2D006E8125 /* Debug */,
+                               4996690013692E2D006E8125 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+/* End XCConfigurationList section */
+       };
+       rootObject = 499668B913692E2D006E8125 /* Project object */;
+}
diff --git a/tanks/tanks.xcodeproj/project.pbxproj b/tanks/tanks.xcodeproj/project.pbxproj
deleted file mode 100644 (file)
index 18a38f9..0000000
+++ /dev/null
@@ -1,593 +0,0 @@
-// !$*UTF8*$!
-{
-       archiveVersion = 1;
-       classes = {
-       };
-       objectVersion = 46;
-       objects = {
-
-/* Begin PBXBuildFile section */
-               49132ED31372483800DFB46D /* libSparrow.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 49132ED21372483700DFB46D /* libSparrow.a */; };
-               499668C713692E2D006E8125 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499668C613692E2D006E8125 /* UIKit.framework */; };
-               499668C913692E2D006E8125 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499668C813692E2D006E8125 /* Foundation.framework */; };
-               499668CB13692E2D006E8125 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499668CA13692E2D006E8125 /* CoreGraphics.framework */; };
-               499668D113692E2D006E8125 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 499668CF13692E2D006E8125 /* InfoPlist.strings */; };
-               499668D413692E2D006E8125 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 499668D313692E2D006E8125 /* main.m */; };
-               499668D713692E2D006E8125 /* tanksAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 499668D613692E2D006E8125 /* tanksAppDelegate.m */; };
-               499668DB13692E2D006E8125 /* tanksAppDelegate_iPhone.m in Sources */ = {isa = PBXBuildFile; fileRef = 499668DA13692E2D006E8125 /* tanksAppDelegate_iPhone.m */; };
-               499668DE13692E2D006E8125 /* MainWindow_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 499668DC13692E2D006E8125 /* MainWindow_iPhone.xib */; };
-               499668E213692E2D006E8125 /* tanksAppDelegate_iPad.m in Sources */ = {isa = PBXBuildFile; fileRef = 499668E113692E2D006E8125 /* tanksAppDelegate_iPad.m */; };
-               499668E513692E2D006E8125 /* MainWindow_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 499668E313692E2D006E8125 /* MainWindow_iPad.xib */; };
-               499668EC13692E2D006E8125 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499668C613692E2D006E8125 /* UIKit.framework */; };
-               499668ED13692E2D006E8125 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499668C813692E2D006E8125 /* Foundation.framework */; };
-               499668EE13692E2D006E8125 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 499668CA13692E2D006E8125 /* CoreGraphics.framework */; };
-               499668F613692E2D006E8125 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 499668F413692E2D006E8125 /* InfoPlist.strings */; };
-               499668F913692E2D006E8125 /* tanksTests.h in Resources */ = {isa = PBXBuildFile; fileRef = 499668F813692E2D006E8125 /* tanksTests.h */; };
-               499668FB13692E2D006E8125 /* tanksTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 499668FA13692E2D006E8125 /* tanksTests.m */; };
-               49966917136930E8006E8125 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49966912136930E8006E8125 /* AudioToolbox.framework */; };
-               49966918136930E8006E8125 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49966913136930E8006E8125 /* AVFoundation.framework */; };
-               49966919136930E8006E8125 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49966914136930E8006E8125 /* OpenAL.framework */; };
-               4996691A136930E8006E8125 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49966915136930E8006E8125 /* OpenGLES.framework */; };
-               4996691B136930E8006E8125 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49966916136930E8006E8125 /* QuartzCore.framework */; };
-               4996691E13693180006E8125 /* Game.m in Sources */ = {isa = PBXBuildFile; fileRef = 4996691D13693180006E8125 /* Game.m */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
-               49132ECC1372459400DFB46D /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 49132EC41372459300DFB46D /* Sparrow.xcodeproj */;
-                       proxyType = 2;
-                       remoteGlobalIDString = DEFE4BC2101B317600E22471;
-                       remoteInfo = Sparrow;
-               };
-               49132ECE1372459400DFB46D /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 49132EC41372459300DFB46D /* Sparrow.xcodeproj */;
-                       proxyType = 2;
-                       remoteGlobalIDString = DEEA9335101E32A30071DD21;
-                       remoteInfo = UnitTests;
-               };
-               49132ED01372482D00DFB46D /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 49132EC41372459300DFB46D /* Sparrow.xcodeproj */;
-                       proxyType = 1;
-                       remoteGlobalIDString = DEFE4BC1101B317600E22471;
-                       remoteInfo = Sparrow;
-               };
-               499668EF13692E2D006E8125 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 499668B913692E2D006E8125 /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = 499668C113692E2D006E8125;
-                       remoteInfo = tanks;
-               };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
-               49132EC41372459300DFB46D /* Sparrow.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Sparrow.xcodeproj; path = ../libs/sparrow/src/Sparrow.xcodeproj; sourceTree = "<group>"; };
-               49132ED21372483700DFB46D /* libSparrow.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libSparrow.a; sourceTree = SOURCE_ROOT; };
-               499668C213692E2D006E8125 /* tanks.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tanks.app; sourceTree = BUILT_PRODUCTS_DIR; };
-               499668C613692E2D006E8125 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
-               499668C813692E2D006E8125 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
-               499668CA13692E2D006E8125 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
-               499668CE13692E2D006E8125 /* tanks-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "tanks-Info.plist"; sourceTree = "<group>"; };
-               499668D013692E2D006E8125 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
-               499668D213692E2D006E8125 /* tanks-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "tanks-Prefix.pch"; sourceTree = "<group>"; };
-               499668D313692E2D006E8125 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
-               499668D513692E2D006E8125 /* tanksAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tanksAppDelegate.h; sourceTree = "<group>"; };
-               499668D613692E2D006E8125 /* tanksAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = tanksAppDelegate.m; sourceTree = "<group>"; };
-               499668D913692E2D006E8125 /* tanksAppDelegate_iPhone.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = tanksAppDelegate_iPhone.h; path = iPhone/tanksAppDelegate_iPhone.h; sourceTree = "<group>"; };
-               499668DA13692E2D006E8125 /* tanksAppDelegate_iPhone.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = tanksAppDelegate_iPhone.m; path = iPhone/tanksAppDelegate_iPhone.m; sourceTree = "<group>"; };
-               499668DD13692E2D006E8125 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = iPhone/en.lproj/MainWindow_iPhone.xib; sourceTree = "<group>"; };
-               499668E013692E2D006E8125 /* tanksAppDelegate_iPad.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = tanksAppDelegate_iPad.h; path = iPad/tanksAppDelegate_iPad.h; sourceTree = "<group>"; };
-               499668E113692E2D006E8125 /* tanksAppDelegate_iPad.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = tanksAppDelegate_iPad.m; path = iPad/tanksAppDelegate_iPad.m; sourceTree = "<group>"; };
-               499668E413692E2D006E8125 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = iPad/en.lproj/MainWindow_iPad.xib; sourceTree = "<group>"; };
-               499668EB13692E2D006E8125 /* tanksTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = tanksTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };
-               499668F313692E2D006E8125 /* tanksTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "tanksTests-Info.plist"; sourceTree = "<group>"; };
-               499668F513692E2D006E8125 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
-               499668F713692E2D006E8125 /* tanksTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "tanksTests-Prefix.pch"; sourceTree = "<group>"; };
-               499668F813692E2D006E8125 /* tanksTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tanksTests.h; sourceTree = "<group>"; };
-               499668FA13692E2D006E8125 /* tanksTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = tanksTests.m; sourceTree = "<group>"; };
-               49966912136930E8006E8125 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
-               49966913136930E8006E8125 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
-               49966914136930E8006E8125 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; };
-               49966915136930E8006E8125 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
-               49966916136930E8006E8125 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
-               4996691C13693180006E8125 /* Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Game.h; sourceTree = "<group>"; };
-               4996691D13693180006E8125 /* Game.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Game.m; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-               499668BF13692E2D006E8125 /* Frameworks */ = {
-                       isa = PBXFrameworksBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               49132ED31372483800DFB46D /* libSparrow.a in Frameworks */,
-                               49966917136930E8006E8125 /* AudioToolbox.framework in Frameworks */,
-                               49966918136930E8006E8125 /* AVFoundation.framework in Frameworks */,
-                               49966919136930E8006E8125 /* OpenAL.framework in Frameworks */,
-                               4996691A136930E8006E8125 /* OpenGLES.framework in Frameworks */,
-                               4996691B136930E8006E8125 /* QuartzCore.framework in Frameworks */,
-                               499668C713692E2D006E8125 /* UIKit.framework in Frameworks */,
-                               499668C913692E2D006E8125 /* Foundation.framework in Frameworks */,
-                               499668CB13692E2D006E8125 /* CoreGraphics.framework in Frameworks */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
-               499668E713692E2D006E8125 /* Frameworks */ = {
-                       isa = PBXFrameworksBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               499668EC13692E2D006E8125 /* UIKit.framework in Frameworks */,
-                               499668ED13692E2D006E8125 /* Foundation.framework in Frameworks */,
-                               499668EE13692E2D006E8125 /* CoreGraphics.framework in Frameworks */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-               49132EC51372459300DFB46D /* Products */ = {
-                       isa = PBXGroup;
-                       children = (
-                               49132ECD1372459400DFB46D /* libSparrow.a */,
-                               49132ECF1372459400DFB46D /* UnitTest.octest */,
-                       );
-                       name = Products;
-                       sourceTree = "<group>";
-               };
-               499668B713692E2D006E8125 = {
-                       isa = PBXGroup;
-                       children = (
-                               49132EC41372459300DFB46D /* Sparrow.xcodeproj */,
-                               499668CC13692E2D006E8125 /* tanks */,
-                               499668F113692E2D006E8125 /* tanksTests */,
-                               499668C513692E2D006E8125 /* Frameworks */,
-                               499668C313692E2D006E8125 /* Products */,
-                       );
-                       sourceTree = "<group>";
-               };
-               499668C313692E2D006E8125 /* Products */ = {
-                       isa = PBXGroup;
-                       children = (
-                               499668C213692E2D006E8125 /* tanks.app */,
-                               499668EB13692E2D006E8125 /* tanksTests.octest */,
-                       );
-                       name = Products;
-                       sourceTree = "<group>";
-               };
-               499668C513692E2D006E8125 /* Frameworks */ = {
-                       isa = PBXGroup;
-                       children = (
-                               49132ED21372483700DFB46D /* libSparrow.a */,
-                               49966912136930E8006E8125 /* AudioToolbox.framework */,
-                               49966913136930E8006E8125 /* AVFoundation.framework */,
-                               49966914136930E8006E8125 /* OpenAL.framework */,
-                               49966915136930E8006E8125 /* OpenGLES.framework */,
-                               49966916136930E8006E8125 /* QuartzCore.framework */,
-                               499668C613692E2D006E8125 /* UIKit.framework */,
-                               499668C813692E2D006E8125 /* Foundation.framework */,
-                               499668CA13692E2D006E8125 /* CoreGraphics.framework */,
-                       );
-                       name = Frameworks;
-                       sourceTree = "<group>";
-               };
-               499668CC13692E2D006E8125 /* tanks */ = {
-                       isa = PBXGroup;
-                       children = (
-                               499668D513692E2D006E8125 /* tanksAppDelegate.h */,
-                               499668D613692E2D006E8125 /* tanksAppDelegate.m */,
-                               499668D813692E2D006E8125 /* iPhone */,
-                               499668DF13692E2D006E8125 /* iPad */,
-                               499668CD13692E2D006E8125 /* Supporting Files */,
-                               4996691C13693180006E8125 /* Game.h */,
-                               4996691D13693180006E8125 /* Game.m */,
-                       );
-                       path = tanks;
-                       sourceTree = "<group>";
-               };
-               499668CD13692E2D006E8125 /* Supporting Files */ = {
-                       isa = PBXGroup;
-                       children = (
-                               499668CE13692E2D006E8125 /* tanks-Info.plist */,
-                               499668CF13692E2D006E8125 /* InfoPlist.strings */,
-                               499668D213692E2D006E8125 /* tanks-Prefix.pch */,
-                               499668D313692E2D006E8125 /* main.m */,
-                       );
-                       name = "Supporting Files";
-                       sourceTree = "<group>";
-               };
-               499668D813692E2D006E8125 /* iPhone */ = {
-                       isa = PBXGroup;
-                       children = (
-                               499668D913692E2D006E8125 /* tanksAppDelegate_iPhone.h */,
-                               499668DA13692E2D006E8125 /* tanksAppDelegate_iPhone.m */,
-                               499668DC13692E2D006E8125 /* MainWindow_iPhone.xib */,
-                       );
-                       name = iPhone;
-                       sourceTree = "<group>";
-               };
-               499668DF13692E2D006E8125 /* iPad */ = {
-                       isa = PBXGroup;
-                       children = (
-                               499668E013692E2D006E8125 /* tanksAppDelegate_iPad.h */,
-                               499668E113692E2D006E8125 /* tanksAppDelegate_iPad.m */,
-                               499668E313692E2D006E8125 /* MainWindow_iPad.xib */,
-                       );
-                       name = iPad;
-                       sourceTree = "<group>";
-               };
-               499668F113692E2D006E8125 /* tanksTests */ = {
-                       isa = PBXGroup;
-                       children = (
-                               499668F813692E2D006E8125 /* tanksTests.h */,
-                               499668FA13692E2D006E8125 /* tanksTests.m */,
-                               499668F213692E2D006E8125 /* Supporting Files */,
-                       );
-                       path = tanksTests;
-                       sourceTree = "<group>";
-               };
-               499668F213692E2D006E8125 /* Supporting Files */ = {
-                       isa = PBXGroup;
-                       children = (
-                               499668F313692E2D006E8125 /* tanksTests-Info.plist */,
-                               499668F413692E2D006E8125 /* InfoPlist.strings */,
-                               499668F713692E2D006E8125 /* tanksTests-Prefix.pch */,
-                       );
-                       name = "Supporting Files";
-                       sourceTree = "<group>";
-               };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-               499668C113692E2D006E8125 /* tanks */ = {
-                       isa = PBXNativeTarget;
-                       buildConfigurationList = 499668FE13692E2D006E8125 /* Build configuration list for PBXNativeTarget "tanks" */;
-                       buildPhases = (
-                               499668BE13692E2D006E8125 /* Sources */,
-                               499668BF13692E2D006E8125 /* Frameworks */,
-                               499668C013692E2D006E8125 /* Resources */,
-                       );
-                       buildRules = (
-                       );
-                       dependencies = (
-                               49132ED11372482D00DFB46D /* PBXTargetDependency */,
-                       );
-                       name = tanks;
-                       productName = tanks;
-                       productReference = 499668C213692E2D006E8125 /* tanks.app */;
-                       productType = "com.apple.product-type.application";
-               };
-               499668EA13692E2D006E8125 /* tanksTests */ = {
-                       isa = PBXNativeTarget;
-                       buildConfigurationList = 4996690113692E2D006E8125 /* Build configuration list for PBXNativeTarget "tanksTests" */;
-                       buildPhases = (
-                               499668E613692E2D006E8125 /* Sources */,
-                               499668E713692E2D006E8125 /* Frameworks */,
-                               499668E813692E2D006E8125 /* Resources */,
-                               499668E913692E2D006E8125 /* ShellScript */,
-                       );
-                       buildRules = (
-                       );
-                       dependencies = (
-                               499668F013692E2D006E8125 /* PBXTargetDependency */,
-                       );
-                       name = tanksTests;
-                       productName = tanksTests;
-                       productReference = 499668EB13692E2D006E8125 /* tanksTests.octest */;
-                       productType = "com.apple.product-type.bundle";
-               };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-               499668B913692E2D006E8125 /* Project object */ = {
-                       isa = PBXProject;
-                       buildConfigurationList = 499668BC13692E2D006E8125 /* Build configuration list for PBXProject "tanks" */;
-                       compatibilityVersion = "Xcode 3.2";
-                       developmentRegion = English;
-                       hasScannedForEncodings = 0;
-                       knownRegions = (
-                               en,
-                       );
-                       mainGroup = 499668B713692E2D006E8125;
-                       productRefGroup = 499668C313692E2D006E8125 /* Products */;
-                       projectDirPath = "";
-                       projectReferences = (
-                               {
-                                       ProductGroup = 49132EC51372459300DFB46D /* Products */;
-                                       ProjectRef = 49132EC41372459300DFB46D /* Sparrow.xcodeproj */;
-                               },
-                       );
-                       projectRoot = "";
-                       targets = (
-                               499668C113692E2D006E8125 /* tanks */,
-                               499668EA13692E2D006E8125 /* tanksTests */,
-                       );
-               };
-/* End PBXProject section */
-
-/* Begin PBXReferenceProxy section */
-               49132ECD1372459400DFB46D /* libSparrow.a */ = {
-                       isa = PBXReferenceProxy;
-                       fileType = archive.ar;
-                       path = libSparrow.a;
-                       remoteRef = 49132ECC1372459400DFB46D /* PBXContainerItemProxy */;
-                       sourceTree = BUILT_PRODUCTS_DIR;
-               };
-               49132ECF1372459400DFB46D /* UnitTest.octest */ = {
-                       isa = PBXReferenceProxy;
-                       fileType = wrapper.cfbundle;
-                       path = UnitTest.octest;
-                       remoteRef = 49132ECE1372459400DFB46D /* PBXContainerItemProxy */;
-                       sourceTree = BUILT_PRODUCTS_DIR;
-               };
-/* End PBXReferenceProxy section */
-
-/* Begin PBXResourcesBuildPhase section */
-               499668C013692E2D006E8125 /* Resources */ = {
-                       isa = PBXResourcesBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               499668D113692E2D006E8125 /* InfoPlist.strings in Resources */,
-                               499668DE13692E2D006E8125 /* MainWindow_iPhone.xib in Resources */,
-                               499668E513692E2D006E8125 /* MainWindow_iPad.xib in Resources */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
-               499668E813692E2D006E8125 /* Resources */ = {
-                       isa = PBXResourcesBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               499668F613692E2D006E8125 /* InfoPlist.strings in Resources */,
-                               499668F913692E2D006E8125 /* tanksTests.h in Resources */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
-               499668E913692E2D006E8125 /* ShellScript */ = {
-                       isa = PBXShellScriptBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                       );
-                       inputPaths = (
-                       );
-                       outputPaths = (
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-                       shellPath = /bin/sh;
-                       shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n";
-               };
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-               499668BE13692E2D006E8125 /* Sources */ = {
-                       isa = PBXSourcesBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               499668D413692E2D006E8125 /* main.m in Sources */,
-                               499668D713692E2D006E8125 /* tanksAppDelegate.m in Sources */,
-                               499668DB13692E2D006E8125 /* tanksAppDelegate_iPhone.m in Sources */,
-                               499668E213692E2D006E8125 /* tanksAppDelegate_iPad.m in Sources */,
-                               4996691E13693180006E8125 /* Game.m in Sources */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
-               499668E613692E2D006E8125 /* Sources */ = {
-                       isa = PBXSourcesBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               499668FB13692E2D006E8125 /* tanksTests.m in Sources */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
-               49132ED11372482D00DFB46D /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       name = Sparrow;
-                       targetProxy = 49132ED01372482D00DFB46D /* PBXContainerItemProxy */;
-               };
-               499668F013692E2D006E8125 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = 499668C113692E2D006E8125 /* tanks */;
-                       targetProxy = 499668EF13692E2D006E8125 /* PBXContainerItemProxy */;
-               };
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
-               499668CF13692E2D006E8125 /* InfoPlist.strings */ = {
-                       isa = PBXVariantGroup;
-                       children = (
-                               499668D013692E2D006E8125 /* en */,
-                       );
-                       name = InfoPlist.strings;
-                       sourceTree = "<group>";
-               };
-               499668DC13692E2D006E8125 /* MainWindow_iPhone.xib */ = {
-                       isa = PBXVariantGroup;
-                       children = (
-                               499668DD13692E2D006E8125 /* en */,
-                       );
-                       name = MainWindow_iPhone.xib;
-                       sourceTree = "<group>";
-               };
-               499668E313692E2D006E8125 /* MainWindow_iPad.xib */ = {
-                       isa = PBXVariantGroup;
-                       children = (
-                               499668E413692E2D006E8125 /* en */,
-                       );
-                       name = MainWindow_iPad.xib;
-                       sourceTree = "<group>";
-               };
-               499668F413692E2D006E8125 /* InfoPlist.strings */ = {
-                       isa = PBXVariantGroup;
-                       children = (
-                               499668F513692E2D006E8125 /* en */,
-                       );
-                       name = InfoPlist.strings;
-                       sourceTree = "<group>";
-               };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
-               499668FC13692E2D006E8125 /* Debug */ = {
-                       isa = XCBuildConfiguration;
-                       buildSettings = {
-                               ARCHS = "$(ARCHS_STANDARD_32_BIT)";
-                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-                               GCC_C_LANGUAGE_STANDARD = gnu99;
-                               GCC_OPTIMIZATION_LEVEL = 0;
-                               GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
-                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvmgcc42;
-                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
-                               GCC_WARN_UNUSED_VARIABLE = YES;
-                               IPHONEOS_DEPLOYMENT_TARGET = 4.3;
-                               SDKROOT = iphoneos;
-                               TARGETED_DEVICE_FAMILY = "1,2";
-                       };
-                       name = Debug;
-               };
-               499668FD13692E2D006E8125 /* Release */ = {
-                       isa = XCBuildConfiguration;
-                       buildSettings = {
-                               ARCHS = "$(ARCHS_STANDARD_32_BIT)";
-                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-                               GCC_C_LANGUAGE_STANDARD = gnu99;
-                               GCC_VERSION = com.apple.compilers.llvmgcc42;
-                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
-                               GCC_WARN_UNUSED_VARIABLE = YES;
-                               IPHONEOS_DEPLOYMENT_TARGET = 4.3;
-                               OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
-                               SDKROOT = iphoneos;
-                               TARGETED_DEVICE_FAMILY = "1,2";
-                       };
-                       name = Release;
-               };
-               499668FF13692E2D006E8125 /* Debug */ = {
-                       isa = XCBuildConfiguration;
-                       buildSettings = {
-                               ALWAYS_SEARCH_USER_PATHS = YES;
-                               COPY_PHASE_STRIP = NO;
-                               GCC_DYNAMIC_NO_PIC = NO;
-                               GCC_PRECOMPILE_PREFIX_HEADER = YES;
-                               GCC_PREFIX_HEADER = "tanks/tanks-Prefix.pch";
-                               INFOPLIST_FILE = "tanks/tanks-Info.plist";
-                               LIBRARY_SEARCH_PATHS = (
-                                       "../libs/**",
-                                       "\"$(SRCROOT)\"",
-                               );
-                               OTHER_LDFLAGS = (
-                                       "-ObjC",
-                                       "-all_load",
-                               );
-                               PRODUCT_NAME = "$(TARGET_NAME)";
-                               USER_HEADER_SEARCH_PATHS = "../libs/**";
-                               WRAPPER_EXTENSION = app;
-                       };
-                       name = Debug;
-               };
-               4996690013692E2D006E8125 /* Release */ = {
-                       isa = XCBuildConfiguration;
-                       buildSettings = {
-                               ALWAYS_SEARCH_USER_PATHS = YES;
-                               COPY_PHASE_STRIP = YES;
-                               GCC_PRECOMPILE_PREFIX_HEADER = YES;
-                               GCC_PREFIX_HEADER = "tanks/tanks-Prefix.pch";
-                               INFOPLIST_FILE = "tanks/tanks-Info.plist";
-                               LIBRARY_SEARCH_PATHS = (
-                                       "../libs/**",
-                                       "\"$(SRCROOT)\"",
-                               );
-                               OTHER_LDFLAGS = (
-                                       "-ObjC",
-                                       "-all_load",
-                               );
-                               PRODUCT_NAME = "$(TARGET_NAME)";
-                               USER_HEADER_SEARCH_PATHS = "../libs/**";
-                               VALIDATE_PRODUCT = YES;
-                               WRAPPER_EXTENSION = app;
-                       };
-                       name = Release;
-               };
-               4996690213692E2D006E8125 /* Debug */ = {
-                       isa = XCBuildConfiguration;
-                       buildSettings = {
-                               ALWAYS_SEARCH_USER_PATHS = NO;
-                               BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/tanks.app/tanks";
-                               FRAMEWORK_SEARCH_PATHS = (
-                                       "$(SDKROOT)/Developer/Library/Frameworks",
-                                       "$(DEVELOPER_LIBRARY_DIR)/Frameworks",
-                               );
-                               GCC_PRECOMPILE_PREFIX_HEADER = YES;
-                               GCC_PREFIX_HEADER = "tanksTests/tanksTests-Prefix.pch";
-                               INFOPLIST_FILE = "tanksTests/tanksTests-Info.plist";
-                               OTHER_LDFLAGS = (
-                                       "-framework",
-                                       SenTestingKit,
-                               );
-                               PRODUCT_NAME = "$(TARGET_NAME)";
-                               TEST_HOST = "$(BUNDLE_LOADER)";
-                               WRAPPER_EXTENSION = octest;
-                       };
-                       name = Debug;
-               };
-               4996690313692E2D006E8125 /* Release */ = {
-                       isa = XCBuildConfiguration;
-                       buildSettings = {
-                               ALWAYS_SEARCH_USER_PATHS = NO;
-                               BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/tanks.app/tanks";
-                               FRAMEWORK_SEARCH_PATHS = (
-                                       "$(SDKROOT)/Developer/Library/Frameworks",
-                                       "$(DEVELOPER_LIBRARY_DIR)/Frameworks",
-                               );
-                               GCC_PRECOMPILE_PREFIX_HEADER = YES;
-                               GCC_PREFIX_HEADER = "tanksTests/tanksTests-Prefix.pch";
-                               INFOPLIST_FILE = "tanksTests/tanksTests-Info.plist";
-                               OTHER_LDFLAGS = (
-                                       "-framework",
-                                       SenTestingKit,
-                               );
-                               PRODUCT_NAME = "$(TARGET_NAME)";
-                               TEST_HOST = "$(BUNDLE_LOADER)";
-                               WRAPPER_EXTENSION = octest;
-                       };
-                       name = Release;
-               };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-               499668BC13692E2D006E8125 /* Build configuration list for PBXProject "tanks" */ = {
-                       isa = XCConfigurationList;
-                       buildConfigurations = (
-                               499668FC13692E2D006E8125 /* Debug */,
-                               499668FD13692E2D006E8125 /* Release */,
-                       );
-                       defaultConfigurationIsVisible = 0;
-                       defaultConfigurationName = Release;
-               };
-               499668FE13692E2D006E8125 /* Build configuration list for PBXNativeTarget "tanks" */ = {
-                       isa = XCConfigurationList;
-                       buildConfigurations = (
-                               499668FF13692E2D006E8125 /* Debug */,
-                               4996690013692E2D006E8125 /* Release */,
-                       );
-                       defaultConfigurationIsVisible = 0;
-                       defaultConfigurationName = Release;
-               };
-               4996690113692E2D006E8125 /* Build configuration list for PBXNativeTarget "tanksTests" */ = {
-                       isa = XCConfigurationList;
-                       buildConfigurations = (
-                               4996690213692E2D006E8125 /* Debug */,
-                               4996690313692E2D006E8125 /* Release */,
-                       );
-                       defaultConfigurationIsVisible = 0;
-                       defaultConfigurationName = Release;
-               };
-/* End XCConfigurationList section */
-       };
-       rootObject = 499668B913692E2D006E8125 /* Project object */;
-}
diff --git a/tanks/tanksTests/en.lproj/InfoPlist.strings b/tanks/tanksTests/en.lproj/InfoPlist.strings
deleted file mode 100644 (file)
index 477b28f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Localized versions of Info.plist keys */
-
diff --git a/tanks/tanksTests/tanksTests-Info.plist b/tanks/tanksTests/tanksTests-Info.plist
deleted file mode 100644 (file)
index 70dcf58..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?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>en</string>
-       <key>CFBundleExecutable</key>
-       <string>${EXECUTABLE_NAME}</string>
-       <key>CFBundleIdentifier</key>
-       <string>com.lttlst.${PRODUCT_NAME:rfc1034identifier}</string>
-       <key>CFBundleInfoDictionaryVersion</key>
-       <string>6.0</string>
-       <key>CFBundlePackageType</key>
-       <string>BNDL</string>
-       <key>CFBundleShortVersionString</key>
-       <string>1.0</string>
-       <key>CFBundleSignature</key>
-       <string>????</string>
-       <key>CFBundleVersion</key>
-       <string>1</string>
-</dict>
-</plist>
diff --git a/tanks/tanksTests/tanksTests-Prefix.pch b/tanks/tanksTests/tanksTests-Prefix.pch
deleted file mode 100644 (file)
index 7d7ac2d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-//
-// Prefix header for all source files of the 'tanksTests' target in the 'tanksTests' project
-//
-
-#ifdef __OBJC__
-    #import <UIKit/UIKit.h>
-#endif
diff --git a/tanks/tanksTests/tanksTests.h b/tanks/tanksTests/tanksTests.h
deleted file mode 100644 (file)
index ebedaa0..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-//  tanksTests.h
-//  tanksTests
-//
-//  Created by dsc on 4/27/11.
-//  Copyright 2011 lttlst.com. All rights reserved.
-//
-
-#import <SenTestingKit/SenTestingKit.h>
-
-
-@interface tanksTests : SenTestCase {
-@private
-    
-}
-
-@end
diff --git a/tanks/tanksTests/tanksTests.m b/tanks/tanksTests/tanksTests.m
deleted file mode 100644 (file)
index 0c499a3..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-//  tanksTests.m
-//  tanksTests
-//
-//  Created by dsc on 4/27/11.
-//  Copyright 2011 __MyCompanyName__. All rights reserved.
-//
-
-#import "tanksTests.h"
-
-
-@implementation tanksTests
-
-- (void)setUp
-{
-    [super setUp];
-    
-    // Set-up code here.
-}
-
-- (void)tearDown
-{
-    // Tear-down code here.
-    
-    [super tearDown];
-}
-
-- (void)testExample
-{
-    STFail(@"Unit tests are not implemented yet in tanksTests");
-}
-
-@end