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 /*&n