Przeglądaj źródła

Merge pull request #16 from bslack/next

Next
Sean Paul Taylor 14 lat temu
rodzic
commit
e2633e3202

+ 560 - 45
gameplay/gameplay.xcodeproj/project.pbxproj

@@ -19,7 +19,6 @@
 		4283909A1489D6E800E2B2F5 /* SceneLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 428390981489D6E800E2B2F5 /* SceneLoader.h */; };
 		4283909A1489D6E800E2B2F5 /* SceneLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 428390981489D6E800E2B2F5 /* SceneLoader.h */; };
 		4299EFA9146AC94300FF4A73 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4299EFA8146AC94300FF4A73 /* OpenGL.framework */; };
 		4299EFA9146AC94300FF4A73 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4299EFA8146AC94300FF4A73 /* OpenGL.framework */; };
 		4299EFAB146AC94B00FF4A73 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4299EFAA146AC94B00FF4A73 /* OpenAL.framework */; };
 		4299EFAB146AC94B00FF4A73 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4299EFAA146AC94B00FF4A73 /* OpenAL.framework */; };
-		42CCD554146EC1DD00353661 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CCD553146EC1DD00353661 /* libz.dylib */; };
 		42CCD556146EC1EB00353661 /* libpng.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CCD555146EC1EB00353661 /* libpng.a */; };
 		42CCD556146EC1EB00353661 /* libpng.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CCD555146EC1EB00353661 /* libpng.a */; };
 		42CD0DAB147D8EA80000361E /* libbullet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CD0DA6147D8EA80000361E /* libbullet.a */; };
 		42CD0DAB147D8EA80000361E /* libbullet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CD0DA6147D8EA80000361E /* libbullet.a */; };
 		42CD0DAC147D8EA80000361E /* libogg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CD0DA7147D8EA80000361E /* libogg.a */; };
 		42CD0DAC147D8EA80000361E /* libogg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CD0DA7147D8EA80000361E /* libogg.a */; };
@@ -70,8 +69,6 @@
 		42CD0E6F147D8FF60000361E /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DDC147D8FF50000361E /* Game.cpp */; };
 		42CD0E6F147D8FF60000361E /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DDC147D8FF50000361E /* Game.cpp */; };
 		42CD0E70147D8FF60000361E /* Game.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DDD147D8FF50000361E /* Game.h */; };
 		42CD0E70147D8FF60000361E /* Game.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DDD147D8FF50000361E /* Game.h */; };
 		42CD0E71147D8FF60000361E /* gameplay-main-macos.mm in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DDE147D8FF50000361E /* gameplay-main-macos.mm */; };
 		42CD0E71147D8FF60000361E /* gameplay-main-macos.mm in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DDE147D8FF50000361E /* gameplay-main-macos.mm */; };
-		42CD0E72147D8FF60000361E /* gameplay-main-qnx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DDF147D8FF50000361E /* gameplay-main-qnx.cpp */; };
-		42CD0E73147D8FF60000361E /* gameplay-main-win32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DE0147D8FF50000361E /* gameplay-main-win32.cpp */; };
 		42CD0E74147D8FF60000361E /* gameplay.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DE1147D8FF50000361E /* gameplay.h */; };
 		42CD0E74147D8FF60000361E /* gameplay.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DE1147D8FF50000361E /* gameplay.h */; };
 		42CD0E77147D8FF60000361E /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DE4147D8FF50000361E /* Joint.cpp */; };
 		42CD0E77147D8FF60000361E /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DE4147D8FF50000361E /* Joint.cpp */; };
 		42CD0E78147D8FF60000361E /* Joint.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DE5147D8FF50000361E /* Joint.h */; };
 		42CD0E78147D8FF60000361E /* Joint.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DE5147D8FF50000361E /* Joint.h */; };
@@ -121,8 +118,6 @@
 		42CD0EA4147D8FF60000361E /* Plane.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E17147D8FF50000361E /* Plane.h */; };
 		42CD0EA4147D8FF60000361E /* Plane.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E17147D8FF50000361E /* Plane.h */; };
 		42CD0EA5147D8FF60000361E /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E19147D8FF50000361E /* Platform.h */; };
 		42CD0EA5147D8FF60000361E /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E19147D8FF50000361E /* Platform.h */; };
 		42CD0EA6147D8FF60000361E /* PlatformMacOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E1A147D8FF50000361E /* PlatformMacOS.mm */; };
 		42CD0EA6147D8FF60000361E /* PlatformMacOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E1A147D8FF50000361E /* PlatformMacOS.mm */; };
-		42CD0EA7147D8FF60000361E /* PlatformQNX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E1B147D8FF50000361E /* PlatformQNX.cpp */; };
-		42CD0EA8147D8FF60000361E /* PlatformWin32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E1C147D8FF50000361E /* PlatformWin32.cpp */; };
 		42CD0EA9147D8FF60000361E /* Properties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E1D147D8FF50000361E /* Properties.cpp */; };
 		42CD0EA9147D8FF60000361E /* Properties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E1D147D8FF50000361E /* Properties.cpp */; };
 		42CD0EAA147D8FF60000361E /* Properties.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E1E147D8FF50000361E /* Properties.h */; };
 		42CD0EAA147D8FF60000361E /* Properties.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E1E147D8FF50000361E /* Properties.h */; };
 		42CD0EAB147D8FF60000361E /* Quaternion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E1F147D8FF50000361E /* Quaternion.cpp */; };
 		42CD0EAB147D8FF60000361E /* Quaternion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E1F147D8FF50000361E /* Quaternion.cpp */; };
@@ -159,6 +154,156 @@
 		42CD0ECA147D8FF60000361E /* VertexFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E43147D8FF50000361E /* VertexFormat.h */; };
 		42CD0ECA147D8FF60000361E /* VertexFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E43147D8FF50000361E /* VertexFormat.h */; };
 		42CD0ECB147D8FF60000361E /* Viewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E44147D8FF50000361E /* Viewport.cpp */; };
 		42CD0ECB147D8FF60000361E /* Viewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E44147D8FF50000361E /* Viewport.cpp */; };
 		42CD0ECC147D8FF60000361E /* Viewport.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E45147D8FF50000361E /* Viewport.h */; };
 		42CD0ECC147D8FF60000361E /* Viewport.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E45147D8FF50000361E /* Viewport.h */; };
+		5B04C52D14BFCFE100EB0071 /* Animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DB1147D8FF50000361E /* Animation.cpp */; };
+		5B04C52E14BFCFE100EB0071 /* AnimationClip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DB3147D8FF50000361E /* AnimationClip.cpp */; };
+		5B04C52F14BFCFE100EB0071 /* AnimationController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DB5147D8FF50000361E /* AnimationController.cpp */; };
+		5B04C53014BFCFE100EB0071 /* AnimationTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DB7147D8FF50000361E /* AnimationTarget.cpp */; };
+		5B04C53114BFCFE100EB0071 /* AnimationValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DB9147D8FF50000361E /* AnimationValue.cpp */; };
+		5B04C53214BFCFE100EB0071 /* AudioBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DBB147D8FF50000361E /* AudioBuffer.cpp */; };
+		5B04C53314BFCFE100EB0071 /* AudioController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DBD147D8FF50000361E /* AudioController.cpp */; };
+		5B04C53414BFCFE100EB0071 /* AudioListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DBF147D8FF50000361E /* AudioListener.cpp */; };
+		5B04C53514BFCFE100EB0071 /* AudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DC1147D8FF50000361E /* AudioSource.cpp */; };
+		5B04C53614BFCFE100EB0071 /* BoundingBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DC4147D8FF50000361E /* BoundingBox.cpp */; };
+		5B04C53714BFCFE100EB0071 /* BoundingSphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DC7147D8FF50000361E /* BoundingSphere.cpp */; };
+		5B04C53814BFCFE100EB0071 /* Camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DCA147D8FF50000361E /* Camera.cpp */; };
+		5B04C53914BFCFE100EB0071 /* Curve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DCC147D8FF50000361E /* Curve.cpp */; };
+		5B04C53A14BFCFE100EB0071 /* DebugNew.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DCE147D8FF50000361E /* DebugNew.cpp */; };
+		5B04C53B14BFCFE100EB0071 /* DepthStencilTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DD0147D8FF50000361E /* DepthStencilTarget.cpp */; };
+		5B04C53C14BFCFE100EB0071 /* Effect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DD2147D8FF50000361E /* Effect.cpp */; };
+		5B04C53D14BFCFE100EB0071 /* FileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DD4147D8FF50000361E /* FileSystem.cpp */; };
+		5B04C53E14BFCFE100EB0071 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DD6147D8FF50000361E /* Font.cpp */; };
+		5B04C53F14BFCFE100EB0071 /* FrameBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DD8147D8FF50000361E /* FrameBuffer.cpp */; };
+		5B04C54014BFCFE100EB0071 /* Frustum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DDA147D8FF50000361E /* Frustum.cpp */; };
+		5B04C54114BFCFE100EB0071 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DDC147D8FF50000361E /* Game.cpp */; };
+		5B04C54514BFCFE100EB0071 /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DE4147D8FF50000361E /* Joint.cpp */; };
+		5B04C54614BFCFE100EB0071 /* Light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DE6147D8FF50000361E /* Light.cpp */; };
+		5B04C54714BFCFE100EB0071 /* Material.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DE8147D8FF50000361E /* Material.cpp */; };
+		5B04C54814BFCFE100EB0071 /* MaterialParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DEA147D8FF50000361E /* MaterialParameter.cpp */; };
+		5B04C54914BFCFE100EB0071 /* Matrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DEC147D8FF50000361E /* Matrix.cpp */; };
+		5B04C54A14BFCFE100EB0071 /* Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DEF147D8FF50000361E /* Mesh.cpp */; };
+		5B04C54B14BFCFE100EB0071 /* MeshPart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DF1147D8FF50000361E /* MeshPart.cpp */; };
+		5B04C54C14BFCFE100EB0071 /* MeshSkin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DF3147D8FF50000361E /* MeshSkin.cpp */; };
+		5B04C54D14BFCFE100EB0071 /* Model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DF5147D8FF50000361E /* Model.cpp */; };
+		5B04C54E14BFCFE100EB0071 /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DF7147D8FF50000361E /* Node.cpp */; };
+		5B04C54F14BFCFE100EB0071 /* Package.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DF9147D8FF50000361E /* Package.cpp */; };
+		5B04C55014BFCFE100EB0071 /* ParticleEmitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DFB147D8FF50000361E /* ParticleEmitter.cpp */; };
+		5B04C55114BFCFE100EB0071 /* Pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DFD147D8FF50000361E /* Pass.cpp */; };
+		5B04C55214BFCFE100EB0071 /* PhysicsConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0DFF147D8FF50000361E /* PhysicsConstraint.cpp */; };
+		5B04C55314BFCFE100EB0071 /* PhysicsController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E02147D8FF50000361E /* PhysicsController.cpp */; };
+		5B04C55414BFCFE100EB0071 /* PhysicsFixedConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E04147D8FF50000361E /* PhysicsFixedConstraint.cpp */; };
+		5B04C55514BFCFE100EB0071 /* PhysicsGenericConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E07147D8FF50000361E /* PhysicsGenericConstraint.cpp */; };
+		5B04C55614BFCFE100EB0071 /* PhysicsHingeConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E0A147D8FF50000361E /* PhysicsHingeConstraint.cpp */; };
+		5B04C55714BFCFE100EB0071 /* PhysicsMotionState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E0C147D8FF50000361E /* PhysicsMotionState.cpp */; };
+		5B04C55814BFCFE100EB0071 /* PhysicsRigidBody.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E0E147D8FF50000361E /* PhysicsRigidBody.cpp */; };
+		5B04C55914BFCFE100EB0071 /* PhysicsSocketConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E11147D8FF50000361E /* PhysicsSocketConstraint.cpp */; };
+		5B04C55A14BFCFE100EB0071 /* PhysicsSpringConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E13147D8FF50000361E /* PhysicsSpringConstraint.cpp */; };
+		5B04C55B14BFCFE100EB0071 /* Plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E16147D8FF50000361E /* Plane.cpp */; };
+		5B04C55F14BFCFE100EB0071 /* Properties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E1D147D8FF50000361E /* Properties.cpp */; };
+		5B04C56014BFCFE100EB0071 /* Quaternion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E1F147D8FF50000361E /* Quaternion.cpp */; };
+		5B04C56114BFCFE100EB0071 /* Ray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E22147D8FF50000361E /* Ray.cpp */; };
+		5B04C56214BFCFE100EB0071 /* Rectangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E25147D8FF50000361E /* Rectangle.cpp */; };
+		5B04C56314BFCFE100EB0071 /* Ref.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E27147D8FF50000361E /* Ref.cpp */; };
+		5B04C56414BFCFE100EB0071 /* RenderState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E29147D8FF50000361E /* RenderState.cpp */; };
+		5B04C56514BFCFE100EB0071 /* RenderTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E2B147D8FF50000361E /* RenderTarget.cpp */; };
+		5B04C56614BFCFE100EB0071 /* Scene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E2D147D8FF50000361E /* Scene.cpp */; };
+		5B04C56714BFCFE100EB0071 /* SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E2F147D8FF50000361E /* SpriteBatch.cpp */; };
+		5B04C56814BFCFE100EB0071 /* Technique.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E31147D8FF50000361E /* Technique.cpp */; };
+		5B04C56914BFCFE100EB0071 /* Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E33147D8FF50000361E /* Texture.cpp */; };
+		5B04C56A14BFCFE100EB0071 /* Transform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E35147D8FF50000361E /* Transform.cpp */; };
+		5B04C56B14BFCFE100EB0071 /* Vector2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E37147D8FF50000361E /* Vector2.cpp */; };
+		5B04C56C14BFCFE100EB0071 /* Vector3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E3A147D8FF50000361E /* Vector3.cpp */; };
+		5B04C56D14BFCFE100EB0071 /* Vector4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E3D147D8FF50000361E /* Vector4.cpp */; };
+		5B04C56E14BFCFE100EB0071 /* VertexAttributeBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E40147D8FF50000361E /* VertexAttributeBinding.cpp */; };
+		5B04C56F14BFCFE100EB0071 /* VertexFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E42147D8FF50000361E /* VertexFormat.cpp */; };
+		5B04C57014BFCFE100EB0071 /* Viewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CD0E44147D8FF50000361E /* Viewport.cpp */; };
+		5B04C57114BFCFE100EB0071 /* SceneLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 428390971489D6E800E2B2F5 /* SceneLoader.cpp */; };
+		5B04C57214BFCFE100EB0071 /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4208DEE614A4079F00D3C511 /* Image.cpp */; };
+		5B04C57314BFCFE100EB0071 /* MeshBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4201818D14A41B18008C3F56 /* MeshBatch.cpp */; };
+		5B04C57514BFCFE100EB0071 /* libbullet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CD0DA6147D8EA80000361E /* libbullet.a */; };
+		5B04C57614BFCFE100EB0071 /* libogg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CD0DA7147D8EA80000361E /* libogg.a */; };
+		5B04C57714BFCFE100EB0071 /* libvorbis.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CD0DA8147D8EA80000361E /* libvorbis.a */; };
+		5B04C57814BFCFE100EB0071 /* libvorbisenc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CD0DA9147D8EA80000361E /* libvorbisenc.a */; };
+		5B04C57914BFCFE100EB0071 /* libvorbisfile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CD0DAA147D8EA80000361E /* libvorbisfile.a */; };
+		5B04C57A14BFCFE100EB0071 /* libpng.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CCD555146EC1EB00353661 /* libpng.a */; };
+		5B04C58114BFCFE100EB0071 /* Animation.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DB2147D8FF50000361E /* Animation.h */; };
+		5B04C58214BFCFE100EB0071 /* AnimationClip.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DB4147D8FF50000361E /* AnimationClip.h */; };
+		5B04C58314BFCFE100EB0071 /* AnimationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DB6147D8FF50000361E /* AnimationController.h */; };
+		5B04C58414BFCFE100EB0071 /* AnimationTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DB8147D8FF50000361E /* AnimationTarget.h */; };
+		5B04C58514BFCFE100EB0071 /* AnimationValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DBA147D8FF50000361E /* AnimationValue.h */; };
+		5B04C58614BFCFE100EB0071 /* AudioBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DBC147D8FF50000361E /* AudioBuffer.h */; };
+		5B04C58714BFCFE100EB0071 /* AudioController.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DBE147D8FF50000361E /* AudioController.h */; };
+		5B04C58814BFCFE100EB0071 /* AudioListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DC0147D8FF50000361E /* AudioListener.h */; };
+		5B04C58914BFCFE100EB0071 /* AudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DC2147D8FF50000361E /* AudioSource.h */; };
+		5B04C58A14BFCFE100EB0071 /* Base.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DC3147D8FF50000361E /* Base.h */; };
+		5B04C58B14BFCFE100EB0071 /* BoundingBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DC5147D8FF50000361E /* BoundingBox.h */; };
+		5B04C58C14BFCFE100EB0071 /* BoundingSphere.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DC8147D8FF50000361E /* BoundingSphere.h */; };
+		5B04C58D14BFCFE100EB0071 /* Camera.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DCB147D8FF50000361E /* Camera.h */; };
+		5B04C58E14BFCFE100EB0071 /* Curve.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DCD147D8FF50000361E /* Curve.h */; };
+		5B04C58F14BFCFE100EB0071 /* DebugNew.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DCF147D8FF50000361E /* DebugNew.h */; };
+		5B04C59014BFCFE100EB0071 /* DepthStencilTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DD1147D8FF50000361E /* DepthStencilTarget.h */; };
+		5B04C59114BFCFE100EB0071 /* Effect.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DD3147D8FF50000361E /* Effect.h */; };
+		5B04C59214BFCFE100EB0071 /* FileSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DD5147D8FF50000361E /* FileSystem.h */; };
+		5B04C59314BFCFE100EB0071 /* Font.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DD7147D8FF50000361E /* Font.h */; };
+		5B04C59414BFCFE100EB0071 /* FrameBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DD9147D8FF50000361E /* FrameBuffer.h */; };
+		5B04C59514BFCFE100EB0071 /* Frustum.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DDB147D8FF50000361E /* Frustum.h */; };
+		5B04C59614BFCFE100EB0071 /* Game.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DDD147D8FF50000361E /* Game.h */; };
+		5B04C59714BFCFE100EB0071 /* gameplay.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DE1147D8FF50000361E /* gameplay.h */; };
+		5B04C59814BFCFE100EB0071 /* Joint.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DE5147D8FF50000361E /* Joint.h */; };
+		5B04C59914BFCFE100EB0071 /* Light.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DE7147D8FF50000361E /* Light.h */; };
+		5B04C59A14BFCFE100EB0071 /* Material.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DE9147D8FF50000361E /* Material.h */; };
+		5B04C59B14BFCFE100EB0071 /* MaterialParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DEB147D8FF50000361E /* MaterialParameter.h */; };
+		5B04C59C14BFCFE100EB0071 /* Matrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DED147D8FF50000361E /* Matrix.h */; };
+		5B04C59D14BFCFE100EB0071 /* Mesh.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DF0147D8FF50000361E /* Mesh.h */; };
+		5B04C59E14BFCFE100EB0071 /* MeshPart.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DF2147D8FF50000361E /* MeshPart.h */; };
+		5B04C59F14BFCFE100EB0071 /* MeshSkin.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DF4147D8FF50000361E /* MeshSkin.h */; };
+		5B04C5A014BFCFE100EB0071 /* Model.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DF6147D8FF50000361E /* Model.h */; };
+		5B04C5A114BFCFE100EB0071 /* Node.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DF8147D8FF50000361E /* Node.h */; };
+		5B04C5A214BFCFE100EB0071 /* Package.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DFA147D8FF50000361E /* Package.h */; };
+		5B04C5A314BFCFE100EB0071 /* ParticleEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DFC147D8FF50000361E /* ParticleEmitter.h */; };
+		5B04C5A414BFCFE100EB0071 /* Pass.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0DFE147D8FF50000361E /* Pass.h */; };
+		5B04C5A514BFCFE100EB0071 /* PhysicsConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E00147D8FF50000361E /* PhysicsConstraint.h */; };
+		5B04C5A614BFCFE100EB0071 /* PhysicsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E03147D8FF50000361E /* PhysicsController.h */; };
+		5B04C5A714BFCFE100EB0071 /* PhysicsFixedConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E05147D8FF50000361E /* PhysicsFixedConstraint.h */; };
+		5B04C5A814BFCFE100EB0071 /* PhysicsGenericConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E08147D8FF50000361E /* PhysicsGenericConstraint.h */; };
+		5B04C5A914BFCFE100EB0071 /* PhysicsHingeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E0B147D8FF50000361E /* PhysicsHingeConstraint.h */; };
+		5B04C5AA14BFCFE100EB0071 /* PhysicsMotionState.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E0D147D8FF50000361E /* PhysicsMotionState.h */; };
+		5B04C5AB14BFCFE100EB0071 /* PhysicsRigidBody.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E0F147D8FF50000361E /* PhysicsRigidBody.h */; };
+		5B04C5AC14BFCFE100EB0071 /* PhysicsSocketConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E12147D8FF50000361E /* PhysicsSocketConstraint.h */; };
+		5B04C5AD14BFCFE100EB0071 /* PhysicsSpringConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E14147D8FF50000361E /* PhysicsSpringConstraint.h */; };
+		5B04C5AE14BFCFE100EB0071 /* Plane.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E17147D8FF50000361E /* Plane.h */; };
+		5B04C5AF14BFCFE100EB0071 /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E19147D8FF50000361E /* Platform.h */; };
+		5B04C5B014BFCFE100EB0071 /* Properties.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E1E147D8FF50000361E /* Properties.h */; };
+		5B04C5B114BFCFE100EB0071 /* Quaternion.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E20147D8FF50000361E /* Quaternion.h */; };
+		5B04C5B214BFCFE100EB0071 /* Ray.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E23147D8FF50000361E /* Ray.h */; };
+		5B04C5B314BFCFE100EB0071 /* Rectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E26147D8FF50000361E /* Rectangle.h */; };
+		5B04C5B414BFCFE100EB0071 /* Ref.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E28147D8FF50000361E /* Ref.h */; };
+		5B04C5B514BFCFE100EB0071 /* RenderState.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E2A147D8FF50000361E /* RenderState.h */; };
+		5B04C5B614BFCFE100EB0071 /* RenderTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E2C147D8FF50000361E /* RenderTarget.h */; };
+		5B04C5B714BFCFE100EB0071 /* Scene.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E2E147D8FF50000361E /* Scene.h */; };
+		5B04C5B814BFCFE100EB0071 /* SpriteBatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E30147D8FF50000361E /* SpriteBatch.h */; };
+		5B04C5B914BFCFE100EB0071 /* Technique.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E32147D8FF50000361E /* Technique.h */; };
+		5B04C5BA14BFCFE100EB0071 /* Texture.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E34147D8FF50000361E /* Texture.h */; };
+		5B04C5BB14BFCFE100EB0071 /* Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E36147D8FF50000361E /* Transform.h */; };
+		5B04C5BC14BFCFE100EB0071 /* Vector2.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E38147D8FF50000361E /* Vector2.h */; };
+		5B04C5BD14BFCFE100EB0071 /* Vector3.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E3B147D8FF50000361E /* Vector3.h */; };
+		5B04C5BE14BFCFE100EB0071 /* Vector4.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E3E147D8FF50000361E /* Vector4.h */; };
+		5B04C5BF14BFCFE100EB0071 /* VertexAttributeBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E41147D8FF50000361E /* VertexAttributeBinding.h */; };
+		5B04C5C014BFCFE100EB0071 /* VertexFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E43147D8FF50000361E /* VertexFormat.h */; };
+		5B04C5C114BFCFE100EB0071 /* Viewport.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CD0E45147D8FF50000361E /* Viewport.h */; };
+		5B04C5C214BFCFE100EB0071 /* SceneLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 428390981489D6E800E2B2F5 /* SceneLoader.h */; };
+		5B04C5C314BFCFE100EB0071 /* Image.h in Headers */ = {isa = PBXBuildFile; fileRef = 4208DEE714A4079F00D3C511 /* Image.h */; };
+		5B04C5C414BFCFE100EB0071 /* Keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 4208DEEB14A407B900D3C511 /* Keyboard.h */; };
+		5B04C5C514BFCFE100EB0071 /* Touch.h in Headers */ = {isa = PBXBuildFile; fileRef = 4208DEED14A407D500D3C511 /* Touch.h */; };
+		5B04C5C614BFCFE100EB0071 /* MeshBatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 4201818E14A41B18008C3F56 /* MeshBatch.h */; };
+		5B04C5CD14BFD48500EB0071 /* gameplay-main-ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5B04C5CB14BFD48500EB0071 /* gameplay-main-ios.mm */; };
+		5B04C5CE14BFD48500EB0071 /* PlatformiOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5B04C5CC14BFD48500EB0071 /* PlatformiOS.mm */; };
+		5B04C5F614BFE50100EB0071 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B04C5F514BFE50100EB0071 /* UIKit.framework */; };
+		5B04C5F814BFE50B00EB0071 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B04C5F714BFE50B00EB0071 /* QuartzCore.framework */; };
+		5B04C5FA14BFE51100EB0071 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B04C5F914BFE51000EB0071 /* OpenGLES.framework */; };
+		5B04C5FC14BFE51600EB0071 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B04C5FB14BFE51600EB0071 /* OpenAL.framework */; };
+		5B5ADCE314C22DF900AC6109 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B5ADCE214C22DF900AC6109 /* libz.dylib */; };
+		5B5ADCE514C22E1F00AC6109 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B5ADCE414C22E1F00AC6109 /* libz.dylib */; };
+		5B5ADD2F14C2439700AC6109 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B5ADD2E14C2439700AC6109 /* Foundation.framework */; };
 /* End PBXBuildFile section */
 /* End PBXBuildFile section */
 
 
 /* Begin PBXFileReference section */
 /* Begin PBXFileReference section */
@@ -179,7 +324,6 @@
 		4299EFA8146AC94300FF4A73 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = SDKs/MacOSX10.7.sdk/System/Library/Frameworks/OpenGL.framework; sourceTree = DEVELOPER_DIR; };
 		4299EFA8146AC94300FF4A73 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = SDKs/MacOSX10.7.sdk/System/Library/Frameworks/OpenGL.framework; sourceTree = DEVELOPER_DIR; };
 		4299EFAA146AC94B00FF4A73 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = SDKs/MacOSX10.7.sdk/System/Library/Frameworks/OpenAL.framework; sourceTree = DEVELOPER_DIR; };
 		4299EFAA146AC94B00FF4A73 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = SDKs/MacOSX10.7.sdk/System/Library/Frameworks/OpenAL.framework; sourceTree = DEVELOPER_DIR; };
 		42C932AF14919FD10098216A /* Game.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Game.inl; path = src/Game.inl; sourceTree = SOURCE_ROOT; };
 		42C932AF14919FD10098216A /* Game.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Game.inl; path = src/Game.inl; sourceTree = SOURCE_ROOT; };
-		42CCD553146EC1DD00353661 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = SDKs/MacOSX10.7.sdk/usr/lib/libz.dylib; sourceTree = DEVELOPER_DIR; };
 		42CCD555146EC1EB00353661 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = "../external-deps/libpng/lib/macos/libpng.a"; sourceTree = "<group>"; };
 		42CCD555146EC1EB00353661 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = "../external-deps/libpng/lib/macos/libpng.a"; sourceTree = "<group>"; };
 		42CD0DA6147D8EA80000361E /* libbullet.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libbullet.a; path = "../external-deps/bullet/lib/macos/libbullet.a"; sourceTree = "<group>"; };
 		42CD0DA6147D8EA80000361E /* libbullet.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libbullet.a; path = "../external-deps/bullet/lib/macos/libbullet.a"; sourceTree = "<group>"; };
 		42CD0DA7147D8EA80000361E /* libogg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libogg.a; path = "../external-deps/oggvorbis/lib/macos/libogg.a"; sourceTree = "<group>"; };
 		42CD0DA7147D8EA80000361E /* libogg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libogg.a; path = "../external-deps/oggvorbis/lib/macos/libogg.a"; sourceTree = "<group>"; };
@@ -333,6 +477,23 @@
 		42CD0E43147D8FF50000361E /* VertexFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VertexFormat.h; path = src/VertexFormat.h; sourceTree = SOURCE_ROOT; };
 		42CD0E43147D8FF50000361E /* VertexFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VertexFormat.h; path = src/VertexFormat.h; sourceTree = SOURCE_ROOT; };
 		42CD0E44147D8FF50000361E /* Viewport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Viewport.cpp; path = src/Viewport.cpp; sourceTree = SOURCE_ROOT; };
 		42CD0E44147D8FF50000361E /* Viewport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Viewport.cpp; path = src/Viewport.cpp; sourceTree = SOURCE_ROOT; };
 		42CD0E45147D8FF50000361E /* Viewport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Viewport.h; path = src/Viewport.h; sourceTree = SOURCE_ROOT; };
 		42CD0E45147D8FF50000361E /* Viewport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Viewport.h; path = src/Viewport.h; sourceTree = SOURCE_ROOT; };
+		5B04C5CA14BFCFE100EB0071 /* libgameplay.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgameplay.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		5B04C5CB14BFD48500EB0071 /* gameplay-main-ios.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "gameplay-main-ios.mm"; path = "src/gameplay-main-ios.mm"; sourceTree = SOURCE_ROOT; };
+		5B04C5CC14BFD48500EB0071 /* PlatformiOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = PlatformiOS.mm; path = src/PlatformiOS.mm; sourceTree = SOURCE_ROOT; };
+		5B04C5F514BFE50100EB0071 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
+		5B04C5F714BFE50B00EB0071 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; };
+		5B04C5F914BFE51000EB0071 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; };
+		5B04C5FB14BFE51600EB0071 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/OpenAL.framework; sourceTree = DEVELOPER_DIR; };
+		5B43D17914C3497B008A5D9D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; };
+		5B5ADCE214C22DF900AC6109 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = SDKs/MacOSX10.7.sdk/usr/lib/libz.dylib; sourceTree = DEVELOPER_DIR; };
+		5B5ADCE414C22E1F00AC6109 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/libz.dylib; sourceTree = DEVELOPER_DIR; };
+		5B5ADD2E14C2439700AC6109 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
+		5B5DB92D14C25B7B007755DB /* libbullet.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libbullet.a; path = "../external-deps/bullet/lib/ios/i386/libbullet.a"; sourceTree = "<group>"; };
+		5B5DB92F14C25B94007755DB /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = "../external-deps/libpng/lib/ios/armv7/libpng.a"; sourceTree = "<group>"; };
+		5B5DB93114C25BA5007755DB /* libogg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libogg.a; path = "../external-deps/oggvorbis/lib/ios/armv7/libogg.a"; sourceTree = "<group>"; };
+		5B5DB93214C25BA5007755DB /* libvorbis.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libvorbis.a; path = "../external-deps/oggvorbis/lib/ios/armv7/libvorbis.a"; sourceTree = "<group>"; };
+		5B5DB93314C25BA5007755DB /* libvorbisenc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libvorbisenc.a; path = "../external-deps/oggvorbis/lib/ios/armv7/libvorbisenc.a"; sourceTree = "<group>"; };
+		5B5DB93414C25BA5007755DB /* libvorbisfile.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libvorbisfile.a; path = "../external-deps/oggvorbis/lib/ios/armv7/libvorbisfile.a"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 /* End PBXFileReference section */
 
 
 /* Begin PBXFrameworksBuildPhase section */
 /* Begin PBXFrameworksBuildPhase section */
@@ -340,13 +501,13 @@
 			isa = PBXFrameworksBuildPhase;
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			buildActionMask = 2147483647;
 			files = (
 			files = (
+				5B5ADCE314C22DF900AC6109 /* libz.dylib in Frameworks */,
 				42CD0DAB147D8EA80000361E /* libbullet.a in Frameworks */,
 				42CD0DAB147D8EA80000361E /* libbullet.a in Frameworks */,
 				42CD0DAC147D8EA80000361E /* libogg.a in Frameworks */,
 				42CD0DAC147D8EA80000361E /* libogg.a in Frameworks */,
 				42CD0DAD147D8EA80000361E /* libvorbis.a in Frameworks */,
 				42CD0DAD147D8EA80000361E /* libvorbis.a in Frameworks */,
 				42CD0DAE147D8EA80000361E /* libvorbisenc.a in Frameworks */,
 				42CD0DAE147D8EA80000361E /* libvorbisenc.a in Frameworks */,
 				42CD0DAF147D8EA80000361E /* libvorbisfile.a in Frameworks */,
 				42CD0DAF147D8EA80000361E /* libvorbisfile.a in Frameworks */,
 				42CCD556146EC1EB00353661 /* libpng.a in Frameworks */,
 				42CCD556146EC1EB00353661 /* libpng.a in Frameworks */,
-				42CCD554146EC1DD00353661 /* libz.dylib in Frameworks */,
 				4234D99E14686C52003031B3 /* Cocoa.framework in Frameworks */,
 				4234D99E14686C52003031B3 /* Cocoa.framework in Frameworks */,
 				4220A6E8146B122B00CAEB3A /* QuartzCore.framework in Frameworks */,
 				4220A6E8146B122B00CAEB3A /* QuartzCore.framework in Frameworks */,
 				4299EFA9146AC94300FF4A73 /* OpenGL.framework in Frameworks */,
 				4299EFA9146AC94300FF4A73 /* OpenGL.framework in Frameworks */,
@@ -354,6 +515,25 @@
 			);
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 		};
+		5B04C57414BFCFE100EB0071 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				5B5ADD2F14C2439700AC6109 /* Foundation.framework in Frameworks */,
+				5B5ADCE514C22E1F00AC6109 /* libz.dylib in Frameworks */,
+				5B04C5FC14BFE51600EB0071 /* OpenAL.framework in Frameworks */,
+				5B04C5FA14BFE51100EB0071 /* OpenGLES.framework in Frameworks */,
+				5B04C5F814BFE50B00EB0071 /* QuartzCore.framework in Frameworks */,
+				5B04C5F614BFE50100EB0071 /* UIKit.framework in Frameworks */,
+				5B04C57514BFCFE100EB0071 /* libbullet.a in Frameworks */,
+				5B04C57614BFCFE100EB0071 /* libogg.a in Frameworks */,
+				5B04C57714BFCFE100EB0071 /* libvorbis.a in Frameworks */,
+				5B04C57814BFCFE100EB0071 /* libvorbisenc.a in Frameworks */,
+				5B04C57914BFCFE100EB0071 /* libvorbisfile.a in Frameworks */,
+				5B04C57A14BFCFE100EB0071 /* libpng.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 /* End PBXFrameworksBuildPhase section */
 /* End PBXFrameworksBuildPhase section */
 
 
 /* Begin PBXGroup section */
 /* Begin PBXGroup section */
@@ -371,11 +551,86 @@
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
 				4234D99A14686C52003031B3 /* libgameplay.a */,
 				4234D99A14686C52003031B3 /* libgameplay.a */,
+				5B04C5CA14BFCFE100EB0071 /* libgameplay.a */,
 			);
 			);
 			name = Products;
 			name = Products;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
 		};
 		};
 		4234D9A314686C52003031B3 /* src */ = {
 		4234D9A314686C52003031B3 /* src */ = {
+			isa = PBXGroup;
+			children = (
+				5B43D19714C35347008A5D9D /* GamePlay */,
+				5B43D19614C35344008A5D9D /* Platform */,
+			);
+			name = src;
+			path = gameplay;
+			sourceTree = "<group>";
+		};
+		427D4F42147DC8DE0076760E /* Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				42CD0DA6147D8EA80000361E /* libbullet.a */,
+				42CD0DA7147D8EA80000361E /* libogg.a */,
+				42CD0DA8147D8EA80000361E /* libvorbis.a */,
+				42CD0DA9147D8EA80000361E /* libvorbisenc.a */,
+				42CD0DAA147D8EA80000361E /* libvorbisfile.a */,
+				42CCD555146EC1EB00353661 /* libpng.a */,
+				5B5ADCE114C22DC700AC6109 /* Mac OS X */,
+				5B5ADCE014C22DBE00AC6109 /* iOS */,
+			);
+			name = Libraries;
+			sourceTree = "<group>";
+		};
+		42CCD4AF146D811D00353661 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				5B04C5FE14BFE52F00EB0071 /* Mac OS X */,
+				5B04C5FD14BFE52300EB0071 /* iOS */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		5B04C5FD14BFE52300EB0071 /* iOS */ = {
+			isa = PBXGroup;
+			children = (
+				5B43D17914C3497B008A5D9D /* CoreGraphics.framework */,
+				5B5ADD2E14C2439700AC6109 /* Foundation.framework */,
+				5B04C5FB14BFE51600EB0071 /* OpenAL.framework */,
+				5B04C5F914BFE51000EB0071 /* OpenGLES.framework */,
+				5B04C5F714BFE50B00EB0071 /* QuartzCore.framework */,
+				5B04C5F514BFE50100EB0071 /* UIKit.framework */,
+			);
+			name = iOS;
+			sourceTree = "<group>";
+		};
+		5B04C5FE14BFE52F00EB0071 /* Mac OS X */ = {
+			isa = PBXGroup;
+			children = (
+				4234D99D14686C52003031B3 /* Cocoa.framework */,
+				4220A6E7146B122B00CAEB3A /* QuartzCore.framework */,
+				4299EFA8146AC94300FF4A73 /* OpenGL.framework */,
+				4299EFAA146AC94B00FF4A73 /* OpenAL.framework */,
+			);
+			name = "Mac OS X";
+			sourceTree = "<group>";
+		};
+		5B43D19614C35344008A5D9D /* Platform */ = {
+			isa = PBXGroup;
+			children = (
+				42CD0DDE147D8FF50000361E /* gameplay-main-macos.mm */,
+				5B04C5CB14BFD48500EB0071 /* gameplay-main-ios.mm */,
+				42CD0DDF147D8FF50000361E /* gameplay-main-qnx.cpp */,
+				42CD0DE0147D8FF50000361E /* gameplay-main-win32.cpp */,
+				42CD0E19147D8FF50000361E /* Platform.h */,
+				42CD0E1A147D8FF50000361E /* PlatformMacOS.mm */,
+				42CD0E1B147D8FF50000361E /* PlatformQNX.cpp */,
+				42CD0E1C147D8FF50000361E /* PlatformWin32.cpp */,
+				5B04C5CC14BFD48500EB0071 /* PlatformiOS.mm */,
+			);
+			name = Platform;
+			sourceTree = "<group>";
+		};
+		5B43D19714C35347008A5D9D /* GamePlay */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
 				42CD0DB1147D8FF50000361E /* Animation.cpp */,
 				42CD0DB1147D8FF50000361E /* Animation.cpp */,
@@ -425,9 +680,6 @@
 				42CD0DDC147D8FF50000361E /* Game.cpp */,
 				42CD0DDC147D8FF50000361E /* Game.cpp */,
 				42CD0DDD147D8FF50000361E /* Game.h */,
 				42CD0DDD147D8FF50000361E /* Game.h */,
 				42C932AF14919FD10098216A /* Game.inl */,
 				42C932AF14919FD10098216A /* Game.inl */,
-				42CD0DDE147D8FF50000361E /* gameplay-main-macos.mm */,
-				42CD0DDF147D8FF50000361E /* gameplay-main-qnx.cpp */,
-				42CD0DE0147D8FF50000361E /* gameplay-main-win32.cpp */,
 				42CD0DE1147D8FF50000361E /* gameplay.h */,
 				42CD0DE1147D8FF50000361E /* gameplay.h */,
 				4208DEE614A4079F00D3C511 /* Image.cpp */,
 				4208DEE614A4079F00D3C511 /* Image.cpp */,
 				4208DEE714A4079F00D3C511 /* Image.h */,
 				4208DEE714A4079F00D3C511 /* Image.h */,
@@ -489,10 +741,6 @@
 				42CD0E16147D8FF50000361E /* Plane.cpp */,
 				42CD0E16147D8FF50000361E /* Plane.cpp */,
 				42CD0E17147D8FF50000361E /* Plane.h */,
 				42CD0E17147D8FF50000361E /* Plane.h */,
 				42CD0E18147D8FF50000361E /* Plane.inl */,
 				42CD0E18147D8FF50000361E /* Plane.inl */,
-				42CD0E19147D8FF50000361E /* Platform.h */,
-				42CD0E1A147D8FF50000361E /* PlatformMacOS.mm */,
-				42CD0E1B147D8FF50000361E /* PlatformQNX.cpp */,
-				42CD0E1C147D8FF50000361E /* PlatformWin32.cpp */,
 				42CD0E1D147D8FF50000361E /* Properties.cpp */,
 				42CD0E1D147D8FF50000361E /* Properties.cpp */,
 				42CD0E1E147D8FF50000361E /* Properties.h */,
 				42CD0E1E147D8FF50000361E /* Properties.h */,
 				42CD0E1F147D8FF50000361E /* Quaternion.cpp */,
 				42CD0E1F147D8FF50000361E /* Quaternion.cpp */,
@@ -538,33 +786,29 @@
 				42CD0E44147D8FF50000361E /* Viewport.cpp */,
 				42CD0E44147D8FF50000361E /* Viewport.cpp */,
 				42CD0E45147D8FF50000361E /* Viewport.h */,
 				42CD0E45147D8FF50000361E /* Viewport.h */,
 			);
 			);
-			name = src;
-			path = gameplay;
+			name = GamePlay;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
 		};
 		};
-		427D4F42147DC8DE0076760E /* Libraries */ = {
+		5B5ADCE014C22DBE00AC6109 /* iOS */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
-				42CD0DA6147D8EA80000361E /* libbullet.a */,
-				42CD0DA7147D8EA80000361E /* libogg.a */,
-				42CD0DA8147D8EA80000361E /* libvorbis.a */,
-				42CD0DA9147D8EA80000361E /* libvorbisenc.a */,
-				42CD0DAA147D8EA80000361E /* libvorbisfile.a */,
-				42CCD555146EC1EB00353661 /* libpng.a */,
-				42CCD553146EC1DD00353661 /* libz.dylib */,
+				5B5DB93114C25BA5007755DB /* libogg.a */,
+				5B5DB93214C25BA5007755DB /* libvorbis.a */,
+				5B5DB93314C25BA5007755DB /* libvorbisenc.a */,
+				5B5DB93414C25BA5007755DB /* libvorbisfile.a */,
+				5B5DB92F14C25B94007755DB /* libpng.a */,
+				5B5DB92D14C25B7B007755DB /* libbullet.a */,
+				5B5ADCE414C22E1F00AC6109 /* libz.dylib */,
 			);
 			);
-			name = Libraries;
+			name = iOS;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
 		};
 		};
-		42CCD4AF146D811D00353661 /* Frameworks */ = {
+		5B5ADCE114C22DC700AC6109 /* Mac OS X */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
-				4234D99D14686C52003031B3 /* Cocoa.framework */,
-				4220A6E7146B122B00CAEB3A /* QuartzCore.framework */,
-				4299EFA8146AC94300FF4A73 /* OpenGL.framework */,
-				4299EFAA146AC94B00FF4A73 /* OpenAL.framework */,
+				5B5ADCE214C22DF900AC6109 /* libz.dylib */,
 			);
 			);
-			name = Frameworks;
+			name = "Mac OS X";
 			sourceTree = "<group>";
 			sourceTree = "<group>";
 		};
 		};
 /* End PBXGroup section */
 /* End PBXGroup section */
@@ -647,12 +891,89 @@
 			);
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 		};
+		5B04C58014BFCFE100EB0071 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				5B04C58114BFCFE100EB0071 /* Animation.h in Headers */,
+				5B04C58214BFCFE100EB0071 /* AnimationClip.h in Headers */,
+				5B04C58314BFCFE100EB0071 /* AnimationController.h in Headers */,
+				5B04C58414BFCFE100EB0071 /* AnimationTarget.h in Headers */,
+				5B04C58514BFCFE100EB0071 /* AnimationValue.h in Headers */,
+				5B04C58614BFCFE100EB0071 /* AudioBuffer.h in Headers */,
+				5B04C58714BFCFE100EB0071 /* AudioController.h in Headers */,
+				5B04C58814BFCFE100EB0071 /* AudioListener.h in Headers */,
+				5B04C58914BFCFE100EB0071 /* AudioSource.h in Headers */,
+				5B04C58A14BFCFE100EB0071 /* Base.h in Headers */,
+				5B04C58B14BFCFE100EB0071 /* BoundingBox.h in Headers */,
+				5B04C58C14BFCFE100EB0071 /* BoundingSphere.h in Headers */,
+				5B04C58D14BFCFE100EB0071 /* Camera.h in Headers */,
+				5B04C58E14BFCFE100EB0071 /* Curve.h in Headers */,
+				5B04C58F14BFCFE100EB0071 /* DebugNew.h in Headers */,
+				5B04C59014BFCFE100EB0071 /* DepthStencilTarget.h in Headers */,
+				5B04C59114BFCFE100EB0071 /* Effect.h in Headers */,
+				5B04C59214BFCFE100EB0071 /* FileSystem.h in Headers */,
+				5B04C59314BFCFE100EB0071 /* Font.h in Headers */,
+				5B04C59414BFCFE100EB0071 /* FrameBuffer.h in Headers */,
+				5B04C59514BFCFE100EB0071 /* Frustum.h in Headers */,
+				5B04C59614BFCFE100EB0071 /* Game.h in Headers */,
+				5B04C59714BFCFE100EB0071 /* gameplay.h in Headers */,
+				5B04C59814BFCFE100EB0071 /* Joint.h in Headers */,
+				5B04C59914BFCFE100EB0071 /* Light.h in Headers */,
+				5B04C59A14BFCFE100EB0071 /* Material.h in Headers */,
+				5B04C59B14BFCFE100EB0071 /* MaterialParameter.h in Headers */,
+				5B04C59C14BFCFE100EB0071 /* Matrix.h in Headers */,
+				5B04C59D14BFCFE100EB0071 /* Mesh.h in Headers */,
+				5B04C59E14BFCFE100EB0071 /* MeshPart.h in Headers */,
+				5B04C59F14BFCFE100EB0071 /* MeshSkin.h in Headers */,
+				5B04C5A014BFCFE100EB0071 /* Model.h in Headers */,
+				5B04C5A114BFCFE100EB0071 /* Node.h in Headers */,
+				5B04C5A214BFCFE100EB0071 /* Package.h in Headers */,
+				5B04C5A314BFCFE100EB0071 /* ParticleEmitter.h in Headers */,
+				5B04C5A414BFCFE100EB0071 /* Pass.h in Headers */,
+				5B04C5A514BFCFE100EB0071 /* PhysicsConstraint.h in Headers */,
+				5B04C5A614BFCFE100EB0071 /* PhysicsController.h in Headers */,
+				5B04C5A714BFCFE100EB0071 /* PhysicsFixedConstraint.h in Headers */,
+				5B04C5A814BFCFE100EB0071 /* PhysicsGenericConstraint.h in Headers */,
+				5B04C5A914BFCFE100EB0071 /* PhysicsHingeConstraint.h in Headers */,
+				5B04C5AA14BFCFE100EB0071 /* PhysicsMotionState.h in Headers */,
+				5B04C5AB14BFCFE100EB0071 /* PhysicsRigidBody.h in Headers */,
+				5B04C5AC14BFCFE100EB0071 /* PhysicsSocketConstraint.h in Headers */,
+				5B04C5AD14BFCFE100EB0071 /* PhysicsSpringConstraint.h in Headers */,
+				5B04C5AE14BFCFE100EB0071 /* Plane.h in Headers */,
+				5B04C5AF14BFCFE100EB0071 /* Platform.h in Headers */,
+				5B04C5B014BFCFE100EB0071 /* Properties.h in Headers */,
+				5B04C5B114BFCFE100EB0071 /* Quaternion.h in Headers */,
+				5B04C5B214BFCFE100EB0071 /* Ray.h in Headers */,
+				5B04C5B314BFCFE100EB0071 /* Rectangle.h in Headers */,
+				5B04C5B414BFCFE100EB0071 /* Ref.h in Headers */,
+				5B04C5B514BFCFE100EB0071 /* RenderState.h in Headers */,
+				5B04C5B614BFCFE100EB0071 /* RenderTarget.h in Headers */,
+				5B04C5B714BFCFE100EB0071 /* Scene.h in Headers */,
+				5B04C5B814BFCFE100EB0071 /* SpriteBatch.h in Headers */,
+				5B04C5B914BFCFE100EB0071 /* Technique.h in Headers */,
+				5B04C5BA14BFCFE100EB0071 /* Texture.h in Headers */,
+				5B04C5BB14BFCFE100EB0071 /* Transform.h in Headers */,
+				5B04C5BC14BFCFE100EB0071 /* Vector2.h in Headers */,
+				5B04C5BD14BFCFE100EB0071 /* Vector3.h in Headers */,
+				5B04C5BE14BFCFE100EB0071 /* Vector4.h in Headers */,
+				5B04C5BF14BFCFE100EB0071 /* VertexAttributeBinding.h in Headers */,
+				5B04C5C014BFCFE100EB0071 /* VertexFormat.h in Headers */,
+				5B04C5C114BFCFE100EB0071 /* Viewport.h in Headers */,
+				5B04C5C214BFCFE100EB0071 /* SceneLoader.h in Headers */,
+				5B04C5C314BFCFE100EB0071 /* Image.h in Headers */,
+				5B04C5C414BFCFE100EB0071 /* Keyboard.h in Headers */,
+				5B04C5C514BFCFE100EB0071 /* Touch.h in Headers */,
+				5B04C5C614BFCFE100EB0071 /* MeshBatch.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 /* End PBXHeadersBuildPhase section */
 /* End PBXHeadersBuildPhase section */
 
 
 /* Begin PBXNativeTarget section */
 /* Begin PBXNativeTarget section */
-		4234D99914686C52003031B3 /* gameplay */ = {
+		4234D99914686C52003031B3 /* gameplay-macosx */ = {
 			isa = PBXNativeTarget;
 			isa = PBXNativeTarget;
-			buildConfigurationList = 4234D9AB14686C52003031B3 /* Build configuration list for PBXNativeTarget "gameplay" */;
+			buildConfigurationList = 4234D9AB14686C52003031B3 /* Build configuration list for PBXNativeTarget "gameplay-macosx" */;
 			buildPhases = (
 			buildPhases = (
 				4234D99614686C52003031B3 /* Sources */,
 				4234D99614686C52003031B3 /* Sources */,
 				4234D99714686C52003031B3 /* Frameworks */,
 				4234D99714686C52003031B3 /* Frameworks */,
@@ -662,11 +983,28 @@
 			);
 			);
 			dependencies = (
 			dependencies = (
 			);
 			);
-			name = gameplay;
+			name = "gameplay-macosx";
 			productName = gameplay;
 			productName = gameplay;
 			productReference = 4234D99A14686C52003031B3 /* libgameplay.a */;
 			productReference = 4234D99A14686C52003031B3 /* libgameplay.a */;
 			productType = "com.apple.product-type.library.static";
 			productType = "com.apple.product-type.library.static";
 		};
 		};
+		5B04C52B14BFCFE100EB0071 /* gameplay-ios */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 5B04C5C714BFCFE100EB0071 /* Build configuration list for PBXNativeTarget "gameplay-ios" */;
+			buildPhases = (
+				5B04C52C14BFCFE100EB0071 /* Sources */,
+				5B04C57414BFCFE100EB0071 /* Frameworks */,
+				5B04C58014BFCFE100EB0071 /* Headers */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "gameplay-ios";
+			productName = gameplay;
+			productReference = 5B04C5CA14BFCFE100EB0071 /* libgameplay.a */;
+			productType = "com.apple.product-type.library.static";
+		};
 /* End PBXNativeTarget section */
 /* End PBXNativeTarget section */
 
 
 /* Begin PBXProject section */
 /* Begin PBXProject section */
@@ -687,7 +1025,8 @@
 			projectDirPath = "";
 			projectDirPath = "";
 			projectRoot = "";
 			projectRoot = "";
 			targets = (
 			targets = (
-				4234D99914686C52003031B3 /* gameplay */,
+				4234D99914686C52003031B3 /* gameplay-macosx */,
+				5B04C52B14BFCFE100EB0071 /* gameplay-ios */,
 			);
 			);
 		};
 		};
 /* End PBXProject section */
 /* End PBXProject section */
@@ -719,8 +1058,6 @@
 				42CD0E6D147D8FF60000361E /* Frustum.cpp in Sources */,
 				42CD0E6D147D8FF60000361E /* Frustum.cpp in Sources */,
 				42CD0E6F147D8FF60000361E /* Game.cpp in Sources */,
 				42CD0E6F147D8FF60000361E /* Game.cpp in Sources */,
 				42CD0E71147D8FF60000361E /* gameplay-main-macos.mm in Sources */,
 				42CD0E71147D8FF60000361E /* gameplay-main-macos.mm in Sources */,
-				42CD0E72147D8FF60000361E /* gameplay-main-qnx.cpp in Sources */,
-				42CD0E73147D8FF60000361E /* gameplay-main-win32.cpp in Sources */,
 				42CD0E77147D8FF60000361E /* Joint.cpp in Sources */,
 				42CD0E77147D8FF60000361E /* Joint.cpp in Sources */,
 				42CD0E79147D8FF60000361E /* Light.cpp in Sources */,
 				42CD0E79147D8FF60000361E /* Light.cpp in Sources */,
 				42CD0E7B147D8FF60000361E /* Material.cpp in Sources */,
 				42CD0E7B147D8FF60000361E /* Material.cpp in Sources */,
@@ -745,8 +1082,6 @@
 				42CD0EA1147D8FF60000361E /* PhysicsSpringConstraint.cpp in Sources */,
 				42CD0EA1147D8FF60000361E /* PhysicsSpringConstraint.cpp in Sources */,
 				42CD0EA3147D8FF60000361E /* Plane.cpp in Sources */,
 				42CD0EA3147D8FF60000361E /* Plane.cpp in Sources */,
 				42CD0EA6147D8FF60000361E /* PlatformMacOS.mm in Sources */,
 				42CD0EA6147D8FF60000361E /* PlatformMacOS.mm in Sources */,
-				42CD0EA7147D8FF60000361E /* PlatformQNX.cpp in Sources */,
-				42CD0EA8147D8FF60000361E /* PlatformWin32.cpp in Sources */,
 				42CD0EA9147D8FF60000361E /* Properties.cpp in Sources */,
 				42CD0EA9147D8FF60000361E /* Properties.cpp in Sources */,
 				42CD0EAB147D8FF60000361E /* Quaternion.cpp in Sources */,
 				42CD0EAB147D8FF60000361E /* Quaternion.cpp in Sources */,
 				42CD0EAD147D8FF60000361E /* Ray.cpp in Sources */,
 				42CD0EAD147D8FF60000361E /* Ray.cpp in Sources */,
@@ -771,18 +1106,96 @@
 			);
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 		};
+		5B04C52C14BFCFE100EB0071 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				5B04C52D14BFCFE100EB0071 /* Animation.cpp in Sources */,
+				5B04C52E14BFCFE100EB0071 /* AnimationClip.cpp in Sources */,
+				5B04C52F14BFCFE100EB0071 /* AnimationController.cpp in Sources */,
+				5B04C53014BFCFE100EB0071 /* AnimationTarget.cpp in Sources */,
+				5B04C53114BFCFE100EB0071 /* AnimationValue.cpp in Sources */,
+				5B04C53214BFCFE100EB0071 /* AudioBuffer.cpp in Sources */,
+				5B04C53314BFCFE100EB0071 /* AudioController.cpp in Sources */,
+				5B04C53414BFCFE100EB0071 /* AudioListener.cpp in Sources */,
+				5B04C53514BFCFE100EB0071 /* AudioSource.cpp in Sources */,
+				5B04C53614BFCFE100EB0071 /* BoundingBox.cpp in Sources */,
+				5B04C53714BFCFE100EB0071 /* BoundingSphere.cpp in Sources */,
+				5B04C53814BFCFE100EB0071 /* Camera.cpp in Sources */,
+				5B04C53914BFCFE100EB0071 /* Curve.cpp in Sources */,
+				5B04C53A14BFCFE100EB0071 /* DebugNew.cpp in Sources */,
+				5B04C53B14BFCFE100EB0071 /* DepthStencilTarget.cpp in Sources */,
+				5B04C53C14BFCFE100EB0071 /* Effect.cpp in Sources */,
+				5B04C53D14BFCFE100EB0071 /* FileSystem.cpp in Sources */,
+				5B04C53E14BFCFE100EB0071 /* Font.cpp in Sources */,
+				5B04C53F14BFCFE100EB0071 /* FrameBuffer.cpp in Sources */,
+				5B04C54014BFCFE100EB0071 /* Frustum.cpp in Sources */,
+				5B04C54114BFCFE100EB0071 /* Game.cpp in Sources */,
+				5B04C54514BFCFE100EB0071 /* Joint.cpp in Sources */,
+				5B04C54614BFCFE100EB0071 /* Light.cpp in Sources */,
+				5B04C54714BFCFE100EB0071 /* Material.cpp in Sources */,
+				5B04C54814BFCFE100EB0071 /* MaterialParameter.cpp in Sources */,
+				5B04C54914BFCFE100EB0071 /* Matrix.cpp in Sources */,
+				5B04C54A14BFCFE100EB0071 /* Mesh.cpp in Sources */,
+				5B04C54B14BFCFE100EB0071 /* MeshPart.cpp in Sources */,
+				5B04C54C14BFCFE100EB0071 /* MeshSkin.cpp in Sources */,
+				5B04C54D14BFCFE100EB0071 /* Model.cpp in Sources */,
+				5B04C54E14BFCFE100EB0071 /* Node.cpp in Sources */,
+				5B04C54F14BFCFE100EB0071 /* Package.cpp in Sources */,
+				5B04C55014BFCFE100EB0071 /* ParticleEmitter.cpp in Sources */,
+				5B04C55114BFCFE100EB0071 /* Pass.cpp in Sources */,
+				5B04C55214BFCFE100EB0071 /* PhysicsConstraint.cpp in Sources */,
+				5B04C55314BFCFE100EB0071 /* PhysicsController.cpp in Sources */,
+				5B04C55414BFCFE100EB0071 /* PhysicsFixedConstraint.cpp in Sources */,
+				5B04C55514BFCFE100EB0071 /* PhysicsGenericConstraint.cpp in Sources */,
+				5B04C55614BFCFE100EB0071 /* PhysicsHingeConstraint.cpp in Sources */,
+				5B04C55714BFCFE100EB0071 /* PhysicsMotionState.cpp in Sources */,
+				5B04C55814BFCFE100EB0071 /* PhysicsRigidBody.cpp in Sources */,
+				5B04C55914BFCFE100EB0071 /* PhysicsSocketConstraint.cpp in Sources */,
+				5B04C55A14BFCFE100EB0071 /* PhysicsSpringConstraint.cpp in Sources */,
+				5B04C55B14BFCFE100EB0071 /* Plane.cpp in Sources */,
+				5B04C55F14BFCFE100EB0071 /* Properties.cpp in Sources */,
+				5B04C56014BFCFE100EB0071 /* Quaternion.cpp in Sources */,
+				5B04C56114BFCFE100EB0071 /* Ray.cpp in Sources */,
+				5B04C56214BFCFE100EB0071 /* Rectangle.cpp in Sources */,
+				5B04C56314BFCFE100EB0071 /* Ref.cpp in Sources */,
+				5B04C56414BFCFE100EB0071 /* RenderState.cpp in Sources */,
+				5B04C56514BFCFE100EB0071 /* RenderTarget.cpp in Sources */,
+				5B04C56614BFCFE100EB0071 /* Scene.cpp in Sources */,
+				5B04C56714BFCFE100EB0071 /* SpriteBatch.cpp in Sources */,
+				5B04C56814BFCFE100EB0071 /* Technique.cpp in Sources */,
+				5B04C56914BFCFE100EB0071 /* Texture.cpp in Sources */,
+				5B04C56A14BFCFE100EB0071 /* Transform.cpp in Sources */,
+				5B04C56B14BFCFE100EB0071 /* Vector2.cpp in Sources */,
+				5B04C56C14BFCFE100EB0071 /* Vector3.cpp in Sources */,
+				5B04C56D14BFCFE100EB0071 /* Vector4.cpp in Sources */,
+				5B04C56E14BFCFE100EB0071 /* VertexAttributeBinding.cpp in Sources */,
+				5B04C56F14BFCFE100EB0071 /* VertexFormat.cpp in Sources */,
+				5B04C57014BFCFE100EB0071 /* Viewport.cpp in Sources */,
+				5B04C57114BFCFE100EB0071 /* SceneLoader.cpp in Sources */,
+				5B04C57214BFCFE100EB0071 /* Image.cpp in Sources */,
+				5B04C57314BFCFE100EB0071 /* MeshBatch.cpp in Sources */,
+				5B04C5CD14BFD48500EB0071 /* gameplay-main-ios.mm in Sources */,
+				5B04C5CE14BFD48500EB0071 /* PlatformiOS.mm in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 /* End PBXSourcesBuildPhase section */
 /* End PBXSourcesBuildPhase section */
 
 
 /* Begin XCBuildConfiguration section */
 /* Begin XCBuildConfiguration section */
 		4234D99114686BB6003031B3 /* Debug */ = {
 		4234D99114686BB6003031B3 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			isa = XCBuildConfiguration;
 			buildSettings = {
 			buildSettings = {
+				SUPPORTED_PLATFORMS = "iphonesimulator macosx iphoneos";
+				VALID_ARCHS = "armv7 armv6 i386 x86_64";
 			};
 			};
 			name = Debug;
 			name = Debug;
 		};
 		};
 		4234D99214686BB6003031B3 /* Release */ = {
 		4234D99214686BB6003031B3 /* Release */ = {
 			isa = XCBuildConfiguration;
 			isa = XCBuildConfiguration;
 			buildSettings = {
 			buildSettings = {
+				SUPPORTED_PLATFORMS = "iphonesimulator macosx iphoneos";
+				VALID_ARCHS = "armv7 armv6 i386 x86_64";
 			};
 			};
 			name = Release;
 			name = Release;
 		};
 		};
@@ -790,7 +1203,7 @@
 			isa = XCBuildConfiguration;
 			isa = XCBuildConfiguration;
 			buildSettings = {
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
 				COPY_PHASE_STRIP = NO;
 				COPY_PHASE_STRIP = NO;
 				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
 				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
@@ -823,12 +1236,14 @@
 					"\"$(SRCROOT)/../external-deps/oggvorbis/lib/macos\"",
 					"\"$(SRCROOT)/../external-deps/oggvorbis/lib/macos\"",
 				);
 				);
 				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				MACOSX_DEPLOYMENT_TARGET = 10.7;
-				ONLY_ACTIVE_ARCH = YES;
+				ONLY_ACTIVE_ARCH = NO;
 				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
 				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				PRODUCT_NAME = "$(TARGET_NAME)";
+				PRODUCT_NAME = gameplay;
 				SDKROOT = macosx;
 				SDKROOT = macosx;
 				SHARED_PRECOMPS_DIR = "";
 				SHARED_PRECOMPS_DIR = "";
+				SUPPORTED_PLATFORMS = macosx;
 				USER_HEADER_SEARCH_PATHS = "";
 				USER_HEADER_SEARCH_PATHS = "";
+				VALID_ARCHS = "i386 x86_64";
 			};
 			};
 			name = Debug;
 			name = Debug;
 		};
 		};
@@ -836,7 +1251,7 @@
 			isa = XCBuildConfiguration;
 			isa = XCBuildConfiguration;
 			buildSettings = {
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
 				COPY_PHASE_STRIP = YES;
 				COPY_PHASE_STRIP = YES;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
 				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
@@ -864,10 +1279,101 @@
 				);
 				);
 				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
 				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				PRODUCT_NAME = "$(TARGET_NAME)";
+				PRODUCT_NAME = gameplay;
 				SDKROOT = macosx;
 				SDKROOT = macosx;
 				SHARED_PRECOMPS_DIR = "";
 				SHARED_PRECOMPS_DIR = "";
+				SUPPORTED_PLATFORMS = macosx;
 				USER_HEADER_SEARCH_PATHS = "";
 				USER_HEADER_SEARCH_PATHS = "";
+				VALID_ARCHS = "i386 x86_64";
+			};
+			name = Release;
+		};
+		5B04C5C814BFCFE100EB0071 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				COPY_PHASE_STRIP = NO;
+				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = NO;
+				GCC_PREFIX_HEADER = "";
+				GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
+				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
+				GCC_WARN_MISSING_PARENTHESES = NO;
+				GCC_WARN_UNUSED_VARIABLE = NO;
+				HEADER_SEARCH_PATHS = (
+					"../external-deps/libpng/include",
+					"../external-deps/bullet/include",
+					"../external-deps/oggvorbis/include",
+				);
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../external-deps/libpng/lib/ios/$(CURRENT_ARCH)\"",
+					"\"$(SRCROOT)/../external-deps/bullet/lib/ios/$(CURRENT_ARCH)\"",
+					"\"$(SRCROOT)/../external-deps/oggvorbis/lib/ios/$(CURRENT_ARCH)\"",
+				);
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				ONLY_ACTIVE_ARCH = YES;
+				OTHER_LDFLAGS = "-ObjC";
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				PRODUCT_NAME = gameplay;
+				SDKROOT = iphoneos;
+				SHARED_PRECOMPS_DIR = "";
+				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
+				USER_HEADER_SEARCH_PATHS = "";
+				VALID_ARCHS = "armv7 armv6";
+			};
+			name = Debug;
+		};
+		5B04C5C914BFCFE100EB0071 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_PRECOMPILE_PREFIX_HEADER = NO;
+				GCC_PREFIX_HEADER = "";
+				GCC_PREPROCESSOR_DEFINITIONS = "";
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
+				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
+				GCC_WARN_MISSING_PARENTHESES = NO;
+				GCC_WARN_UNUSED_VARIABLE = NO;
+				HEADER_SEARCH_PATHS = (
+					"../external-deps/libpng/include",
+					"../external-deps/bullet/include",
+					"../external-deps/oggvorbis/include",
+				);
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../external-deps/libpng/lib/ios/$(CURRENT_ARCH)\"",
+					"\"$(SRCROOT)/../external-deps/bullet/lib/ios/$(CURRENT_ARCH)\"",
+					"\"$(SRCROOT)/../external-deps/oggvorbis/lib/ios/$(CURRENT_ARCH)\"",
+				);
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				OTHER_LDFLAGS = "-ObjC";
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				PRODUCT_NAME = gameplay;
+				SDKROOT = iphoneos;
+				SHARED_PRECOMPS_DIR = "";
+				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
+				USER_HEADER_SEARCH_PATHS = "";
+				VALID_ARCHS = "armv7 armv6";
 			};
 			};
 			name = Release;
 			name = Release;
 		};
 		};
@@ -883,7 +1389,7 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 			defaultConfigurationName = Release;
 		};
 		};
-		4234D9AB14686C52003031B3 /* Build configuration list for PBXNativeTarget "gameplay" */ = {
+		4234D9AB14686C52003031B3 /* Build configuration list for PBXNativeTarget "gameplay-macosx" */ = {
 			isa = XCConfigurationList;
 			isa = XCConfigurationList;
 			buildConfigurations = (
 			buildConfigurations = (
 				4234D9A914686C52003031B3 /* Debug */,
 				4234D9A914686C52003031B3 /* Debug */,
@@ -892,6 +1398,15 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 			defaultConfigurationName = Release;
 		};
 		};
+		5B04C5C714BFCFE100EB0071 /* Build configuration list for PBXNativeTarget "gameplay-ios" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				5B04C5C814BFCFE100EB0071 /* Debug */,
+				5B04C5C914BFCFE100EB0071 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 /* End XCConfigurationList section */
 /* End XCConfigurationList section */
 	};
 	};
 	rootObject = 4234D98C14686BB6003031B3 /* Project object */;
 	rootObject = 4234D98C14686BB6003031B3 /* Project object */;

+ 32 - 6
gameplay/src/Base.h

@@ -160,14 +160,40 @@ extern void printError(const char* format, ...);
     #define WIN32_LEAN_AND_MEAN
     #define WIN32_LEAN_AND_MEAN
     #include <GL/glew.h>
     #include <GL/glew.h>
 #elif __APPLE__
 #elif __APPLE__
-#include <OpenGL/gl.h>
-#include <OpenGL/glext.h>
-#define glBindVertexArray glBindVertexArrayAPPLE
-#define glDeleteVertexArrays glDeleteVertexArraysAPPLE
-#define glGenVertexArrays glGenVertexArraysAPPLE
-#define glIsVertexArray glIsVertexArrayAPPLE
+    #include "TargetConditionals.h"
+    // NOTE: Alternative
+    // #ifdef __MAC_OS_X_VERSION_MAX_ALLOWED
+    // ...
+    // #elif TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
+    // ...
+    // #endif
+    // NOTE: TARGET_OS_MAC is defined in iOS libs, therefore the 
+    // below order matters, the above does not not
+    // see: http://developer.apple.com/library/mac/#documentation/developertools/conceptual/cross_development/Using/using.html
+
+    #if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
+        #include <OpenGLES/ES2/gl.h>
+        #include <OpenGLES/ES2/glext.h>
+        #define glBindVertexArray glBindVertexArrayOES
+        #define glDeleteVertexArrays glDeleteVertexArraysOES
+        #define glGenVertexArrays glGenVertexArraysOES
+        #define glIsVertexArray glIsVertexArrayOES
+        #define glClearDepth glClearDepthf
+        #define OPENGL_ES 1
+    #elif TARGET_OS_MAC
+        #include <OpenGL/gl.h>
+        #include <OpenGL/glext.h>
+        #define glBindVertexArray glBindVertexArrayAPPLE
+        #define glDeleteVertexArrays glDeleteVertexArraysAPPLE
+        #define glGenVertexArrays glGenVertexArraysAPPLE
+        #define glIsVertexArray glIsVertexArrayAPPLE
+    #else
+        #error "Unsupported Apple Device"
+    #endif
 #endif
 #endif
 
 
+
+
 // Graphics (GLSL)
 // Graphics (GLSL)
 #define VERTEX_ATTRIBUTE_POSITION_NAME              "a_position"
 #define VERTEX_ATTRIBUTE_POSITION_NAME              "a_position"
 #define VERTEX_ATTRIBUTE_NORMAL_NAME                "a_normal"
 #define VERTEX_ATTRIBUTE_NORMAL_NAME                "a_normal"

+ 1 - 0
gameplay/src/FileSystem.cpp

@@ -7,6 +7,7 @@
     #include <stdio.h>
     #include <stdio.h>
 #else
 #else
     #include <dirent.h>
     #include <dirent.h>
+    #include <sys/stat.h>
 #endif
 #endif
 
 
 namespace gameplay
 namespace gameplay

+ 2 - 2
gameplay/src/PlatformMacOS.mm

@@ -529,7 +529,7 @@ Platform* Platform::create(Game* game)
 int Platform::enterMessagePump()
 int Platform::enterMessagePump()
 {
 {
     NSAutoreleasePool* pool = [NSAutoreleasePool new];
     NSAutoreleasePool* pool = [NSAutoreleasePool new];
-    NSApplication* NSApp = [NSApplication sharedApplication];
+    NSApplication* app = [NSApplication sharedApplication];
     NSRect screenBounds = [[NSScreen mainScreen] frame];
     NSRect screenBounds = [[NSScreen mainScreen] frame];
     NSRect viewBounds = NSMakeRect(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);
     NSRect viewBounds = NSMakeRect(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);
     
     
@@ -550,7 +550,7 @@ int Platform::enterMessagePump()
     [window setDelegate:__view];
     [window setDelegate:__view];
     [__view release];
     [__view release];
     
     
-    [NSApp run];
+    [app run];
     
     
     [pool release];
     [pool release];
     return EXIT_SUCCESS;
     return EXIT_SUCCESS;

+ 506 - 0
gameplay/src/PlatformiOS.mm

@@ -0,0 +1,506 @@
+#ifdef __APPLE__
+
+#include "Base.h"
+#include "Platform.h"
+#include "FileSystem.h"
+#include "Game.h"
+
+#import <UIKit/UIKit.h>
+#import <QuartzCore/QuartzCore.h>
+#import <OpenGLES/EAGL.h>
+#import <OpenGLES/EAGLDrawable.h>
+#import <OpenGLES/ES2/gl.h>
+#import <OpenGLES/ES2/glext.h>
+#import <mach/mach_time.h>
+
+
+using namespace std;
+using namespace gameplay;
+
+static const float ACCELEROMETER_X_FACTOR = 90.0f / WINDOW_WIDTH;
+static const float ACCELEROMETER_Y_FACTOR = 90.0f / WINDOW_HEIGHT;
+
+static UIView *__rootView;
+static long __timeStart;
+static long __timeAbsolute;
+static bool __vsync = WINDOW_VSYNC;
+static float __pitch;
+static float __roll;
+static int __lx;
+static int __ly;
+static bool __hasMouse = false;
+static bool __leftMouseDown = false;
+static bool __rightMouseDown = false;
+static bool __shiftDown = false;
+
+
+long getMachTimeInMilliseconds()
+{
+    static const int64_t kOneMillion = 1000 * 1000;
+    static mach_timebase_info_data_t s_timebase_info;
+    
+    if (s_timebase_info.denom == 0) 
+        (void) mach_timebase_info(&s_timebase_info);
+    
+    // mach_absolute_time() returns billionth of seconds, so divide by one million to get milliseconds
+    return (long)((mach_absolute_time() * s_timebase_info.numer) / (kOneMillion * s_timebase_info.denom));
+}
+
+@interface GameplayView : UIView 
+{
+    EAGLContext* context;	
+    CADisplayLink *displayLink;
+    
+	GLuint defaultFramebuffer, colorRenderbuffer, depthRenderbuffer;
+    GLint framebufferWidth, framebufferHeight;
+    BOOL useDepthBuffer;
+    
+    NSInteger swapInterval;
+    BOOL updating;
+    Game* _game;
+}
+@property (readonly, nonatomic, getter=isUpdating) BOOL updating;
+
+- (void)startUpdating;
+- (void)stopUpdating;
+- (void)update:(id)sender;
+
+- (void)createFramebuffer;
+- (void)deleteFramebuffer;
+
+@end
+
+@implementation GameplayView
+
+@synthesize updating;
+
++ (Class) layerClass
+{
+    return [CAEAGLLayer class];
+}
+
+- (id) initWithFrame:(CGRect)frame
+{
+    if ((self = [super initWithFrame:frame]))
+	{
+        // Do a sanity check
+        // A system version of 3.1 or greater is required to use CADisplayLink. 
+		NSString *reqSysVer = @"3.1";
+		NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
+		if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)
+        {
+            // Log the system version
+            NSLog(@"System Version: %@", currSysVer);
+        }
+        else
+        {
+            printError("Invalid OS Version: %s\n", (currSysVer == NULL?"NULL":[currSysVer cStringUsingEncoding:NSASCIIStringEncoding]));
+            [self release];
+            return nil;
+        }
+        
+        
+        // Configure the CAEAGLLayer and setup out the rendering context
+        CAEAGLLayer* layer = (CAEAGLLayer *)self.layer;
+        layer.opaque = TRUE;
+        layer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
+                                   [NSNumber numberWithBool:FALSE], kEAGLDrawablePropertyRetainedBacking, 
+                                    kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, 
+                                    nil];
+		context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
+        if (!context || ![EAGLContext setCurrentContext:context])
+		{
+			[self release];
+			return nil;
+		}
+        
+        // Initialize Internal Defaults
+        displayLink = nil;
+        defaultFramebuffer = 0;
+        colorRenderbuffer = 0;
+        depthRenderbuffer = 0;
+        useDepthBuffer = TRUE;
+        
+		swapInterval = 1;        
+        updating = FALSE;
+        
+        [self createFramebuffer];
+        
+        // GamePlay Setup
+        // Set the resource path and initalize the game
+        NSString* bundlePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/"];
+        FileSystem::setResourcePath([bundlePath fileSystemRepresentation]); 
+        
+        _game = Game::getInstance();
+        __timeStart = getMachTimeInMilliseconds();
+        _game->run(framebufferWidth, framebufferHeight);
+    }
+    return self;
+}
+
+- (void) dealloc
+{
+    _game->exit();
+    [self deleteFramebuffer];
+    
+	if ([EAGLContext currentContext] == context)
+        [EAGLContext setCurrentContext:nil];
+	[context release];
+    [super dealloc];
+}
+
+// iOS Requires all content go to a rendering buffer
+// then it is swapped into the windows rendering surface
+- (void)createFramebuffer
+{
+    assert(defaultFramebuffer == 0);
+    //NSLog(@"EAGLView: creating Framebuffer");
+    
+    // Create the default frame buffer, and render buffer
+    glGenFramebuffers(1, &defaultFramebuffer);
+    glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebuffer);    
+    glGenRenderbuffers(1, &colorRenderbuffer);
+    glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);
+    
+    // request storage, width, and height of the view that we will render in
+    [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer *)self.layer];
+    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &framebufferWidth);
+    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &framebufferHeight);
+    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorRenderbuffer);
+
+    // Optionally use depth buffer
+    // If desired, create the depth buffer, and request storage for the depth buffer
+    // Then attach to the frame buffer
+    if(useDepthBuffer)
+    {
+        glGenRenderbuffers(1, &depthRenderbuffer);
+        glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);
+        glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, framebufferWidth, framebufferHeight);
+        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer);
+    }
+
+    // Sanity check, ensure that the framebuffer is valid
+    if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
+        NSLog(@"ERROR: Failed to make complete framebuffer object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER));
+}
+
+//deleting the framebuffer and all the buffers it contains
+- (void)deleteFramebuffer
+{
+    if (context) {
+        [EAGLContext setCurrentContext:context];        
+        if (defaultFramebuffer) 
+        {
+            glDeleteFramebuffers(1, &defaultFramebuffer);
+            defaultFramebuffer = 0;
+        }        
+        if (colorRenderbuffer) 
+        {
+            glDeleteRenderbuffers(1, &colorRenderbuffer);
+            colorRenderbuffer = 0;
+        }
+        if (depthRenderbuffer) 
+        {
+            glDeleteRenderbuffers(1, &depthRenderbuffer);
+            depthRenderbuffer = 0;
+        }
+    }
+}
+
+- (void)setSwapInterval:(NSInteger)interval
+{
+	if (interval >= 1)
+	{
+		swapInterval = interval;		
+		if (updating)
+		{
+			[self stopUpdating];
+			[self startUpdating];
+		}
+	}
+}
+- (int)swapInterval {
+    return swapInterval;
+}
+
+- (void)startUpdating
+{
+	if (!updating)
+	{
+        displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(update:)];
+        [displayLink setFrameInterval:swapInterval];
+        [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
+		updating = TRUE;
+	}
+}
+
+- (void)stopUpdating
+{
+	if (updating)
+	{
+		[displayLink invalidate];
+        displayLink = nil;
+		updating = FALSE;
+	}
+}
+
+- (void)update:(id)sender
+{   
+    if (context != nil)
+    {
+        [EAGLContext setCurrentContext:context];
+        if (!defaultFramebuffer)
+            [self createFramebuffer];
+        glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebuffer);
+        glViewport(0, 0, framebufferWidth, framebufferHeight);
+
+        if (_game && _game->getState() == Game::RUNNING)       
+            _game->frame();
+        
+        glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);
+        [context presentRenderbuffer:GL_RENDERBUFFER];
+    }
+}
+
+- (void) layoutSubviews
+{
+    [self deleteFramebuffer];
+	//_game->resize() //(CAEAGLLayer*)self.layer];
+}
+
+
+- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
+    unsigned int uniqueTouch = 0;
+    for(UITouch *t in touches) {
+        CGPoint touchLoc = [t locationInView:nil];
+        Game::getInstance()->touchEvent(Touch::TOUCH_PRESS, touchLoc.x, touchLoc.y, uniqueTouch);
+    }
+}
+- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
+    unsigned 
+    int uniqueTouch = 0;
+    for(UITouch *t in touches) {
+        CGPoint touchLoc = [t locationInView:nil];
+        Game::getInstance()->touchEvent(Touch::TOUCH_MOVE, touchLoc.x, touchLoc.y, uniqueTouch);
+    }
+}
+- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
+    unsigned int uniqueTouch = 0;
+    for(UITouch *t in touches) {
+        CGPoint touchLoc = [t locationInView:nil];
+        Game::getInstance()->touchEvent(Touch::TOUCH_RELEASE, touchLoc.x, touchLoc.y, uniqueTouch);
+    }
+}
+- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
+    // No equivalent for this in GamePlay -- treat as touch end
+    [self touchesEnded:touches withEvent:event];
+}
+
+@end
+
+
+@interface GameplayViewController : UIViewController
+- (void)startUpdating;
+- (void)stopUpdating;
+@end
+
+@implementation GameplayViewController 
+
+- (id)init 
+{
+    if((self = [super init])) 
+    {
+    }
+    return self;
+}
+- (void)dealloc 
+{
+    __rootView = nil;
+    [super dealloc];
+}
+
+- (void)didReceiveMemoryWarning
+{
+    [super didReceiveMemoryWarning];    
+    // Release any cached data, images, etc that aren't in use.
+}
+
+#pragma mark - View lifecycle
+- (void)loadView
+{
+    self.view = [[[GameplayView alloc] init] autorelease];
+    if(__rootView == nil) {
+        __rootView = self.view;
+    }
+}
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
+{
+    // Return YES for supported orientations
+    // Currently support landscape only?
+    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
+}
+
+- (void)startUpdating {
+    [(GameplayView*)self.view startUpdating];
+}
+- (void)stopUpdating {
+    [(GameplayView*)self.view stopUpdating];
+
+}
+
+@end
+
+
+@interface AppDelegate : UIApplication <UIApplicationDelegate> 
+{
+    UIWindow* window;
+    GameplayViewController* viewController;
+}
+@end
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+    window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
+    viewController = [[GameplayViewController alloc] init];
+    [window setRootViewController:viewController];
+    [window makeKeyAndVisible];
+    
+    // Hide the status bar 
+    // Possilibitlies for hiding include:
+    // * UIStatusBarAnimationNone
+    // * UIStatusBarAnimationFade
+    // * UIStatusBarAnimationSlide
+    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
+    return YES;
+}
+
+- (void)applicationWillResignActive:(UIApplication*)application
+{    
+	[viewController stopUpdating];
+}
+
+- (void)applicationDidEnterBackground:(UIApplication*)application 
+{
+	[viewController stopUpdating];
+}
+
+- (void)applicationWillEnterForeground:(UIApplication*)application 
+{	
+	[viewController startUpdating];
+}
+
+- (void)applicationDidBecomeActive:(UIApplication*)application 
+{
+	[viewController startUpdating];
+}
+
+- (void)applicationWillTerminate:(UIApplication*)application 
+{	
+	[viewController stopUpdating];
+}
+
+- (void)dealloc 
+{
+    [window setRootViewController:nil];
+    [viewController release];
+    [window release];
+	[super dealloc];
+}
+
+@end
+
+
+namespace gameplay
+{
+    
+    extern void printError(const char* format, ...)
+    {
+        va_list argptr;
+        va_start(argptr, format);
+        vfprintf(stderr, format, argptr);
+        fprintf(stderr, "\n");
+        va_end(argptr);
+    }
+    
+    Platform::Platform(Game* game)
+        : _game(game)
+    {
+    }
+    
+    Platform::Platform(const Platform& copy)
+    {
+        // hidden
+    }
+    
+    Platform::~Platform()
+    {
+    }
+    
+    Platform* Platform::create(Game* game)
+    {
+        Platform* platform = new Platform(game);
+        return platform;
+    }
+    
+    int Platform::enterMessagePump()
+    {
+        NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+        [AppDelegate load];
+        UIApplicationMain(0, nil, NSStringFromClass([AppDelegate class]), NSStringFromClass([AppDelegate class]));
+        [pool release];
+        return EXIT_SUCCESS;
+    }
+    
+    long Platform::getAbsoluteTime()
+    {
+        __timeAbsolute = getMachTimeInMilliseconds();
+        return __timeAbsolute;
+    }
+    
+    void Platform::setAbsoluteTime(long time)
+    {
+        __timeAbsolute = time;
+    }
+    
+    bool Platform::isVsync()
+    {
+        return __vsync;
+    }
+    
+    void Platform::setVsync(bool enable)
+    {
+        __vsync = enable;
+    }
+    
+    int Platform::getOrientationAngle()
+    {
+        return 0;
+    }
+    
+    void Platform::getAccelerometerValues(float* pitch, float* roll)
+    {
+        *pitch = __pitch;
+        *roll = __roll;
+    }
+    
+    void Platform::setMultiTouch(bool enabled) 
+    {
+        __rootView.multipleTouchEnabled = enabled;
+    }
+    
+    bool Platform::isMultiTouch() 
+    {
+        return __rootView.multipleTouchEnabled;
+    }
+    
+    void Platform::swapBuffers()
+    {
+        
+    }
+    
+}
+
+#endif

+ 23 - 0
gameplay/src/gameplay-main-ios.mm

@@ -0,0 +1,23 @@
+#ifndef GAMEPLAYMAINIOS_H_
+#define GAMEPLAYMAINIOS_H_
+
+#ifdef __APPLE__
+
+#include "gameplay.h"
+
+using namespace gameplay;
+
+/**
+ * Main entry point.
+ */
+int main(int argc, char** argv)
+{
+    Game* game = Game::getInstance();
+    assert(game != NULL);
+    Platform* platform = Platform::create(game);
+    return platform->enterMessagePump();
+}
+
+#endif
+
+#endif