dmuratshin 9 years ago
parent
commit
2da00a3b7c
100 changed files with 1593 additions and 1002 deletions
  1. 3 0
      .travis.yml
  2. BIN
      3rdPartyTools/PVRTexToolCLI.exe
  3. 32 13
      CMakeLists.txt
  4. BIN
      doc/doc.zip
  5. BIN
      doc/wiki.zip
  6. BIN
      examples/Demo/data/images/brush_eraser.png
  7. 0 0
      examples/Demo/data/res.xml.ox/meta.xml
  8. 2 0
      examples/Demo/data/xmls/res.xml
  9. 40 0
      examples/Demo/proj.android/build.gradle
  10. 5 0
      examples/Demo/proj.android/settings.gradle
  11. 5 7
      examples/Demo/proj.cmake/CMakeLists.txt
  12. 8 1
      examples/Demo/proj.ios/Demo/Demo_ios-Info.plist
  13. 82 74
      examples/Demo/proj.ios/demo_ios.xcodeproj/project.pbxproj
  14. 3 9
      examples/Demo/src/TestColorFont.h
  15. 1 1
      examples/Demo/src/TestInputText.h
  16. 1 1
      examples/Demo/src/TestManageRes.h
  17. 1 1
      examples/Demo/src/TestMask.h
  18. 1 1
      examples/Demo/src/TestPolygon.h
  19. 25 5
      examples/Demo/src/TestRender2Texture.h
  20. 1 1
      examples/Demo/src/TestSignedDistanceFont.h
  21. 1 1
      examples/Demo/src/TestSliding.h
  22. 4 2
      examples/Demo/src/TestText.h
  23. 1 1
      examples/Demo/src/TestTouches.h
  24. 1 1
      examples/Demo/src/TestTweenText.h
  25. 8 15
      examples/Demo/src/main.cpp
  26. 5 0
      examples/Demo/src/test.cpp
  27. 40 0
      examples/DemoBox2D/proj.android/build.gradle
  28. 5 0
      examples/DemoBox2D/proj.android/settings.gradle
  29. 2 5
      examples/DemoBox2D/proj.cmake/CMakeLists.txt
  30. 8 1
      examples/DemoBox2D/proj.ios/DemoBox2D/DemoBox2D_ios-Info.plist
  31. 336 321
      examples/DemoBox2D/proj.ios/DemoBox2D_ios.xcodeproj/project.pbxproj
  32. 8 15
      examples/DemoBox2D/src/main.cpp
  33. 40 0
      examples/Game/part1/proj.android/build.gradle
  34. 5 0
      examples/Game/part1/proj.android/settings.gradle
  35. 4 6
      examples/Game/part1/proj.cmake/CMakeLists.txt
  36. 8 1
      examples/Game/part1/proj.ios/GamePart1/GamePart1_ios-Info.plist
  37. 10 6
      examples/Game/part1/proj.ios/GamePart1_ios.xcodeproj/project.pbxproj
  38. 8 15
      examples/Game/part1/src/main.cpp
  39. 40 0
      examples/Game/part2/proj.android/build.gradle
  40. 5 0
      examples/Game/part2/proj.android/settings.gradle
  41. 4 6
      examples/Game/part2/proj.cmake/CMakeLists.txt
  42. 8 1
      examples/Game/part2/proj.ios/GamePart2/GamePart2_ios-Info.plist
  43. 10 6
      examples/Game/part2/proj.ios/GamePart2_ios.xcodeproj/project.pbxproj
  44. 8 15
      examples/Game/part2/src/main.cpp
  45. 40 0
      examples/Game/part3/proj.android/build.gradle
  46. 5 0
      examples/Game/part3/proj.android/settings.gradle
  47. 4 6
      examples/Game/part3/proj.cmake/CMakeLists.txt
  48. 8 1
      examples/Game/part3/proj.ios/GamePart3/GamePart3_ios-Info.plist
  49. 10 6
      examples/Game/part3/proj.ios/GamePart3_ios.xcodeproj/project.pbxproj
  50. 8 15
      examples/Game/part3/src/main.cpp
  51. 40 0
      examples/Game/part4/proj.android/build.gradle
  52. 5 0
      examples/Game/part4/proj.android/settings.gradle
  53. 4 6
      examples/Game/part4/proj.cmake/CMakeLists.txt
  54. 8 1
      examples/Game/part4/proj.ios/GamePart4/GamePart4_ios-Info.plist
  55. 10 6
      examples/Game/part4/proj.ios/GamePart4_ios.xcodeproj/project.pbxproj
  56. 1 1
      examples/Game/part4/src/GameMenu.cpp
  57. 1 1
      examples/Game/part4/src/MyButton.cpp
  58. 8 15
      examples/Game/part4/src/main.cpp
  59. 40 0
      examples/Game/part5/proj.android/build.gradle
  60. 5 0
      examples/Game/part5/proj.android/settings.gradle
  61. 4 6
      examples/Game/part5/proj.cmake/CMakeLists.txt
  62. 8 1
      examples/Game/part5/proj.ios/GamePart5/GamePart5_ios-Info.plist
  63. 10 6
      examples/Game/part5/proj.ios/GamePart5_ios.xcodeproj/project.pbxproj
  64. 1 1
      examples/Game/part5/src/GameMenu.cpp
  65. 1 1
      examples/Game/part5/src/MyButton.cpp
  66. 8 15
      examples/Game/part5/src/main.cpp
  67. 21 28
      examples/HelloWorld/proj.android/build.gradle
  68. 4 6
      examples/HelloWorld/proj.cmake/CMakeLists.txt
  69. 8 1
      examples/HelloWorld/proj.ios/HelloWorld/HelloWorld_ios-Info.plist
  70. 10 6
      examples/HelloWorld/proj.ios/HelloWorld_ios.xcodeproj/project.pbxproj
  71. 3 1
      examples/HelloWorld/src/example.cpp
  72. 8 15
      examples/HelloWorld/src/main.cpp
  73. 40 0
      examples/Match3/proj.android/build.gradle
  74. 5 0
      examples/Match3/proj.android/settings.gradle
  75. 4 6
      examples/Match3/proj.cmake/CMakeLists.txt
  76. 8 1
      examples/Match3/proj.ios/Match3/Match3_ios-Info.plist
  77. 10 6
      examples/Match3/proj.ios/Match3_ios.xcodeproj/project.pbxproj
  78. 8 15
      examples/Match3/src/main.cpp
  79. BIN
      libs/SDL2.dll
  80. BIN
      libs/SDL2.lib
  81. BIN
      libs/SDL2main.lib
  82. 1 1
      license.txt
  83. 1 1
      oxygine/SDL/android/extension/build.gradle
  84. 69 16
      oxygine/SDL/android/lib/src/org/libsdl/app/SDLActivity.java
  85. 91 82
      oxygine/SDL/ios/oxygine/oxygine_ios.xcodeproj/project.pbxproj
  86. 80 0
      oxygine/SDL/ios/oxygine/oxygine_ios.xcodeproj/xcshareddata/xcschemes/oxygine_ios.xcscheme
  87. 84 76
      oxygine/SDL/macosx/oxygine_macosx/oxygine_macosx.xcodeproj/project.pbxproj
  88. 0 1
      oxygine/SDL/qt/oxygine-framework/oxygine-framework.pro
  89. 6 4
      oxygine/SDL/win32/oxygine.vcxproj
  90. 18 12
      oxygine/SDL/win32/oxygine.vcxproj.filters
  91. 0 3
      oxygine/marmalade/oxygine-framework.mkf
  92. 4 42
      oxygine/src/Actor.cpp
  93. 9 30
      oxygine/src/Actor.h
  94. 9 0
      oxygine/src/AnimationFrame.cpp
  95. 1 0
      oxygine/src/AnimationFrame.h
  96. 53 22
      oxygine/src/DebugActor.cpp
  97. 1 0
      oxygine/src/DebugActor.h
  98. 9 5
      oxygine/src/Draggable.cpp
  99. 2 0
      oxygine/src/Draggable.h
  100. 18 2
      oxygine/src/EventDispatcher.cpp

+ 3 - 0
.travis.yml

@@ -0,0 +1,3 @@
+language: objective-c 
+xcode_project: oxygine/SDL/ios/oxygine/oxygine_ios.xcodeproj
+xcode_scheme: oxygine_ios

BIN
3rdPartyTools/PVRTexToolCLI.exe


+ 32 - 13
CMakeLists.txt

@@ -61,13 +61,16 @@ set(THIRD_PARTY ${OXYGINE_ROOT}/third_party/${PLATFORM})
 if (EMSCRIPTEN)
 	set(OX_HAVE_LIBPNG 1)
 	set(OX_HAVE_HTTP 1)	
-	set(OX_USE_SDL2 0)
+	set(OX_USE_SDL2 1)
 
 	set(SOURCES ${OXYGINE_SRC}/core/emscripten/HttpRequestEmscriptenTask.cpp)
 
 
 	file(GLOB OXYGINE_JS_LIBRARIES ${OXYGINE_SRC}/core/emscripten/*.js)
 
+	set(OXYGINE_CXX_FLAGS "${OXYGINE_CXX_FLAGS} -s USE_SDL=2 -s USE_LIBPNG=1 -s USE_ZLIB=1 -s FULL_ES2=1 ")	
+	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s USE_ZLIB=1")#for minizip.c
+
 elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") 	
 	
 	set(OX_HAVE_LIBJPEG 1)
@@ -102,11 +105,14 @@ if (OX_HAVE_LIBCURL)
 endif(OX_HAVE_LIBCURL)	
 
 
+
 if (NOT OX_HAVE_HTTP)
 	set(OX_DEFINITIONS ${OX_DEFINITIONS} -DOX_NO_HTTP)
 endif(NOT OX_HAVE_HTTP)
 
-
+if (EMSCRIPTEN)
+	set(OX_DEFINITIONS ${OX_DEFINITIONS} -DOX_NO_MT)
+endif(EMSCRIPTEN)
 
 foreach(ITEM ${FOLDERS})
 	file(GLOB FLS
@@ -169,18 +175,24 @@ endif(WIN32)
 
 if (OX_HAVE_LIBPNG)		
 	set(OX_DEFINITIONS	${OX_DEFINITIONS} -DOX_HAVE_LIBPNG)
-	include_directories(${THIRD_PARTY}/libpng)
-	set(LIBPNG ${libprefix}png)
 
-	if (MSVC)		
-		if (MSVC_VERSION EQUAL "1900")
-			set(LIBPNG ${LIBPNG}-2015)
-		endif()
-	elseif(EMSCRIPTEN)
-		set(LIBPNG libz libpng16)
-	endif()	
+	if (EMSCRIPTEN)
+		
+	else(EMSCRIPTEN)
+
+		include_directories(${THIRD_PARTY}/libpng)
+		set(LIBPNG ${libprefix}png)
+
+		if (MSVC)		
+			if (MSVC_VERSION EQUAL "1900")
+				set(LIBPNG ${LIBPNG}-2015)
+			endif()
+		endif()		
+	
+		set(CORE_LIBS ${CORE_LIBS} ${LIBPNG})
+
+	endif(EMSCRIPTEN)
 
-	set(CORE_LIBS ${CORE_LIBS} ${LIBPNG})
 endif(OX_HAVE_LIBPNG)
 
 
@@ -206,9 +218,10 @@ endif(NOT EMSCRIPTEN)
 
 
 if (NOT MSVC)
-	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ")
+	set(OXYGINE_CXX_FLAGS "${OXYGINE_CXX_FLAGS} -std=c++11 ")
 endif(NOT MSVC)
 
+set(CMAKE_CXX_FLAGS ${OXYGINE_CXX_FLAGS})
 
 add_definitions(${OX_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
@@ -235,6 +248,12 @@ set(OXYGINE_JS_LIBRARIES
 	${OXYGINE_JS_LIBRARIES}
 	PARENT_SCOPE)
 
+set(OXYGINE_CXX_FLAGS
+	${OXYGINE_CXX_FLAGS}
+	PARENT_SCOPE)
+
+
+
 message(STATUS "SDL includes: ${SDL2_INCLUDE_DIRS}")
 message(STATUS "Libs:     ${CORE_LIBS}")
 message(STATUS "Platform: ${PLATFORM}")

BIN
doc/doc.zip


BIN
doc/wiki.zip


BIN
examples/Demo/data/images/brush_eraser.png


File diff suppressed because it is too large
+ 0 - 0
examples/Demo/data/res.xml.ox/meta.xml


+ 2 - 0
examples/Demo/data/xmls/res.xml

@@ -7,6 +7,8 @@
 	<atlas id = "primary" format="8888">
 		<image file="gray.png"/>
 		<image file="brush.png"/>
+
+		<image file="brush_eraser.png"/>
 		<image file="palette.png"/>		
 		<image file="snow.png"/>
 		<image file="edges.png"/>

+ 40 - 0
examples/Demo/proj.android/build.gradle

@@ -0,0 +1,40 @@
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:1.0.+'
+    }
+}
+
+apply plugin: 'com.android.application'
+
+
+
+dependencies {
+    compile(project(':oxygine-extension'))
+    compile(project(':oxygine-lib')) { exclude module: 'oxygine-extension' }
+}
+
+android {
+    enforceUniquePackageName=false
+        
+    compileSdkVersion 23
+    buildToolsVersion '23.0.2'
+
+
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+            manifest.srcFile 'AndroidManifest.xml'
+            java.srcDirs = ['src']
+            res.srcDirs = ['res']
+            assets.srcDirs = ['../data']
+        }
+    }
+
+    aaptOptions {
+        noCompress 'zip', 'ogg'
+        ignoreAssetsPattern "!*.dll:*.icf"
+    }
+}

+ 5 - 0
examples/Demo/proj.android/settings.gradle

@@ -0,0 +1,5 @@
+include 'oxygine-lib'
+project(':oxygine-lib').projectDir = new File('../../../..//oxygine-framework/oxygine/SDL/android/lib')
+
+include 'oxygine-extension'
+project(':oxygine-extension').projectDir = new File('../../../..//oxygine-framework/oxygine/SDL/android/extension')

+ 5 - 7
examples/Demo/proj.cmake/CMakeLists.txt

@@ -6,8 +6,9 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
-add_executable(Demo ../src/Counter.cpp ../src/example.cpp ../src/main.cpp ../src/test.cpp  ../src/Counter.h ../src/TestAlphaHitTest.h ../src/TestBox9Sprite.h ../src/TestClipRect.h ../src/TestColorFont.h ../src/TestCounter.h ../src/TestDrag.h ../src/TestEdges.h ../src/TestHttp.h ../src/TestInputText.h ../src/TestManageRes.h ../src/TestMask.h ../src/TestPerf.h ../src/TestPolygon.h ../src/TestProgressBar.h ../src/TestRender2Texture.h ../src/TestSliding.h ../src/TestTexel2Pixel.h ../src/TestText.h ../src/TestTextureFormat.h ../src/TestTouches.h ../src/TestTweenPostProcessing.h ../src/TestTweenShine.h ../src/TestTweenText.h ../src/TestTweens.h ../src/TestUserShader.h ../src/TestUserShader2.h ../src/example.h ../src/test.h )
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OXYGINE_CXX_FLAGS}")
+
+add_executable(Demo ../src/Counter.cpp ../src/example.cpp ../src/main.cpp ../src/test.cpp  ../src/Counter.h ../src/TestAlphaHitTest.h ../src/TestBox9Sprite.h ../src/TestClipRect.h ../src/TestColorFont.h ../src/TestCounter.h ../src/TestDrag.h ../src/TestEdges.h ../src/TestHttp.h ../src/TestInputText.h ../src/TestManageRes.h ../src/TestMask.h ../src/TestPerf.h ../src/TestPolygon.h ../src/TestProgressBar.h ../src/TestRender2Texture.h ../src/TestSignedDistanceFont.h ../src/TestSliding.h ../src/TestTexel2Pixel.h ../src/TestText.h ../src/TestTextureFormat.h ../src/TestTouches.h ../src/TestTweenPostProcessing.h ../src/TestTweenShine.h ../src/TestTweenText.h ../src/TestTweens.h ../src/TestUserShader.h ../src/TestUserShader2.h ../src/example.h ../src/test.h )
 target_link_libraries(Demo ${OXYGINE_CORE_LIBS})
 
 
@@ -19,10 +20,7 @@ endif(WIN32)
 
 
 if (EMSCRIPTEN)
-	SET(CMAKE_EXECUTABLE_SUFFIX ".html")
-	set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
-
-	set_target_properties(Demo PROPERTIES LINK_FLAGS "${linkFlags}")
-
+	SET(CMAKE_EXECUTABLE_SUFFIX ".html")	
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
 	em_link_pre_js(Demo  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 8 - 1
examples/Demo/proj.ios/Demo/Demo_ios-Info.plist

@@ -13,7 +13,7 @@
 	<key>CFBundleIcons~ipad</key>
 	<dict/>
 	<key>CFBundleIdentifier</key>
-	<string>oxygine.${PRODUCT_NAME:rfc1034identifier}</string>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
 	<string>6.0</string>
 	<key>CFBundleName</key>
@@ -34,6 +34,8 @@
 	<array>
 		<string>armv7</string>
 	</array>
+	<key>UIRequiresFullScreen</key>
+	<true/>
 	<key>UIStatusBarHidden</key>
 	<true/>
 	<key>UISupportedInterfaceOrientations</key>
@@ -46,6 +48,11 @@
 		<string>UIInterfaceOrientationLandscapeLeft</string>
 		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
 	<key>UIViewControllerBasedStatusBarAppearance</key>
 	<false/>
 </dict>

+ 82 - 74
examples/Demo/proj.ios/demo_ios.xcodeproj/project.pbxproj

@@ -23,8 +23,8 @@
 		04998EF817F8B6F3003441C3 /* libjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EF617F8B6F3003441C3 /* libjpeg.a */; };
 		049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 049B52AD1871EBBA00EF3C66 /* liboxygine_ios.a */; };
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
-
+		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
+		
 		2DC477AC10D6C07B3FE008F6 /* ../src/Counter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Counter.cpp */; };
 		DA49ED8903C628BA578C8670 /* ../src/example.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF9628FC8D38F9748F0CDEB /* ../src/example.cpp */; };
 		C8860D93875589970329DCCD /* ../src/main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DA100C319512824B7570663 /* ../src/main.cpp */; };
@@ -34,8 +34,10 @@
 		EFF139F8BA484314F7AAF645 /* ../data/images in Sources */ = {isa = PBXBuildFile; fileRef = 5DE458993031811A4C7D28C1 /* ../data/images */; };
 		F2CFD518E4E2E05ECEDBB262 /* ../data/light_fs.glsl in Sources */ = {isa = PBXBuildFile; fileRef = BA41FC88D76540A6905224D6 /* ../data/light_fs.glsl */; };
 		693088A7AB377368EE4A018E /* ../data/light_vs.glsl in Sources */ = {isa = PBXBuildFile; fileRef = 2CE4BD5BB9DEF92439C0AB58 /* ../data/light_vs.glsl */; };
-		2B0FCA4EF2CDAB7EF6C6252E /* ../data/sdf in Sources */ = {isa = PBXBuildFile; fileRef = F196143B0370A9D348494ACC /* ../data/sdf */; };
-		F87DC9641C1B8FCF28948580 /* ../data/xmls in Sources */ = {isa = PBXBuildFile; fileRef = 7746CA7A63049ED8F7D6BF42 /* ../data/xmls */; };
+		2B0FCA4EF2CDAB7EF6C6252E /* ../data/res.xml.ox in Sources */ = {isa = PBXBuildFile; fileRef = F196143B0370A9D348494ACC /* ../data/res.xml.ox */; };
+		F87DC9641C1B8FCF28948580 /* ../data/sdf in Sources */ = {isa = PBXBuildFile; fileRef = 7746CA7A63049ED8F7D6BF42 /* ../data/sdf */; };
+		9850666D9BEB7BAAA6AAECDC /* ../data/xmls in Sources */ = {isa = PBXBuildFile; fileRef = D954BD82D7708B65A08FB6B9 /* ../data/xmls */; };
+
 
 /* End PBXBuildFile section */
 
@@ -84,52 +86,54 @@
 		04998EEC17F8ADD4003441C3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		04998EED17F8ADD4003441C3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
 		9223FE7E1C2D913D000B1FDA /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
+		AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
 		04998EF517F8B6F3003441C3 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = "../../..//oxygine/third_party/ios/libraries/libpng.a"; sourceTree = "<group>"; };
 		04998EF617F8B6F3003441C3 /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjpeg.a; path = "../../..//oxygine/third_party/ios/libraries/libjpeg.a"; sourceTree = "<group>"; };
 		04E9AD3E1876FE84006A7317 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name =Images.xcassets; path = Demo/Images.xcassets; sourceTree = "<group>"; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
 
 		360377333740D8A2FD15BBE6 /* ../src/Counter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Counter.cpp; path = ../src/Counter.cpp; sourceTree = "<group>"; };
 		0BF9628FC8D38F9748F0CDEB /* ../src/example.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = example.cpp; path = ../src/example.cpp; sourceTree = "<group>"; };
 		4DA100C319512824B7570663 /* ../src/main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../src/main.cpp; sourceTree = "<group>"; };
 		04FE4D4FB640E0DF92DFB865 /* ../src/test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test.cpp; path = ../src/test.cpp; sourceTree = "<group>"; };
-		D954BD82D7708B65A08FB6B9 /* ../src/Counter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Counter.h; path = ../src/Counter.h; sourceTree = "<group>"; };
-		BD0E956CC3A2F7EB94822B5C /* ../src/TestAlphaHitTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestAlphaHitTest.h; path = ../src/TestAlphaHitTest.h; sourceTree = "<group>"; };
-		7623D793B59EF0CD569E6EC2 /* ../src/TestBox9Sprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestBox9Sprite.h; path = ../src/TestBox9Sprite.h; sourceTree = "<group>"; };
-		AFA30E959880563E6ABBBC4F /* ../src/TestClipRect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestClipRect.h; path = ../src/TestClipRect.h; sourceTree = "<group>"; };
-		B52CCD463855CF91A7FBDB8E /* ../src/TestColorFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestColorFont.h; path = ../src/TestColorFont.h; sourceTree = "<group>"; };
-		7EEFDEEC289FCBB5FA67F822 /* ../src/TestCounter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestCounter.h; path = ../src/TestCounter.h; sourceTree = "<group>"; };
-		4E9DE6A8FCBDF43BC876EC90 /* ../src/TestDrag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestDrag.h; path = ../src/TestDrag.h; sourceTree = "<group>"; };
-		8F2AFB956EEAEED67C5B7571 /* ../src/TestEdges.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestEdges.h; path = ../src/TestEdges.h; sourceTree = "<group>"; };
-		047F6BD19F885FF186A1447C /* ../src/TestHttp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestHttp.h; path = ../src/TestHttp.h; sourceTree = "<group>"; };
-		C570FAEF487CD34B62389F89 /* ../src/TestInputText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestInputText.h; path = ../src/TestInputText.h; sourceTree = "<group>"; };
-		2418B9A339E6004913AF5980 /* ../src/TestManageRes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestManageRes.h; path = ../src/TestManageRes.h; sourceTree = "<group>"; };
-		CAD9D6A98986EA8082368448 /* ../src/TestMask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestMask.h; path = ../src/TestMask.h; sourceTree = "<group>"; };
-		67194AC90FEA68E7C96E6907 /* ../src/TestPerf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestPerf.h; path = ../src/TestPerf.h; sourceTree = "<group>"; };
-		5AFC0664D7BA80AE2A75BF0E /* ../src/TestPolygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestPolygon.h; path = ../src/TestPolygon.h; sourceTree = "<group>"; };
-		12CAC42FDF06ABE860CFEA53 /* ../src/TestProgressBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestProgressBar.h; path = ../src/TestProgressBar.h; sourceTree = "<group>"; };
-		0F4469FB587862663D529DC9 /* ../src/TestRender2Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestRender2Texture.h; path = ../src/TestRender2Texture.h; sourceTree = "<group>"; };
-		B6A9281364AF5D3B581D374C /* ../src/TestSignedDistanceFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestSignedDistanceFont.h; path = ../src/TestSignedDistanceFont.h; sourceTree = "<group>"; };
-		4013C6794AAE8DFC641D2870 /* ../src/TestSliding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestSliding.h; path = ../src/TestSliding.h; sourceTree = "<group>"; };
-		22E408FD6FCDA6E7E8E76952 /* ../src/TestTexel2Pixel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestTexel2Pixel.h; path = ../src/TestTexel2Pixel.h; sourceTree = "<group>"; };
-		C0253E2158DFD901AD4F8991 /* ../src/TestText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestText.h; path = ../src/TestText.h; sourceTree = "<group>"; };
-		5BE09AD6F31291430F5FB3E0 /* ../src/TestTextureFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestTextureFormat.h; path = ../src/TestTextureFormat.h; sourceTree = "<group>"; };
-		01AAF6B516BCFD9887A9D77D /* ../src/TestTouches.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestTouches.h; path = ../src/TestTouches.h; sourceTree = "<group>"; };
-		B4059CD311FA2BF93FB2C895 /* ../src/TestTweenPostProcessing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestTweenPostProcessing.h; path = ../src/TestTweenPostProcessing.h; sourceTree = "<group>"; };
-		58D859948404178DBBF45318 /* ../src/TestTweenShine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestTweenShine.h; path = ../src/TestTweenShine.h; sourceTree = "<group>"; };
-		875602AC32E1CE2D204597CA /* ../src/TestTweenText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestTweenText.h; path = ../src/TestTweenText.h; sourceTree = "<group>"; };
-		EE911CE8EEC575670229DB27 /* ../src/TestTweens.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestTweens.h; path = ../src/TestTweens.h; sourceTree = "<group>"; };
-		DDCAA51F049F33D5650FB012 /* ../src/TestUserShader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestUserShader.h; path = ../src/TestUserShader.h; sourceTree = "<group>"; };
-		059AD1A359DAF0570058215B /* ../src/TestUserShader2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestUserShader2.h; path = ../src/TestUserShader2.h; sourceTree = "<group>"; };
-		E35A999A55689D67DF3B3B08 /* ../src/example.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = example.h; path = ../src/example.h; sourceTree = "<group>"; };
-		DF9F2703E0A8FF14F52E9486 /* ../src/test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test.h; path = ../src/test.h; sourceTree = "<group>"; };
+		BD0E956CC3A2F7EB94822B5C /* ../src/Counter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Counter.h; path = ../src/Counter.h; sourceTree = "<group>"; };
+		7623D793B59EF0CD569E6EC2 /* ../src/TestAlphaHitTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestAlphaHitTest.h; path = ../src/TestAlphaHitTest.h; sourceTree = "<group>"; };
+		AFA30E959880563E6ABBBC4F /* ../src/TestBox9Sprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestBox9Sprite.h; path = ../src/TestBox9Sprite.h; sourceTree = "<group>"; };
+		B52CCD463855CF91A7FBDB8E /* ../src/TestClipRect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestClipRect.h; path = ../src/TestClipRect.h; sourceTree = "<group>"; };
+		7EEFDEEC289FCBB5FA67F822 /* ../src/TestColorFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestColorFont.h; path = ../src/TestColorFont.h; sourceTree = "<group>"; };
+		4E9DE6A8FCBDF43BC876EC90 /* ../src/TestCounter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestCounter.h; path = ../src/TestCounter.h; sourceTree = "<group>"; };
+		8F2AFB956EEAEED67C5B7571 /* ../src/TestDrag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestDrag.h; path = ../src/TestDrag.h; sourceTree = "<group>"; };
+		047F6BD19F885FF186A1447C /* ../src/TestEdges.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestEdges.h; path = ../src/TestEdges.h; sourceTree = "<group>"; };
+		C570FAEF487CD34B62389F89 /* ../src/TestHttp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestHttp.h; path = ../src/TestHttp.h; sourceTree = "<group>"; };
+		2418B9A339E6004913AF5980 /* ../src/TestInputText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestInputText.h; path = ../src/TestInputText.h; sourceTree = "<group>"; };
+		CAD9D6A98986EA8082368448 /* ../src/TestManageRes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestManageRes.h; path = ../src/TestManageRes.h; sourceTree = "<group>"; };
+		67194AC90FEA68E7C96E6907 /* ../src/TestMask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestMask.h; path = ../src/TestMask.h; sourceTree = "<group>"; };
+		5AFC0664D7BA80AE2A75BF0E /* ../src/TestPerf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestPerf.h; path = ../src/TestPerf.h; sourceTree = "<group>"; };
+		12CAC42FDF06ABE860CFEA53 /* ../src/TestPolygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestPolygon.h; path = ../src/TestPolygon.h; sourceTree = "<group>"; };
+		0F4469FB587862663D529DC9 /* ../src/TestProgressBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestProgressBar.h; path = ../src/TestProgressBar.h; sourceTree = "<group>"; };
+		B6A9281364AF5D3B581D374C /* ../src/TestRender2Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestRender2Texture.h; path = ../src/TestRender2Texture.h; sourceTree = "<group>"; };
+		4013C6794AAE8DFC641D2870 /* ../src/TestSignedDistanceFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestSignedDistanceFont.h; path = ../src/TestSignedDistanceFont.h; sourceTree = "<group>"; };
+		22E408FD6FCDA6E7E8E76952 /* ../src/TestSliding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestSliding.h; path = ../src/TestSliding.h; sourceTree = "<group>"; };
+		C0253E2158DFD901AD4F8991 /* ../src/TestTexel2Pixel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestTexel2Pixel.h; path = ../src/TestTexel2Pixel.h; sourceTree = "<group>"; };
+		5BE09AD6F31291430F5FB3E0 /* ../src/TestText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestText.h; path = ../src/TestText.h; sourceTree = "<group>"; };
+		01AAF6B516BCFD9887A9D77D /* ../src/TestTextureFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestTextureFormat.h; path = ../src/TestTextureFormat.h; sourceTree = "<group>"; };
+		B4059CD311FA2BF93FB2C895 /* ../src/TestTouches.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestTouches.h; path = ../src/TestTouches.h; sourceTree = "<group>"; };
+		58D859948404178DBBF45318 /* ../src/TestTweenPostProcessing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestTweenPostProcessing.h; path = ../src/TestTweenPostProcessing.h; sourceTree = "<group>"; };
+		875602AC32E1CE2D204597CA /* ../src/TestTweenShine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestTweenShine.h; path = ../src/TestTweenShine.h; sourceTree = "<group>"; };
+		EE911CE8EEC575670229DB27 /* ../src/TestTweenText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestTweenText.h; path = ../src/TestTweenText.h; sourceTree = "<group>"; };
+		DDCAA51F049F33D5650FB012 /* ../src/TestTweens.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestTweens.h; path = ../src/TestTweens.h; sourceTree = "<group>"; };
+		059AD1A359DAF0570058215B /* ../src/TestUserShader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestUserShader.h; path = ../src/TestUserShader.h; sourceTree = "<group>"; };
+		E35A999A55689D67DF3B3B08 /* ../src/TestUserShader2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestUserShader2.h; path = ../src/TestUserShader2.h; sourceTree = "<group>"; };
+		DF9F2703E0A8FF14F52E9486 /* ../src/example.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = example.h; path = ../src/example.h; sourceTree = "<group>"; };
+		727D03F76EC292C8C1E3D7E1 /* ../src/test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test.h; path = ../src/test.h; sourceTree = "<group>"; };
 		7F3B12E3C9D554D9FE28101D /* ../data/demo */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = demo; path = ../data/demo; sourceTree = "<group>"; };
 		F6123B1E6FE4471A00F49751 /* ../data/ext */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = ext; path = ../data/ext; sourceTree = "<group>"; };
 		5DE458993031811A4C7D28C1 /* ../data/images */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = images; path = ../data/images; sourceTree = "<group>"; };
 		BA41FC88D76540A6905224D6 /* ../data/light_fs.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = wtf; name = light_fs.glsl; path = ../data/light_fs.glsl; sourceTree = "<group>"; };
 		2CE4BD5BB9DEF92439C0AB58 /* ../data/light_vs.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = wtf; name = light_vs.glsl; path = ../data/light_vs.glsl; sourceTree = "<group>"; };
-		F196143B0370A9D348494ACC /* ../data/sdf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = sdf; path = ../data/sdf; sourceTree = "<group>"; };
-		7746CA7A63049ED8F7D6BF42 /* ../data/xmls */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = xmls; path = ../data/xmls; sourceTree = "<group>"; };
+		F196143B0370A9D348494ACC /* ../data/res.xml.ox */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = res.xml.ox; path = ../data/res.xml.ox; sourceTree = "<group>"; };
+		7746CA7A63049ED8F7D6BF42 /* ../data/sdf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = sdf; path = ../data/sdf; sourceTree = "<group>"; };
+		D954BD82D7708B65A08FB6B9 /* ../data/xmls */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = xmls; path = ../data/xmls; sourceTree = "<group>"; };
+
 
 /* End PBXFileReference section */
 
@@ -138,6 +142,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
 				049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */,
 				04998D3617F8A97D003441C3 /* libSDL2.a in Frameworks */,
@@ -171,7 +176,6 @@
 		04998CE317F8A933003441C3 = {
 			isa = PBXGroup;
 			children = (
-				922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */,
 				045D531C17F8BD5E00CC2C64 /* dependencies */,
 				04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */,
 				04998D2F17F8A96E003441C3 /* SDL.xcodeproj */,
@@ -194,6 +198,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,
 				04998EEB17F8ADD4003441C3 /* UIKit.framework */,
 				048AD0AD197D24AB001963EF /* CoreMotion.framework */,
@@ -216,8 +221,9 @@
 				5DE458993031811A4C7D28C1 /* images */, 
 				BA41FC88D76540A6905224D6 /* light_fs.glsl */, 
 				2CE4BD5BB9DEF92439C0AB58 /* light_vs.glsl */, 
-				F196143B0370A9D348494ACC /* sdf */, 
-				7746CA7A63049ED8F7D6BF42 /* xmls */, 
+				F196143B0370A9D348494ACC /* res.xml.ox */, 
+				7746CA7A63049ED8F7D6BF42 /* sdf */, 
+				D954BD82D7708B65A08FB6B9 /* xmls */, 
 
 			);
 			name = "Supporting Files";
@@ -238,36 +244,36 @@
 				0BF9628FC8D38F9748F0CDEB /* example.cpp */, 
 				4DA100C319512824B7570663 /* main.cpp */, 
 				04FE4D4FB640E0DF92DFB865 /* test.cpp */, 
-				D954BD82D7708B65A08FB6B9 /* Counter.h */, 
-				BD0E956CC3A2F7EB94822B5C /* TestAlphaHitTest.h */, 
-				7623D793B59EF0CD569E6EC2 /* TestBox9Sprite.h */, 
-				AFA30E959880563E6ABBBC4F /* TestClipRect.h */, 
-				B52CCD463855CF91A7FBDB8E /* TestColorFont.h */, 
-				7EEFDEEC289FCBB5FA67F822 /* TestCounter.h */, 
-				4E9DE6A8FCBDF43BC876EC90 /* TestDrag.h */, 
-				8F2AFB956EEAEED67C5B7571 /* TestEdges.h */, 
-				047F6BD19F885FF186A1447C /* TestHttp.h */, 
-				C570FAEF487CD34B62389F89 /* TestInputText.h */, 
-				2418B9A339E6004913AF5980 /* TestManageRes.h */, 
-				CAD9D6A98986EA8082368448 /* TestMask.h */, 
-				67194AC90FEA68E7C96E6907 /* TestPerf.h */, 
-				5AFC0664D7BA80AE2A75BF0E /* TestPolygon.h */, 
-				12CAC42FDF06ABE860CFEA53 /* TestProgressBar.h */, 
-				0F4469FB587862663D529DC9 /* TestRender2Texture.h */, 
-				B6A9281364AF5D3B581D374C /* TestSignedDistanceFont.h */, 
-				4013C6794AAE8DFC641D2870 /* TestSliding.h */, 
-				22E408FD6FCDA6E7E8E76952 /* TestTexel2Pixel.h */, 
-				C0253E2158DFD901AD4F8991 /* TestText.h */, 
-				5BE09AD6F31291430F5FB3E0 /* TestTextureFormat.h */, 
-				01AAF6B516BCFD9887A9D77D /* TestTouches.h */, 
-				B4059CD311FA2BF93FB2C895 /* TestTweenPostProcessing.h */, 
-				58D859948404178DBBF45318 /* TestTweenShine.h */, 
-				875602AC32E1CE2D204597CA /* TestTweenText.h */, 
-				EE911CE8EEC575670229DB27 /* TestTweens.h */, 
-				DDCAA51F049F33D5650FB012 /* TestUserShader.h */, 
-				059AD1A359DAF0570058215B /* TestUserShader2.h */, 
-				E35A999A55689D67DF3B3B08 /* example.h */, 
-				DF9F2703E0A8FF14F52E9486 /* test.h */, 
+				BD0E956CC3A2F7EB94822B5C /* Counter.h */, 
+				7623D793B59EF0CD569E6EC2 /* TestAlphaHitTest.h */, 
+				AFA30E959880563E6ABBBC4F /* TestBox9Sprite.h */, 
+				B52CCD463855CF91A7FBDB8E /* TestClipRect.h */, 
+				7EEFDEEC289FCBB5FA67F822 /* TestColorFont.h */, 
+				4E9DE6A8FCBDF43BC876EC90 /* TestCounter.h */, 
+				8F2AFB956EEAEED67C5B7571 /* TestDrag.h */, 
+				047F6BD19F885FF186A1447C /* TestEdges.h */, 
+				C570FAEF487CD34B62389F89 /* TestHttp.h */, 
+				2418B9A339E6004913AF5980 /* TestInputText.h */, 
+				CAD9D6A98986EA8082368448 /* TestManageRes.h */, 
+				67194AC90FEA68E7C96E6907 /* TestMask.h */, 
+				5AFC0664D7BA80AE2A75BF0E /* TestPerf.h */, 
+				12CAC42FDF06ABE860CFEA53 /* TestPolygon.h */, 
+				0F4469FB587862663D529DC9 /* TestProgressBar.h */, 
+				B6A9281364AF5D3B581D374C /* TestRender2Texture.h */, 
+				4013C6794AAE8DFC641D2870 /* TestSignedDistanceFont.h */, 
+				22E408FD6FCDA6E7E8E76952 /* TestSliding.h */, 
+				C0253E2158DFD901AD4F8991 /* TestTexel2Pixel.h */, 
+				5BE09AD6F31291430F5FB3E0 /* TestText.h */, 
+				01AAF6B516BCFD9887A9D77D /* TestTextureFormat.h */, 
+				B4059CD311FA2BF93FB2C895 /* TestTouches.h */, 
+				58D859948404178DBBF45318 /* TestTweenPostProcessing.h */, 
+				875602AC32E1CE2D204597CA /* TestTweenShine.h */, 
+				EE911CE8EEC575670229DB27 /* TestTweenText.h */, 
+				DDCAA51F049F33D5650FB012 /* TestTweens.h */, 
+				059AD1A359DAF0570058215B /* TestUserShader.h */, 
+				E35A999A55689D67DF3B3B08 /* TestUserShader2.h */, 
+				DF9F2703E0A8FF14F52E9486 /* example.h */, 
+				727D03F76EC292C8C1E3D7E1 /* test.h */, 
 
 			);
 			name = src;
@@ -363,14 +369,14 @@
 			buildActionMask = 2147483647;
 			files = (
 				04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */,
-				922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */,
 								3A631A475DE035FC53ADE5EA /* demo */, 
 				CD59C69314E9E74CD0A11E03 /* ext */, 
 				EFF139F8BA484314F7AAF645 /* images */, 
 				F2CFD518E4E2E05ECEDBB262 /* light_fs.glsl */, 
 				693088A7AB377368EE4A018E /* light_vs.glsl */, 
-				2B0FCA4EF2CDAB7EF6C6252E /* sdf */, 
-				F87DC9641C1B8FCF28948580 /* xmls */, 
+				2B0FCA4EF2CDAB7EF6C6252E /* res.xml.ox */, 
+				F87DC9641C1B8FCF28948580 /* sdf */, 
+				9850666D9BEB7BAAA6AAECDC /* xmls */, 
 
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -441,7 +447,7 @@
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
-				ONLY_ACTIVE_ARCH = NO;
+				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				USER_HEADER_SEARCH_PATHS = "../../..//oxygine/src ../../../..//SDL/include";
@@ -501,6 +507,7 @@
 					"../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.demo;
 				PRODUCT_NAME = Demo_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";
@@ -525,6 +532,7 @@
 					"../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.demo;
 				PRODUCT_NAME = Demo_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";

+ 3 - 9
examples/Demo/src/TestColorFont.h

@@ -98,18 +98,12 @@ private:
     Color _outer;
     unsigned char _adata;
 
-    Vector4 tovec(const Color& c)
-    {
-        return Vector4(c.getRedF(), c.getGreenF(), c.getBlueF(), c.getAlphaF());
-    }
-
     void setUniforms(IVideoDriver* driver, ShaderProgram* prog)
     {
         Color q(_adata, _adata, _adata, _adata);
-        Vector4 c;
-        c = tovec(_outer * q);
+        Vector4 c = (_outer * q).toVector();
         driver->setUniform("_black", &c, 1);
-        c = tovec(getColor() * _style.color * q);
+        c = (getColor() * _style.color * q).toVector();
         driver->setUniform("_white", &c, 1);
     }
 
@@ -146,7 +140,7 @@ public:
         _txt = txt;
 
         TextStyle st;
-        st.font = resources.getResFont("num_fnt_shdr")->getFont();
+        st.font = resources.getResFont("num_fnt_shdr");
         st.vAlign = TextStyle::VALIGN_MIDDLE;
         st.hAlign = TextStyle::HALIGN_MIDDLE;
         //st.color = Color::CornflowerBlue;

+ 1 - 1
examples/Demo/src/TestInputText.h

@@ -20,7 +20,7 @@ public:
         style.hAlign = TextStyle::HALIGN_CENTER;
         style.vAlign = TextStyle::VALIGN_MIDDLE;
         style.multiline = true;
-        style.font = Test::resourcesUI.getResFont("big")->getFont();
+        style.font = Test::resourcesUI.getResFont("big");
         text->setStyle(style);
         text->setText(defText);
 

+ 1 - 1
examples/Demo/src/TestManageRes.h

@@ -74,7 +74,7 @@ public:
         text->setPosition(140.0f, (float)getHeight() - text->getHeight());
 
         TextStyle st;
-        st.font = resources.getResFont("font")->getFont();
+        st.font = resources.getResFont("font");
         st.vAlign = TextStyle::VALIGN_TOP;
         st.color = Color::CornflowerBlue;
         st.multiline = true;

+ 1 - 1
examples/Demo/src/TestMask.h

@@ -47,7 +47,7 @@ public:
 
 
         TextStyle style;
-        style.font = resourcesUI.getResFont("big")->getFont();
+        style.font = resourcesUI.getResFont("big");
         style.color = Color::OrangeRed;
         style.vAlign = TextStyle::VALIGN_MIDDLE;
         style.hAlign = TextStyle::HALIGN_CENTER;

+ 1 - 1
examples/Demo/src/TestPolygon.h

@@ -54,7 +54,7 @@ public:
         float theta = 2.0f * MATH_PI / num * i;
 
         Vector2 dir = Vector2(scalar::cos(theta), scalar::sin(theta));
-        float rad = getRoot()->getHeight() * 0.4f * (1 + scalar::sin(theta * 10) / 10);
+        float rad = getStage()->getHeight() * 0.4f * (1 + scalar::sin(theta * 10) / 10);
         Vector2 p = dir * rad;
 
         Color c = lerp(Color(Color::Lime), Color(Color::Red), scalar::abs(scalar::sin(theta * 3)));

+ 25 - 5
examples/Demo/src/TestRender2Texture.h

@@ -13,6 +13,14 @@ public:
     {
         notify("touch to draw", 100000);
 
+
+        spSprite back = new Sprite;
+        back->setResAnim(resources.getResAnim("bg"));
+        back->attachTo(content);
+        back->setPosition(content->getSize() / 2 - back->getSize() / 2);
+
+
+
         color = Color(255, 255, 255, 32);
 
         Vector2 size = content->getSize();
@@ -27,14 +35,16 @@ public:
         AnimationFrame frame;
         Diffuse df;
         df.base = texture;
+        df.premultiplied = false;
         frame.init(0, df,
                    RectF(0, 0, size.x / texture->getWidth(), size.y / texture->getHeight()),
                    RectF(Vector2(0, 0), size), size);
         preview->setAnimFrame(frame);
-        preview->setBlendMode(blend_disabled);
+
 
         content->addEventListener(TouchEvent::MOVE, CLOSURE(this, &TestRender2Texture::onMove));
         content->addEventListener(TouchEvent::TOUCH_DOWN, CLOSURE(this, &TestRender2Texture::onDown));
+
     }
 
     void onDown(Event* ev)
@@ -46,7 +56,9 @@ public:
     void onMove(Event* ev)
     {
         TouchEvent* te = (TouchEvent*)ev;
-        if (!te->getPointer()->isPressed())
+        bool left = te->getPointer()->isPressed();
+        bool right = te->getPointer()->isPressed(MouseButton_Right);
+        if (!left && !right)
             return;
 
         STDRenderer& renderer = *STDRenderer::instance;
@@ -65,11 +77,19 @@ public:
         renderer.begin(0);
         RectF destRect(te->localPosition - Vector2(16, 16), Vector2(32, 32));
 
-        ResAnim* brush = resources.getResAnim("brush");
+        ResAnim* brush = resources.getResAnim(left ? "brush" : "brush_eraser");
         AnimationFrame frame = brush->getFrame(0);
         const Diffuse& df = frame.getDiffuse();
-        renderer.setTexture(df.base, 0, true);
-        renderer.setBlendMode(blend_premultiplied_alpha);
+        renderer.setTexture(df.base, 0);
+        if (left)
+            renderer.setBlendMode(blend_premultiplied_alpha);
+        else
+        {
+            color = Color::White;
+            renderer.setBlendMode(blend_disabled);
+        }
+
+
         renderer.draw(color, frame.getSrcRect(), destRect);
         renderer.end();
 #else

+ 1 - 1
examples/Demo/src/TestSignedDistanceFont.h

@@ -37,7 +37,7 @@ public:
         _txt = txt;
 
         TextStyle st;
-        st.font = font.getFont();
+        st.font = &font;
         st.vAlign = TextStyle::VALIGN_MIDDLE;
         st.hAlign = TextStyle::HALIGN_MIDDLE;
         st.color = Color::CornflowerBlue;

+ 1 - 1
examples/Demo/src/TestSliding.h

@@ -44,7 +44,7 @@ public:
         title->setSize(map->getSize());
         title->setAlign(TextStyle::VALIGN_MIDDLE, TextStyle::HALIGN_MIDDLE);
         title->setY(-50);
-        title->setFont(resourcesUI.getResFont("big")->getFont());
+        title->setFont(resourcesUI.getResFont("big"));
         title->setColor(Color::Black);
         title->attachTo(map);
 

+ 4 - 2
examples/Demo/src/TestText.h

@@ -49,7 +49,7 @@ public:
         textDetails->setPosition(200.0f, getStage()->getHeight() - 10);
 
         TextStyle st;
-        st.font = resourcesUI.getResFont("main")->getFont();
+        st.font = resourcesUI.getResFont("main");
         st.vAlign = TextStyle::VALIGN_BOTTOM;
         st.color = Color(0xffffffff);
         st.multiline = true;
@@ -132,9 +132,11 @@ public:
         style.multiline = test.multiline;
         style.vAlign = test.vAlign;
         style.hAlign = test.hAlign;
-        style.font = resourcesUI.getResFont("big")->getFont();
+        style.font = resourcesUI.getResFont("big");
         style.color = Color(0xffffffff);
         style.fontSize = test.scale2size;
+        if (!style.fontSize)
+            style.fontSize = style.font->getSize();
         text->setStyle(style);
 
         text->setSize(test.size);

+ 1 - 1
examples/Demo/src/TestTouches.h

@@ -133,7 +133,7 @@ public:
         tf->setX(content->getWidth() - tf->getWidth());
         tf->setY(y);
         tf->setMultiline(true);
-        tf->setFont(Test::resourcesUI.getResFont("big")->getFont());
+        tf->setFont(Test::resourcesUI.getResFont("big"));
         y += 200;
         return tf;
     }

+ 1 - 1
examples/Demo/src/TestTweenText.h

@@ -41,7 +41,7 @@ public:
         content->addChild(text);
 
         TextStyle st;
-        st.font = resourcesUI.getResFont("big")->getFont();
+        st.font = resourcesUI.getResFont("big");
         st.vAlign = TextStyle::VALIGN_MIDDLE;
         st.hAlign = TextStyle::HALIGN_MIDDLE;
         st.multiline = true;

+ 8 - 15
examples/Demo/src/main.cpp

@@ -138,9 +138,12 @@ int main(int argc, char* argv[])
 
 #include "SDL_main.h"
 #include "SDL.h"
+
 extern "C"
 {
     void one(void* param) { mainloop(); }
+    void oneEmsc() { mainloop(); }
+
     int main(int argc, char* argv[])
     {
 
@@ -151,21 +154,11 @@ extern "C"
         SDL_iPhoneSetAnimationCallback(core::getWindow(), 1, one, nullptr);
 #endif
 
+#if EMSCRIPTEN
+        emscripten_set_main_loop(oneEmsc, 0, 0);
+#endif
+
         return 0;
     }
 };
-#endif
-
-
-#ifdef EMSCRIPTEN
-#include <emscripten.h>
-
-void one() { mainloop(); }
-
-int main(int argc, char* argv[])
-{
-    run();
-    emscripten_set_main_loop(one, 0, 0);
-    return 0;
-}
-#endif
+#endif

+ 5 - 0
examples/Demo/src/test.cpp

@@ -61,7 +61,12 @@ spTextField createText(const std::string& txt)
     spTextField text = new TextField();
 
     TextStyle style;
+
+#if OXYGINE_VERSION > 3
+    style.font = Test::resourcesUI.getResFont("main");
+#else
     style.font = Test::resourcesUI.getResFont("main")->getFont();
+#endif
     style.color = textColor;
     style.vAlign = TextStyle::VALIGN_MIDDLE;
     style.hAlign = TextStyle::HALIGN_CENTER;

+ 40 - 0
examples/DemoBox2D/proj.android/build.gradle

@@ -0,0 +1,40 @@
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:1.0.+'
+    }
+}
+
+apply plugin: 'com.android.application'
+
+
+
+dependencies {
+    compile(project(':oxygine-extension'))
+    compile(project(':oxygine-lib')) { exclude module: 'oxygine-extension' }
+}
+
+android {
+    enforceUniquePackageName=false
+        
+    compileSdkVersion 23
+    buildToolsVersion '23.0.2'
+
+
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+            manifest.srcFile 'AndroidManifest.xml'
+            java.srcDirs = ['src']
+            res.srcDirs = ['res']
+            assets.srcDirs = ['../data']
+        }
+    }
+
+    aaptOptions {
+        noCompress 'zip', 'ogg'
+        ignoreAssetsPattern "!*.dll:*.icf"
+    }
+}

+ 5 - 0
examples/DemoBox2D/proj.android/settings.gradle

@@ -0,0 +1,5 @@
+include 'oxygine-lib'
+project(':oxygine-lib').projectDir = new File('../../../..//oxygine-framework/oxygine/SDL/android/lib')
+
+include 'oxygine-extension'
+project(':oxygine-extension').projectDir = new File('../../../..//oxygine-framework/oxygine/SDL/android/extension')

+ 2 - 5
examples/DemoBox2D/proj.cmake/CMakeLists.txt

@@ -10,7 +10,7 @@ file(GLOB_RECURSE BOX2DSRC
 		../box2d/*.cpp
 		../box2d/*.h)
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OXYGINE_CXX_FLAGS}")
 
 add_executable(DemoBox2D ${BOX2DSRC} ../src/Box2DDebugDraw.cpp ../src/main.cpp ../src/example.cpp  ../src/Box2DDebugDraw.h ../src/example.h )
 source_group(box2d FILES ${BOX2DSRC})
@@ -29,9 +29,6 @@ endif(WIN32)
 
 if (EMSCRIPTEN)
 	SET(CMAKE_EXECUTABLE_SUFFIX ".html")
-	set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
-
-	set_target_properties(DemoBox2D PROPERTIES LINK_FLAGS "${linkFlags}")
-
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
 	em_link_pre_js(DemoBox2D  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 8 - 1
examples/DemoBox2D/proj.ios/DemoBox2D/DemoBox2D_ios-Info.plist

@@ -13,7 +13,7 @@
 	<key>CFBundleIcons~ipad</key>
 	<dict/>
 	<key>CFBundleIdentifier</key>
-	<string>oxygine.${PRODUCT_NAME:rfc1034identifier}</string>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
 	<string>6.0</string>
 	<key>CFBundleName</key>
@@ -34,6 +34,8 @@
 	<array>
 		<string>armv7</string>
 	</array>
+	<key>UIRequiresFullScreen</key>
+	<true/>
 	<key>UIStatusBarHidden</key>
 	<true/>
 	<key>UISupportedInterfaceOrientations</key>
@@ -46,6 +48,11 @@
 		<string>UIInterfaceOrientationLandscapeLeft</string>
 		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
 	<key>UIViewControllerBasedStatusBarAppearance</key>
 	<false/>
 </dict>

+ 336 - 321
examples/DemoBox2D/proj.ios/DemoBox2D_ios.xcodeproj/project.pbxproj

@@ -24,56 +24,57 @@
 		1E839D002B2BA83FC83A695A /* fonts in Resources */ = {isa = PBXBuildFile; fileRef = 04FE4D4FB640E0DF92DFB865 /* fonts */; };
 		2DC477AC10D6C07B3FE008F6 /* Box2DDebugDraw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* Box2DDebugDraw.cpp */; };
 		3A631A475DE035FC53ADE5EA /* images in Resources */ = {isa = PBXBuildFile; fileRef = 7F3B12E3C9D554D9FE28101D /* images */; };
-		9223FE881C2D98D0000B1FDA /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9223FE871C2D98D0000B1FDA /* GameController.framework */; };
-		9271CF101BAB66B50085E667 /* b2BroadPhase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEAE1BAB66B50085E667 /* b2BroadPhase.cpp */; };
-		9271CF111BAB66B50085E667 /* b2CollideCircle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEB01BAB66B50085E667 /* b2CollideCircle.cpp */; };
-		9271CF121BAB66B50085E667 /* b2CollideEdge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEB11BAB66B50085E667 /* b2CollideEdge.cpp */; };
-		9271CF131BAB66B50085E667 /* b2CollidePolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEB21BAB66B50085E667 /* b2CollidePolygon.cpp */; };
-		9271CF141BAB66B50085E667 /* b2Collision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEB31BAB66B50085E667 /* b2Collision.cpp */; };
-		9271CF151BAB66B50085E667 /* b2Distance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEB51BAB66B50085E667 /* b2Distance.cpp */; };
-		9271CF161BAB66B50085E667 /* b2DynamicTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEB71BAB66B50085E667 /* b2DynamicTree.cpp */; };
-		9271CF171BAB66B50085E667 /* b2TimeOfImpact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEB91BAB66B50085E667 /* b2TimeOfImpact.cpp */; };
-		9271CF181BAB66B50085E667 /* b2ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEBC1BAB66B50085E667 /* b2ChainShape.cpp */; };
-		9271CF191BAB66B50085E667 /* b2CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEBE1BAB66B50085E667 /* b2CircleShape.cpp */; };
-		9271CF1A1BAB66B50085E667 /* b2EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEC01BAB66B50085E667 /* b2EdgeShape.cpp */; };
-		9271CF1B1BAB66B50085E667 /* b2PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEC21BAB66B50085E667 /* b2PolygonShape.cpp */; };
-		9271CF1C1BAB66B50085E667 /* b2BlockAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEC61BAB66B50085E667 /* b2BlockAllocator.cpp */; };
-		9271CF1D1BAB66B50085E667 /* b2Draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEC81BAB66B50085E667 /* b2Draw.cpp */; };
-		9271CF1E1BAB66B50085E667 /* b2Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CECB1BAB66B50085E667 /* b2Math.cpp */; };
-		9271CF1F1BAB66B50085E667 /* b2Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CECD1BAB66B50085E667 /* b2Settings.cpp */; };
-		9271CF201BAB66B50085E667 /* b2StackAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CECF1BAB66B50085E667 /* b2StackAllocator.cpp */; };
-		9271CF211BAB66B50085E667 /* b2Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CED11BAB66B50085E667 /* b2Timer.cpp */; };
-		9271CF221BAB66B50085E667 /* b2Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CED41BAB66B50085E667 /* b2Body.cpp */; };
-		9271CF231BAB66B50085E667 /* b2ContactManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CED61BAB66B50085E667 /* b2ContactManager.cpp */; };
-		9271CF241BAB66B50085E667 /* b2Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CED81BAB66B50085E667 /* b2Fixture.cpp */; };
-		9271CF251BAB66B50085E667 /* b2Island.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEDA1BAB66B50085E667 /* b2Island.cpp */; };
-		9271CF261BAB66B50085E667 /* b2World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEDD1BAB66B50085E667 /* b2World.cpp */; };
-		9271CF271BAB66B50085E667 /* b2WorldCallbacks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEDF1BAB66B50085E667 /* b2WorldCallbacks.cpp */; };
-		9271CF281BAB66B50085E667 /* b2ChainAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEE21BAB66B50085E667 /* b2ChainAndCircleContact.cpp */; };
-		9271CF291BAB66B50085E667 /* b2ChainAndPolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEE41BAB66B50085E667 /* b2ChainAndPolygonContact.cpp */; };
-		9271CF2A1BAB66B50085E667 /* b2CircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEE61BAB66B50085E667 /* b2CircleContact.cpp */; };
-		9271CF2B1BAB66B50085E667 /* b2Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEE81BAB66B50085E667 /* b2Contact.cpp */; };
-		9271CF2C1BAB66B50085E667 /* b2ContactSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEEA1BAB66B50085E667 /* b2ContactSolver.cpp */; };
-		9271CF2D1BAB66B50085E667 /* b2EdgeAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEEC1BAB66B50085E667 /* b2EdgeAndCircleContact.cpp */; };
-		9271CF2E1BAB66B50085E667 /* b2EdgeAndPolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEEE1BAB66B50085E667 /* b2EdgeAndPolygonContact.cpp */; };
-		9271CF2F1BAB66B50085E667 /* b2PolygonAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEF01BAB66B50085E667 /* b2PolygonAndCircleContact.cpp */; };
-		9271CF301BAB66B50085E667 /* b2PolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEF21BAB66B50085E667 /* b2PolygonContact.cpp */; };
-		9271CF311BAB66B50085E667 /* b2DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEF51BAB66B50085E667 /* b2DistanceJoint.cpp */; };
-		9271CF321BAB66B50085E667 /* b2FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEF71BAB66B50085E667 /* b2FrictionJoint.cpp */; };
-		9271CF331BAB66B50085E667 /* b2GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEF91BAB66B50085E667 /* b2GearJoint.cpp */; };
-		9271CF341BAB66B50085E667 /* b2Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEFB1BAB66B50085E667 /* b2Joint.cpp */; };
-		9271CF351BAB66B50085E667 /* b2MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEFD1BAB66B50085E667 /* b2MotorJoint.cpp */; };
-		9271CF361BAB66B50085E667 /* b2MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CEFF1BAB66B50085E667 /* b2MouseJoint.cpp */; };
-		9271CF371BAB66B50085E667 /* b2PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CF011BAB66B50085E667 /* b2PrismaticJoint.cpp */; };
-		9271CF381BAB66B50085E667 /* b2PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CF031BAB66B50085E667 /* b2PulleyJoint.cpp */; };
-		9271CF391BAB66B50085E667 /* b2RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CF051BAB66B50085E667 /* b2RevoluteJoint.cpp */; };
-		9271CF3A1BAB66B50085E667 /* b2RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CF071BAB66B50085E667 /* b2RopeJoint.cpp */; };
-		9271CF3B1BAB66B50085E667 /* b2WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CF091BAB66B50085E667 /* b2WeldJoint.cpp */; };
-		9271CF3C1BAB66B50085E667 /* b2WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CF0B1BAB66B50085E667 /* b2WheelJoint.cpp */; };
-		9271CF3D1BAB66B50085E667 /* b2Rope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9271CF0E1BAB66B50085E667 /* b2Rope.cpp */; };
-		C8860D93875589970329DCCD /* example.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DA100C319512824B7570663 /* example.cpp */; };
+		9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9223FE7E1C2D913D000B1FDA /* GameController.framework */; };
+		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
+		AD34D3F81D8EEBAD005EF2DE /* b2BroadPhase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3961D8EEBAD005EF2DE /* b2BroadPhase.cpp */; };
+		AD34D3F91D8EEBAD005EF2DE /* b2CollideCircle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3981D8EEBAD005EF2DE /* b2CollideCircle.cpp */; };
+		AD34D3FA1D8EEBAD005EF2DE /* b2CollideEdge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3991D8EEBAD005EF2DE /* b2CollideEdge.cpp */; };
+		AD34D3FB1D8EEBAD005EF2DE /* b2CollidePolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D39A1D8EEBAD005EF2DE /* b2CollidePolygon.cpp */; };
+		AD34D3FC1D8EEBAD005EF2DE /* b2Collision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D39B1D8EEBAD005EF2DE /* b2Collision.cpp */; };
+		AD34D3FD1D8EEBAD005EF2DE /* b2Distance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D39D1D8EEBAD005EF2DE /* b2Distance.cpp */; };
+		AD34D3FE1D8EEBAD005EF2DE /* b2DynamicTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D39F1D8EEBAD005EF2DE /* b2DynamicTree.cpp */; };
+		AD34D3FF1D8EEBAD005EF2DE /* b2TimeOfImpact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3A11D8EEBAD005EF2DE /* b2TimeOfImpact.cpp */; };
+		AD34D4001D8EEBAD005EF2DE /* b2ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3A41D8EEBAD005EF2DE /* b2ChainShape.cpp */; };
+		AD34D4011D8EEBAD005EF2DE /* b2CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3A61D8EEBAD005EF2DE /* b2CircleShape.cpp */; };
+		AD34D4021D8EEBAD005EF2DE /* b2EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3A81D8EEBAD005EF2DE /* b2EdgeShape.cpp */; };
+		AD34D4031D8EEBAD005EF2DE /* b2PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3AA1D8EEBAD005EF2DE /* b2PolygonShape.cpp */; };
+		AD34D4041D8EEBAD005EF2DE /* b2BlockAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3AE1D8EEBAD005EF2DE /* b2BlockAllocator.cpp */; };
+		AD34D4051D8EEBAD005EF2DE /* b2Draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3B01D8EEBAD005EF2DE /* b2Draw.cpp */; };
+		AD34D4061D8EEBAD005EF2DE /* b2Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3B31D8EEBAD005EF2DE /* b2Math.cpp */; };
+		AD34D4071D8EEBAD005EF2DE /* b2Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3B51D8EEBAD005EF2DE /* b2Settings.cpp */; };
+		AD34D4081D8EEBAD005EF2DE /* b2StackAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3B71D8EEBAD005EF2DE /* b2StackAllocator.cpp */; };
+		AD34D4091D8EEBAD005EF2DE /* b2Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3B91D8EEBAD005EF2DE /* b2Timer.cpp */; };
+		AD34D40A1D8EEBAD005EF2DE /* b2Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3BC1D8EEBAD005EF2DE /* b2Body.cpp */; };
+		AD34D40B1D8EEBAD005EF2DE /* b2ContactManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3BE1D8EEBAD005EF2DE /* b2ContactManager.cpp */; };
+		AD34D40C1D8EEBAD005EF2DE /* b2Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3C01D8EEBAD005EF2DE /* b2Fixture.cpp */; };
+		AD34D40D1D8EEBAD005EF2DE /* b2Island.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3C21D8EEBAD005EF2DE /* b2Island.cpp */; };
+		AD34D40E1D8EEBAD005EF2DE /* b2World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3C51D8EEBAD005EF2DE /* b2World.cpp */; };
+		AD34D40F1D8EEBAD005EF2DE /* b2WorldCallbacks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3C71D8EEBAD005EF2DE /* b2WorldCallbacks.cpp */; };
+		AD34D4101D8EEBAD005EF2DE /* b2ChainAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3CA1D8EEBAD005EF2DE /* b2ChainAndCircleContact.cpp */; };
+		AD34D4111D8EEBAD005EF2DE /* b2ChainAndPolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3CC1D8EEBAD005EF2DE /* b2ChainAndPolygonContact.cpp */; };
+		AD34D4121D8EEBAD005EF2DE /* b2CircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3CE1D8EEBAD005EF2DE /* b2CircleContact.cpp */; };
+		AD34D4131D8EEBAD005EF2DE /* b2Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3D01D8EEBAD005EF2DE /* b2Contact.cpp */; };
+		AD34D4141D8EEBAD005EF2DE /* b2ContactSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3D21D8EEBAD005EF2DE /* b2ContactSolver.cpp */; };
+		AD34D4151D8EEBAD005EF2DE /* b2EdgeAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3D41D8EEBAD005EF2DE /* b2EdgeAndCircleContact.cpp */; };
+		AD34D4161D8EEBAD005EF2DE /* b2EdgeAndPolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3D61D8EEBAD005EF2DE /* b2EdgeAndPolygonContact.cpp */; };
+		AD34D4171D8EEBAD005EF2DE /* b2PolygonAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3D81D8EEBAD005EF2DE /* b2PolygonAndCircleContact.cpp */; };
+		AD34D4181D8EEBAD005EF2DE /* b2PolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3DA1D8EEBAD005EF2DE /* b2PolygonContact.cpp */; };
+		AD34D4191D8EEBAD005EF2DE /* b2DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3DD1D8EEBAD005EF2DE /* b2DistanceJoint.cpp */; };
+		AD34D41A1D8EEBAD005EF2DE /* b2FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3DF1D8EEBAD005EF2DE /* b2FrictionJoint.cpp */; };
+		AD34D41B1D8EEBAD005EF2DE /* b2GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3E11D8EEBAD005EF2DE /* b2GearJoint.cpp */; };
+		AD34D41C1D8EEBAD005EF2DE /* b2Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3E31D8EEBAD005EF2DE /* b2Joint.cpp */; };
+		AD34D41D1D8EEBAD005EF2DE /* b2MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3E51D8EEBAD005EF2DE /* b2MotorJoint.cpp */; };
+		AD34D41E1D8EEBAD005EF2DE /* b2MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3E71D8EEBAD005EF2DE /* b2MouseJoint.cpp */; };
+		AD34D41F1D8EEBAD005EF2DE /* b2PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3E91D8EEBAD005EF2DE /* b2PrismaticJoint.cpp */; };
+		AD34D4201D8EEBAD005EF2DE /* b2PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3EB1D8EEBAD005EF2DE /* b2PulleyJoint.cpp */; };
+		AD34D4211D8EEBAD005EF2DE /* b2RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3ED1D8EEBAD005EF2DE /* b2RevoluteJoint.cpp */; };
+		AD34D4221D8EEBAD005EF2DE /* b2RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3EF1D8EEBAD005EF2DE /* b2RopeJoint.cpp */; };
+		AD34D4231D8EEBAD005EF2DE /* b2WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3F11D8EEBAD005EF2DE /* b2WeldJoint.cpp */; };
+		AD34D4241D8EEBAD005EF2DE /* b2WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3F31D8EEBAD005EF2DE /* b2WheelJoint.cpp */; };
+		AD34D4251D8EEBAD005EF2DE /* b2Rope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD34D3F61D8EEBAD005EF2DE /* b2Rope.cpp */; };
+		C8860D93875589970329DCCD /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DA100C319512824B7570663 /* main.cpp */; };
 		CD59C69314E9E74CD0A11E03 /* res.xml in Resources */ = {isa = PBXBuildFile; fileRef = F6123B1E6FE4471A00F49751 /* res.xml */; };
-		DA49ED8903C628BA578C8670 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF9628FC8D38F9748F0CDEB /* main.cpp */; };
+		DA49ED8903C628BA578C8670 /* example.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF9628FC8D38F9748F0CDEB /* example.cpp */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -105,6 +106,13 @@
 			remoteGlobalIDString = C3E86F4B16EBC8A500052915;
 			remoteInfo = oxygine_ios;
 		};
+		AD34D2851D8EE94A005EF2DE /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 04998D2F17F8A96E003441C3 /* SDL.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = FAB598141BB5C1B100BE72C5;
+			remoteInfo = "libSDL-tv";
+		};
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
@@ -124,105 +132,106 @@
 		04998EF617F8B6F3003441C3 /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjpeg.a; path = "../../..//oxygine/third_party/ios/libraries/libjpeg.a"; sourceTree = "<group>"; };
 		04E9AD3E1876FE84006A7317 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = DemoBox2D/Images.xcassets; sourceTree = "<group>"; };
 		04FE4D4FB640E0DF92DFB865 /* fonts */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = fonts; path = ../data/fonts; sourceTree = "<group>"; };
-		0BF9628FC8D38F9748F0CDEB /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../src/main.cpp; sourceTree = "<group>"; };
+		0BF9628FC8D38F9748F0CDEB /* example.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = example.cpp; path = ../src/example.cpp; sourceTree = "<group>"; };
 		360377333740D8A2FD15BBE6 /* Box2DDebugDraw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Box2DDebugDraw.cpp; path = ../src/Box2DDebugDraw.cpp; sourceTree = "<group>"; };
-		4DA100C319512824B7570663 /* example.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = example.cpp; path = ../src/example.cpp; sourceTree = "<group>"; };
+		4DA100C319512824B7570663 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../src/main.cpp; sourceTree = "<group>"; };
 		5DE458993031811A4C7D28C1 /* Box2DDebugDraw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Box2DDebugDraw.h; path = ../src/Box2DDebugDraw.h; sourceTree = "<group>"; };
 		7F3B12E3C9D554D9FE28101D /* images */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = images; path = ../data/images; sourceTree = "<group>"; };
-		9223FE871C2D98D0000B1FDA /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
-		9271CEAC1BAB66B50085E667 /* Box2D.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Box2D.h; sourceTree = "<group>"; };
-		9271CEAE1BAB66B50085E667 /* b2BroadPhase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2BroadPhase.cpp; sourceTree = "<group>"; };
-		9271CEAF1BAB66B50085E667 /* b2BroadPhase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2BroadPhase.h; sourceTree = "<group>"; };
-		9271CEB01BAB66B50085E667 /* b2CollideCircle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollideCircle.cpp; sourceTree = "<group>"; };
-		9271CEB11BAB66B50085E667 /* b2CollideEdge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollideEdge.cpp; sourceTree = "<group>"; };
-		9271CEB21BAB66B50085E667 /* b2CollidePolygon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollidePolygon.cpp; sourceTree = "<group>"; };
-		9271CEB31BAB66B50085E667 /* b2Collision.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Collision.cpp; sourceTree = "<group>"; };
-		9271CEB41BAB66B50085E667 /* b2Collision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Collision.h; sourceTree = "<group>"; };
-		9271CEB51BAB66B50085E667 /* b2Distance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Distance.cpp; sourceTree = "<group>"; };
-		9271CEB61BAB66B50085E667 /* b2Distance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Distance.h; sourceTree = "<group>"; };
-		9271CEB71BAB66B50085E667 /* b2DynamicTree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2DynamicTree.cpp; sourceTree = "<group>"; };
-		9271CEB81BAB66B50085E667 /* b2DynamicTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2DynamicTree.h; sourceTree = "<group>"; };
-		9271CEB91BAB66B50085E667 /* b2TimeOfImpact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2TimeOfImpact.cpp; sourceTree = "<group>"; };
-		9271CEBA1BAB66B50085E667 /* b2TimeOfImpact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2TimeOfImpact.h; sourceTree = "<group>"; };
-		9271CEBC1BAB66B50085E667 /* b2ChainShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainShape.cpp; sourceTree = "<group>"; };
-		9271CEBD1BAB66B50085E667 /* b2ChainShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ChainShape.h; sourceTree = "<group>"; };
-		9271CEBE1BAB66B50085E667 /* b2CircleShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CircleShape.cpp; sourceTree = "<group>"; };
-		9271CEBF1BAB66B50085E667 /* b2CircleShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2CircleShape.h; sourceTree = "<group>"; };
-		9271CEC01BAB66B50085E667 /* b2EdgeShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeShape.cpp; sourceTree = "<group>"; };
-		9271CEC11BAB66B50085E667 /* b2EdgeShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2EdgeShape.h; sourceTree = "<group>"; };
-		9271CEC21BAB66B50085E667 /* b2PolygonShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonShape.cpp; sourceTree = "<group>"; };
-		9271CEC31BAB66B50085E667 /* b2PolygonShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PolygonShape.h; sourceTree = "<group>"; };
-		9271CEC41BAB66B50085E667 /* b2Shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Shape.h; sourceTree = "<group>"; };
-		9271CEC61BAB66B50085E667 /* b2BlockAllocator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2BlockAllocator.cpp; sourceTree = "<group>"; };
-		9271CEC71BAB66B50085E667 /* b2BlockAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2BlockAllocator.h; sourceTree = "<group>"; };
-		9271CEC81BAB66B50085E667 /* b2Draw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Draw.cpp; sourceTree = "<group>"; };
-		9271CEC91BAB66B50085E667 /* b2Draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Draw.h; sourceTree = "<group>"; };
-		9271CECA1BAB66B50085E667 /* b2GrowableStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2GrowableStack.h; sourceTree = "<group>"; };
-		9271CECB1BAB66B50085E667 /* b2Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Math.cpp; sourceTree = "<group>"; };
-		9271CECC1BAB66B50085E667 /* b2Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Math.h; sourceTree = "<group>"; };
-		9271CECD1BAB66B50085E667 /* b2Settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Settings.cpp; sourceTree = "<group>"; };
-		9271CECE1BAB66B50085E667 /* b2Settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Settings.h; sourceTree = "<group>"; };
-		9271CECF1BAB66B50085E667 /* b2StackAllocator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2StackAllocator.cpp; sourceTree = "<group>"; };
-		9271CED01BAB66B50085E667 /* b2StackAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2StackAllocator.h; sourceTree = "<group>"; };
-		9271CED11BAB66B50085E667 /* b2Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Timer.cpp; sourceTree = "<group>"; };
-		9271CED21BAB66B50085E667 /* b2Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Timer.h; sourceTree = "<group>"; };
-		9271CED41BAB66B50085E667 /* b2Body.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Body.cpp; sourceTree = "<group>"; };
-		9271CED51BAB66B50085E667 /* b2Body.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Body.h; sourceTree = "<group>"; };
-		9271CED61BAB66B50085E667 /* b2ContactManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ContactManager.cpp; sourceTree = "<group>"; };
-		9271CED71BAB66B50085E667 /* b2ContactManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ContactManager.h; sourceTree = "<group>"; };
-		9271CED81BAB66B50085E667 /* b2Fixture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Fixture.cpp; sourceTree = "<group>"; };
-		9271CED91BAB66B50085E667 /* b2Fixture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Fixture.h; sourceTree = "<group>"; };
-		9271CEDA1BAB66B50085E667 /* b2Island.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Island.cpp; sourceTree = "<group>"; };
-		9271CEDB1BAB66B50085E667 /* b2Island.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Island.h; sourceTree = "<group>"; };
-		9271CEDC1BAB66B50085E667 /* b2TimeStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2TimeStep.h; sourceTree = "<group>"; };
-		9271CEDD1BAB66B50085E667 /* b2World.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2World.cpp; sourceTree = "<group>"; };
-		9271CEDE1BAB66B50085E667 /* b2World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2World.h; sourceTree = "<group>"; };
-		9271CEDF1BAB66B50085E667 /* b2WorldCallbacks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2WorldCallbacks.cpp; sourceTree = "<group>"; };
-		9271CEE01BAB66B50085E667 /* b2WorldCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2WorldCallbacks.h; sourceTree = "<group>"; };
-		9271CEE21BAB66B50085E667 /* b2ChainAndCircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainAndCircleContact.cpp; sourceTree = "<group>"; };
-		9271CEE31BAB66B50085E667 /* b2ChainAndCircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ChainAndCircleContact.h; sourceTree = "<group>"; };
-		9271CEE41BAB66B50085E667 /* b2ChainAndPolygonContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainAndPolygonContact.cpp; sourceTree = "<group>"; };
-		9271CEE51BAB66B50085E667 /* b2ChainAndPolygonContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ChainAndPolygonContact.h; sourceTree = "<group>"; };
-		9271CEE61BAB66B50085E667 /* b2CircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CircleContact.cpp; sourceTree = "<group>"; };
-		9271CEE71BAB66B50085E667 /* b2CircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2CircleContact.h; sourceTree = "<group>"; };
-		9271CEE81BAB66B50085E667 /* b2Contact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Contact.cpp; sourceTree = "<group>"; };
-		9271CEE91BAB66B50085E667 /* b2Contact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Contact.h; sourceTree = "<group>"; };
-		9271CEEA1BAB66B50085E667 /* b2ContactSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ContactSolver.cpp; sourceTree = "<group>"; };
-		9271CEEB1BAB66B50085E667 /* b2ContactSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ContactSolver.h; sourceTree = "<group>"; };
-		9271CEEC1BAB66B50085E667 /* b2EdgeAndCircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeAndCircleContact.cpp; sourceTree = "<group>"; };
-		9271CEED1BAB66B50085E667 /* b2EdgeAndCircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2EdgeAndCircleContact.h; sourceTree = "<group>"; };
-		9271CEEE1BAB66B50085E667 /* b2EdgeAndPolygonContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeAndPolygonContact.cpp; sourceTree = "<group>"; };
-		9271CEEF1BAB66B50085E667 /* b2EdgeAndPolygonContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2EdgeAndPolygonContact.h; sourceTree = "<group>"; };
-		9271CEF01BAB66B50085E667 /* b2PolygonAndCircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonAndCircleContact.cpp; sourceTree = "<group>"; };
-		9271CEF11BAB66B50085E667 /* b2PolygonAndCircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PolygonAndCircleContact.h; sourceTree = "<group>"; };
-		9271CEF21BAB66B50085E667 /* b2PolygonContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonContact.cpp; sourceTree = "<group>"; };
-		9271CEF31BAB66B50085E667 /* b2PolygonContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PolygonContact.h; sourceTree = "<group>"; };
-		9271CEF51BAB66B50085E667 /* b2DistanceJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2DistanceJoint.cpp; sourceTree = "<group>"; };
-		9271CEF61BAB66B50085E667 /* b2DistanceJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2DistanceJoint.h; sourceTree = "<group>"; };
-		9271CEF71BAB66B50085E667 /* b2FrictionJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2FrictionJoint.cpp; sourceTree = "<group>"; };
-		9271CEF81BAB66B50085E667 /* b2FrictionJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2FrictionJoint.h; sourceTree = "<group>"; };
-		9271CEF91BAB66B50085E667 /* b2GearJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2GearJoint.cpp; sourceTree = "<group>"; };
-		9271CEFA1BAB66B50085E667 /* b2GearJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2GearJoint.h; sourceTree = "<group>"; };
-		9271CEFB1BAB66B50085E667 /* b2Joint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Joint.cpp; sourceTree = "<group>"; };
-		9271CEFC1BAB66B50085E667 /* b2Joint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Joint.h; sourceTree = "<group>"; };
-		9271CEFD1BAB66B50085E667 /* b2MotorJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2MotorJoint.cpp; sourceTree = "<group>"; };
-		9271CEFE1BAB66B50085E667 /* b2MotorJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2MotorJoint.h; sourceTree = "<group>"; };
-		9271CEFF1BAB66B50085E667 /* b2MouseJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2MouseJoint.cpp; sourceTree = "<group>"; };
-		9271CF001BAB66B50085E667 /* b2MouseJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2MouseJoint.h; sourceTree = "<group>"; };
-		9271CF011BAB66B50085E667 /* b2PrismaticJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PrismaticJoint.cpp; sourceTree = "<group>"; };
-		9271CF021BAB66B50085E667 /* b2PrismaticJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PrismaticJoint.h; sourceTree = "<group>"; };
-		9271CF031BAB66B50085E667 /* b2PulleyJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PulleyJoint.cpp; sourceTree = "<group>"; };
-		9271CF041BAB66B50085E667 /* b2PulleyJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PulleyJoint.h; sourceTree = "<group>"; };
-		9271CF051BAB66B50085E667 /* b2RevoluteJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2RevoluteJoint.cpp; sourceTree = "<group>"; };
-		9271CF061BAB66B50085E667 /* b2RevoluteJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2RevoluteJoint.h; sourceTree = "<group>"; };
-		9271CF071BAB66B50085E667 /* b2RopeJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2RopeJoint.cpp; sourceTree = "<group>"; };
-		9271CF081BAB66B50085E667 /* b2RopeJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2RopeJoint.h; sourceTree = "<group>"; };
-		9271CF091BAB66B50085E667 /* b2WeldJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2WeldJoint.cpp; sourceTree = "<group>"; };
-		9271CF0A1BAB66B50085E667 /* b2WeldJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2WeldJoint.h; sourceTree = "<group>"; };
-		9271CF0B1BAB66B50085E667 /* b2WheelJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2WheelJoint.cpp; sourceTree = "<group>"; };
-		9271CF0C1BAB66B50085E667 /* b2WheelJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2WheelJoint.h; sourceTree = "<group>"; };
-		9271CF0E1BAB66B50085E667 /* b2Rope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Rope.cpp; sourceTree = "<group>"; };
-		9271CF0F1BAB66B50085E667 /* b2Rope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Rope.h; sourceTree = "<group>"; };
+		9223FE7E1C2D913D000B1FDA /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
+		AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
+		AD34D3941D8EEBAD005EF2DE /* Box2D.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Box2D.h; sourceTree = "<group>"; };
+		AD34D3961D8EEBAD005EF2DE /* b2BroadPhase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2BroadPhase.cpp; sourceTree = "<group>"; };
+		AD34D3971D8EEBAD005EF2DE /* b2BroadPhase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2BroadPhase.h; sourceTree = "<group>"; };
+		AD34D3981D8EEBAD005EF2DE /* b2CollideCircle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollideCircle.cpp; sourceTree = "<group>"; };
+		AD34D3991D8EEBAD005EF2DE /* b2CollideEdge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollideEdge.cpp; sourceTree = "<group>"; };
+		AD34D39A1D8EEBAD005EF2DE /* b2CollidePolygon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollidePolygon.cpp; sourceTree = "<group>"; };
+		AD34D39B1D8EEBAD005EF2DE /* b2Collision.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Collision.cpp; sourceTree = "<group>"; };
+		AD34D39C1D8EEBAD005EF2DE /* b2Collision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Collision.h; sourceTree = "<group>"; };
+		AD34D39D1D8EEBAD005EF2DE /* b2Distance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Distance.cpp; sourceTree = "<group>"; };
+		AD34D39E1D8EEBAD005EF2DE /* b2Distance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Distance.h; sourceTree = "<group>"; };
+		AD34D39F1D8EEBAD005EF2DE /* b2DynamicTree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2DynamicTree.cpp; sourceTree = "<group>"; };
+		AD34D3A01D8EEBAD005EF2DE /* b2DynamicTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2DynamicTree.h; sourceTree = "<group>"; };
+		AD34D3A11D8EEBAD005EF2DE /* b2TimeOfImpact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2TimeOfImpact.cpp; sourceTree = "<group>"; };
+		AD34D3A21D8EEBAD005EF2DE /* b2TimeOfImpact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2TimeOfImpact.h; sourceTree = "<group>"; };
+		AD34D3A41D8EEBAD005EF2DE /* b2ChainShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainShape.cpp; sourceTree = "<group>"; };
+		AD34D3A51D8EEBAD005EF2DE /* b2ChainShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ChainShape.h; sourceTree = "<group>"; };
+		AD34D3A61D8EEBAD005EF2DE /* b2CircleShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CircleShape.cpp; sourceTree = "<group>"; };
+		AD34D3A71D8EEBAD005EF2DE /* b2CircleShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2CircleShape.h; sourceTree = "<group>"; };
+		AD34D3A81D8EEBAD005EF2DE /* b2EdgeShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeShape.cpp; sourceTree = "<group>"; };
+		AD34D3A91D8EEBAD005EF2DE /* b2EdgeShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2EdgeShape.h; sourceTree = "<group>"; };
+		AD34D3AA1D8EEBAD005EF2DE /* b2PolygonShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonShape.cpp; sourceTree = "<group>"; };
+		AD34D3AB1D8EEBAD005EF2DE /* b2PolygonShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PolygonShape.h; sourceTree = "<group>"; };
+		AD34D3AC1D8EEBAD005EF2DE /* b2Shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Shape.h; sourceTree = "<group>"; };
+		AD34D3AE1D8EEBAD005EF2DE /* b2BlockAllocator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2BlockAllocator.cpp; sourceTree = "<group>"; };
+		AD34D3AF1D8EEBAD005EF2DE /* b2BlockAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2BlockAllocator.h; sourceTree = "<group>"; };
+		AD34D3B01D8EEBAD005EF2DE /* b2Draw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Draw.cpp; sourceTree = "<group>"; };
+		AD34D3B11D8EEBAD005EF2DE /* b2Draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Draw.h; sourceTree = "<group>"; };
+		AD34D3B21D8EEBAD005EF2DE /* b2GrowableStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2GrowableStack.h; sourceTree = "<group>"; };
+		AD34D3B31D8EEBAD005EF2DE /* b2Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Math.cpp; sourceTree = "<group>"; };
+		AD34D3B41D8EEBAD005EF2DE /* b2Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Math.h; sourceTree = "<group>"; };
+		AD34D3B51D8EEBAD005EF2DE /* b2Settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Settings.cpp; sourceTree = "<group>"; };
+		AD34D3B61D8EEBAD005EF2DE /* b2Settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Settings.h; sourceTree = "<group>"; };
+		AD34D3B71D8EEBAD005EF2DE /* b2StackAllocator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2StackAllocator.cpp; sourceTree = "<group>"; };
+		AD34D3B81D8EEBAD005EF2DE /* b2StackAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2StackAllocator.h; sourceTree = "<group>"; };
+		AD34D3B91D8EEBAD005EF2DE /* b2Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Timer.cpp; sourceTree = "<group>"; };
+		AD34D3BA1D8EEBAD005EF2DE /* b2Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Timer.h; sourceTree = "<group>"; };
+		AD34D3BC1D8EEBAD005EF2DE /* b2Body.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Body.cpp; sourceTree = "<group>"; };
+		AD34D3BD1D8EEBAD005EF2DE /* b2Body.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Body.h; sourceTree = "<group>"; };
+		AD34D3BE1D8EEBAD005EF2DE /* b2ContactManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ContactManager.cpp; sourceTree = "<group>"; };
+		AD34D3BF1D8EEBAD005EF2DE /* b2ContactManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ContactManager.h; sourceTree = "<group>"; };
+		AD34D3C01D8EEBAD005EF2DE /* b2Fixture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Fixture.cpp; sourceTree = "<group>"; };
+		AD34D3C11D8EEBAD005EF2DE /* b2Fixture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Fixture.h; sourceTree = "<group>"; };
+		AD34D3C21D8EEBAD005EF2DE /* b2Island.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Island.cpp; sourceTree = "<group>"; };
+		AD34D3C31D8EEBAD005EF2DE /* b2Island.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Island.h; sourceTree = "<group>"; };
+		AD34D3C41D8EEBAD005EF2DE /* b2TimeStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2TimeStep.h; sourceTree = "<group>"; };
+		AD34D3C51D8EEBAD005EF2DE /* b2World.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2World.cpp; sourceTree = "<group>"; };
+		AD34D3C61D8EEBAD005EF2DE /* b2World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2World.h; sourceTree = "<group>"; };
+		AD34D3C71D8EEBAD005EF2DE /* b2WorldCallbacks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2WorldCallbacks.cpp; sourceTree = "<group>"; };
+		AD34D3C81D8EEBAD005EF2DE /* b2WorldCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2WorldCallbacks.h; sourceTree = "<group>"; };
+		AD34D3CA1D8EEBAD005EF2DE /* b2ChainAndCircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainAndCircleContact.cpp; sourceTree = "<group>"; };
+		AD34D3CB1D8EEBAD005EF2DE /* b2ChainAndCircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ChainAndCircleContact.h; sourceTree = "<group>"; };
+		AD34D3CC1D8EEBAD005EF2DE /* b2ChainAndPolygonContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainAndPolygonContact.cpp; sourceTree = "<group>"; };
+		AD34D3CD1D8EEBAD005EF2DE /* b2ChainAndPolygonContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ChainAndPolygonContact.h; sourceTree = "<group>"; };
+		AD34D3CE1D8EEBAD005EF2DE /* b2CircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CircleContact.cpp; sourceTree = "<group>"; };
+		AD34D3CF1D8EEBAD005EF2DE /* b2CircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2CircleContact.h; sourceTree = "<group>"; };
+		AD34D3D01D8EEBAD005EF2DE /* b2Contact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Contact.cpp; sourceTree = "<group>"; };
+		AD34D3D11D8EEBAD005EF2DE /* b2Contact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Contact.h; sourceTree = "<group>"; };
+		AD34D3D21D8EEBAD005EF2DE /* b2ContactSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ContactSolver.cpp; sourceTree = "<group>"; };
+		AD34D3D31D8EEBAD005EF2DE /* b2ContactSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ContactSolver.h; sourceTree = "<group>"; };
+		AD34D3D41D8EEBAD005EF2DE /* b2EdgeAndCircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeAndCircleContact.cpp; sourceTree = "<group>"; };
+		AD34D3D51D8EEBAD005EF2DE /* b2EdgeAndCircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2EdgeAndCircleContact.h; sourceTree = "<group>"; };
+		AD34D3D61D8EEBAD005EF2DE /* b2EdgeAndPolygonContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeAndPolygonContact.cpp; sourceTree = "<group>"; };
+		AD34D3D71D8EEBAD005EF2DE /* b2EdgeAndPolygonContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2EdgeAndPolygonContact.h; sourceTree = "<group>"; };
+		AD34D3D81D8EEBAD005EF2DE /* b2PolygonAndCircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonAndCircleContact.cpp; sourceTree = "<group>"; };
+		AD34D3D91D8EEBAD005EF2DE /* b2PolygonAndCircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PolygonAndCircleContact.h; sourceTree = "<group>"; };
+		AD34D3DA1D8EEBAD005EF2DE /* b2PolygonContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonContact.cpp; sourceTree = "<group>"; };
+		AD34D3DB1D8EEBAD005EF2DE /* b2PolygonContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PolygonContact.h; sourceTree = "<group>"; };
+		AD34D3DD1D8EEBAD005EF2DE /* b2DistanceJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2DistanceJoint.cpp; sourceTree = "<group>"; };
+		AD34D3DE1D8EEBAD005EF2DE /* b2DistanceJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2DistanceJoint.h; sourceTree = "<group>"; };
+		AD34D3DF1D8EEBAD005EF2DE /* b2FrictionJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2FrictionJoint.cpp; sourceTree = "<group>"; };
+		AD34D3E01D8EEBAD005EF2DE /* b2FrictionJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2FrictionJoint.h; sourceTree = "<group>"; };
+		AD34D3E11D8EEBAD005EF2DE /* b2GearJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2GearJoint.cpp; sourceTree = "<group>"; };
+		AD34D3E21D8EEBAD005EF2DE /* b2GearJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2GearJoint.h; sourceTree = "<group>"; };
+		AD34D3E31D8EEBAD005EF2DE /* b2Joint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Joint.cpp; sourceTree = "<group>"; };
+		AD34D3E41D8EEBAD005EF2DE /* b2Joint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Joint.h; sourceTree = "<group>"; };
+		AD34D3E51D8EEBAD005EF2DE /* b2MotorJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2MotorJoint.cpp; sourceTree = "<group>"; };
+		AD34D3E61D8EEBAD005EF2DE /* b2MotorJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2MotorJoint.h; sourceTree = "<group>"; };
+		AD34D3E71D8EEBAD005EF2DE /* b2MouseJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2MouseJoint.cpp; sourceTree = "<group>"; };
+		AD34D3E81D8EEBAD005EF2DE /* b2MouseJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2MouseJoint.h; sourceTree = "<group>"; };
+		AD34D3E91D8EEBAD005EF2DE /* b2PrismaticJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PrismaticJoint.cpp; sourceTree = "<group>"; };
+		AD34D3EA1D8EEBAD005EF2DE /* b2PrismaticJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PrismaticJoint.h; sourceTree = "<group>"; };
+		AD34D3EB1D8EEBAD005EF2DE /* b2PulleyJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PulleyJoint.cpp; sourceTree = "<group>"; };
+		AD34D3EC1D8EEBAD005EF2DE /* b2PulleyJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PulleyJoint.h; sourceTree = "<group>"; };
+		AD34D3ED1D8EEBAD005EF2DE /* b2RevoluteJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2RevoluteJoint.cpp; sourceTree = "<group>"; };
+		AD34D3EE1D8EEBAD005EF2DE /* b2RevoluteJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2RevoluteJoint.h; sourceTree = "<group>"; };
+		AD34D3EF1D8EEBAD005EF2DE /* b2RopeJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2RopeJoint.cpp; sourceTree = "<group>"; };
+		AD34D3F01D8EEBAD005EF2DE /* b2RopeJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2RopeJoint.h; sourceTree = "<group>"; };
+		AD34D3F11D8EEBAD005EF2DE /* b2WeldJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2WeldJoint.cpp; sourceTree = "<group>"; };
+		AD34D3F21D8EEBAD005EF2DE /* b2WeldJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2WeldJoint.h; sourceTree = "<group>"; };
+		AD34D3F31D8EEBAD005EF2DE /* b2WheelJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2WheelJoint.cpp; sourceTree = "<group>"; };
+		AD34D3F41D8EEBAD005EF2DE /* b2WheelJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2WheelJoint.h; sourceTree = "<group>"; };
+		AD34D3F61D8EEBAD005EF2DE /* b2Rope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Rope.cpp; sourceTree = "<group>"; };
+		AD34D3F71D8EEBAD005EF2DE /* b2Rope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Rope.h; sourceTree = "<group>"; };
 		BA41FC88D76540A6905224D6 /* example.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = example.h; path = ../src/example.h; sourceTree = "<group>"; };
 		F6123B1E6FE4471A00F49751 /* res.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = wtf; name = res.xml; path = ../data/res.xml; sourceTree = "<group>"; };
 /* End PBXFileReference section */
@@ -232,7 +241,8 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				9223FE881C2D98D0000B1FDA /* GameController.framework in Frameworks */,
+				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
+				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
 				049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */,
 				04998D3617F8A97D003441C3 /* libSDL2.a in Frameworks */,
 				04998EF017F8ADD4003441C3 /* CoreGraphics.framework in Frameworks */,
@@ -265,6 +275,7 @@
 		04998CE317F8A933003441C3 = {
 			isa = PBXGroup;
 			children = (
+				AD34D3931D8EEBAD005EF2DE /* Box2D */,
 				045D531C17F8BD5E00CC2C64 /* dependencies */,
 				04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */,
 				04998D2F17F8A96E003441C3 /* SDL.xcodeproj */,
@@ -287,7 +298,8 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
-				9223FE871C2D98D0000B1FDA /* GameController.framework */,
+				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
+				9223FE7E1C2D913D000B1FDA /* GameController.framework */,
 				04998EEB17F8ADD4003441C3 /* UIKit.framework */,
 				048AD0AD197D24AB001963EF /* CoreMotion.framework */,
 				04998EEC17F8ADD4003441C3 /* Foundation.framework */,
@@ -314,6 +326,7 @@
 			isa = PBXGroup;
 			children = (
 				04998D3517F8A96E003441C3 /* libSDL2.a */,
+				AD34D2861D8EE94A005EF2DE /* libSDL2.a */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -321,10 +334,9 @@
 		04998D4417F8A9ED003441C3 /* src */ = {
 			isa = PBXGroup;
 			children = (
-				92908EE119C9EBE00088BCA9 /* box2d */,
 				360377333740D8A2FD15BBE6 /* Box2DDebugDraw.cpp */,
-				0BF9628FC8D38F9748F0CDEB /* main.cpp */,
-				4DA100C319512824B7570663 /* example.cpp */,
+				0BF9628FC8D38F9748F0CDEB /* example.cpp */,
+				4DA100C319512824B7570663 /* main.cpp */,
 				5DE458993031811A4C7D28C1 /* Box2DDebugDraw.h */,
 				BA41FC88D76540A6905224D6 /* example.h */,
 			);
@@ -339,171 +351,163 @@
 			name = Products;
 			sourceTree = "<group>";
 		};
-		9271CEAB1BAB66B50085E667 /* Box2D */ = {
+		AD34D3931D8EEBAD005EF2DE /* Box2D */ = {
 			isa = PBXGroup;
 			children = (
-				9271CEAC1BAB66B50085E667 /* Box2D.h */,
-				9271CEAD1BAB66B50085E667 /* Collision */,
-				9271CEC51BAB66B50085E667 /* Common */,
-				9271CED31BAB66B50085E667 /* Dynamics */,
-				9271CF0D1BAB66B50085E667 /* Rope */,
+				AD34D3941D8EEBAD005EF2DE /* Box2D.h */,
+				AD34D3951D8EEBAD005EF2DE /* Collision */,
+				AD34D3AD1D8EEBAD005EF2DE /* Common */,
+				AD34D3BB1D8EEBAD005EF2DE /* Dynamics */,
+				AD34D3F51D8EEBAD005EF2DE /* Rope */,
 			);
 			name = Box2D;
 			path = ../box2d/Box2D;
 			sourceTree = "<group>";
 		};
-		9271CEAD1BAB66B50085E667 /* Collision */ = {
+		AD34D3951D8EEBAD005EF2DE /* Collision */ = {
 			isa = PBXGroup;
 			children = (
-				9271CEAE1BAB66B50085E667 /* b2BroadPhase.cpp */,
-				9271CEAF1BAB66B50085E667 /* b2BroadPhase.h */,
-				9271CEB01BAB66B50085E667 /* b2CollideCircle.cpp */,
-				9271CEB11BAB66B50085E667 /* b2CollideEdge.cpp */,
-				9271CEB21BAB66B50085E667 /* b2CollidePolygon.cpp */,
-				9271CEB31BAB66B50085E667 /* b2Collision.cpp */,
-				9271CEB41BAB66B50085E667 /* b2Collision.h */,
-				9271CEB51BAB66B50085E667 /* b2Distance.cpp */,
-				9271CEB61BAB66B50085E667 /* b2Distance.h */,
-				9271CEB71BAB66B50085E667 /* b2DynamicTree.cpp */,
-				9271CEB81BAB66B50085E667 /* b2DynamicTree.h */,
-				9271CEB91BAB66B50085E667 /* b2TimeOfImpact.cpp */,
-				9271CEBA1BAB66B50085E667 /* b2TimeOfImpact.h */,
-				9271CEBB1BAB66B50085E667 /* Shapes */,
+				AD34D3961D8EEBAD005EF2DE /* b2BroadPhase.cpp */,
+				AD34D3971D8EEBAD005EF2DE /* b2BroadPhase.h */,
+				AD34D3981D8EEBAD005EF2DE /* b2CollideCircle.cpp */,
+				AD34D3991D8EEBAD005EF2DE /* b2CollideEdge.cpp */,
+				AD34D39A1D8EEBAD005EF2DE /* b2CollidePolygon.cpp */,
+				AD34D39B1D8EEBAD005EF2DE /* b2Collision.cpp */,
+				AD34D39C1D8EEBAD005EF2DE /* b2Collision.h */,
+				AD34D39D1D8EEBAD005EF2DE /* b2Distance.cpp */,
+				AD34D39E1D8EEBAD005EF2DE /* b2Distance.h */,
+				AD34D39F1D8EEBAD005EF2DE /* b2DynamicTree.cpp */,
+				AD34D3A01D8EEBAD005EF2DE /* b2DynamicTree.h */,
+				AD34D3A11D8EEBAD005EF2DE /* b2TimeOfImpact.cpp */,
+				AD34D3A21D8EEBAD005EF2DE /* b2TimeOfImpact.h */,
+				AD34D3A31D8EEBAD005EF2DE /* Shapes */,
 			);
 			path = Collision;
 			sourceTree = "<group>";
 		};
-		9271CEBB1BAB66B50085E667 /* Shapes */ = {
+		AD34D3A31D8EEBAD005EF2DE /* Shapes */ = {
 			isa = PBXGroup;
 			children = (
-				9271CEBC1BAB66B50085E667 /* b2ChainShape.cpp */,
-				9271CEBD1BAB66B50085E667 /* b2ChainShape.h */,
-				9271CEBE1BAB66B50085E667 /* b2CircleShape.cpp */,
-				9271CEBF1BAB66B50085E667 /* b2CircleShape.h */,
-				9271CEC01BAB66B50085E667 /* b2EdgeShape.cpp */,
-				9271CEC11BAB66B50085E667 /* b2EdgeShape.h */,
-				9271CEC21BAB66B50085E667 /* b2PolygonShape.cpp */,
-				9271CEC31BAB66B50085E667 /* b2PolygonShape.h */,
-				9271CEC41BAB66B50085E667 /* b2Shape.h */,
+				AD34D3A41D8EEBAD005EF2DE /* b2ChainShape.cpp */,
+				AD34D3A51D8EEBAD005EF2DE /* b2ChainShape.h */,
+				AD34D3A61D8EEBAD005EF2DE /* b2CircleShape.cpp */,
+				AD34D3A71D8EEBAD005EF2DE /* b2CircleShape.h */,
+				AD34D3A81D8EEBAD005EF2DE /* b2EdgeShape.cpp */,
+				AD34D3A91D8EEBAD005EF2DE /* b2EdgeShape.h */,
+				AD34D3AA1D8EEBAD005EF2DE /* b2PolygonShape.cpp */,
+				AD34D3AB1D8EEBAD005EF2DE /* b2PolygonShape.h */,
+				AD34D3AC1D8EEBAD005EF2DE /* b2Shape.h */,
 			);
 			path = Shapes;
 			sourceTree = "<group>";
 		};
-		9271CEC51BAB66B50085E667 /* Common */ = {
+		AD34D3AD1D8EEBAD005EF2DE /* Common */ = {
 			isa = PBXGroup;
 			children = (
-				9271CEC61BAB66B50085E667 /* b2BlockAllocator.cpp */,
-				9271CEC71BAB66B50085E667 /* b2BlockAllocator.h */,
-				9271CEC81BAB66B50085E667 /* b2Draw.cpp */,
-				9271CEC91BAB66B50085E667 /* b2Draw.h */,
-				9271CECA1BAB66B50085E667 /* b2GrowableStack.h */,
-				9271CECB1BAB66B50085E667 /* b2Math.cpp */,
-				9271CECC1BAB66B50085E667 /* b2Math.h */,
-				9271CECD1BAB66B50085E667 /* b2Settings.cpp */,
-				9271CECE1BAB66B50085E667 /* b2Settings.h */,
-				9271CECF1BAB66B50085E667 /* b2StackAllocator.cpp */,
-				9271CED01BAB66B50085E667 /* b2StackAllocator.h */,
-				9271CED11BAB66B50085E667 /* b2Timer.cpp */,
-				9271CED21BAB66B50085E667 /* b2Timer.h */,
+				AD34D3AE1D8EEBAD005EF2DE /* b2BlockAllocator.cpp */,
+				AD34D3AF1D8EEBAD005EF2DE /* b2BlockAllocator.h */,
+				AD34D3B01D8EEBAD005EF2DE /* b2Draw.cpp */,
+				AD34D3B11D8EEBAD005EF2DE /* b2Draw.h */,
+				AD34D3B21D8EEBAD005EF2DE /* b2GrowableStack.h */,
+				AD34D3B31D8EEBAD005EF2DE /* b2Math.cpp */,
+				AD34D3B41D8EEBAD005EF2DE /* b2Math.h */,
+				AD34D3B51D8EEBAD005EF2DE /* b2Settings.cpp */,
+				AD34D3B61D8EEBAD005EF2DE /* b2Settings.h */,
+				AD34D3B71D8EEBAD005EF2DE /* b2StackAllocator.cpp */,
+				AD34D3B81D8EEBAD005EF2DE /* b2StackAllocator.h */,
+				AD34D3B91D8EEBAD005EF2DE /* b2Timer.cpp */,
+				AD34D3BA1D8EEBAD005EF2DE /* b2Timer.h */,
 			);
 			path = Common;
 			sourceTree = "<group>";
 		};
-		9271CED31BAB66B50085E667 /* Dynamics */ = {
+		AD34D3BB1D8EEBAD005EF2DE /* Dynamics */ = {
 			isa = PBXGroup;
 			children = (
-				9271CED41BAB66B50085E667 /* b2Body.cpp */,
-				9271CED51BAB66B50085E667 /* b2Body.h */,
-				9271CED61BAB66B50085E667 /* b2ContactManager.cpp */,
-				9271CED71BAB66B50085E667 /* b2ContactManager.h */,
-				9271CED81BAB66B50085E667 /* b2Fixture.cpp */,
-				9271CED91BAB66B50085E667 /* b2Fixture.h */,
-				9271CEDA1BAB66B50085E667 /* b2Island.cpp */,
-				9271CEDB1BAB66B50085E667 /* b2Island.h */,
-				9271CEDC1BAB66B50085E667 /* b2TimeStep.h */,
-				9271CEDD1BAB66B50085E667 /* b2World.cpp */,
-				9271CEDE1BAB66B50085E667 /* b2World.h */,
-				9271CEDF1BAB66B50085E667 /* b2WorldCallbacks.cpp */,
-				9271CEE01BAB66B50085E667 /* b2WorldCallbacks.h */,
-				9271CEE11BAB66B50085E667 /* Contacts */,
-				9271CEF41BAB66B50085E667 /* Joints */,
+				AD34D3BC1D8EEBAD005EF2DE /* b2Body.cpp */,
+				AD34D3BD1D8EEBAD005EF2DE /* b2Body.h */,
+				AD34D3BE1D8EEBAD005EF2DE /* b2ContactManager.cpp */,
+				AD34D3BF1D8EEBAD005EF2DE /* b2ContactManager.h */,
+				AD34D3C01D8EEBAD005EF2DE /* b2Fixture.cpp */,
+				AD34D3C11D8EEBAD005EF2DE /* b2Fixture.h */,
+				AD34D3C21D8EEBAD005EF2DE /* b2Island.cpp */,
+				AD34D3C31D8EEBAD005EF2DE /* b2Island.h */,
+				AD34D3C41D8EEBAD005EF2DE /* b2TimeStep.h */,
+				AD34D3C51D8EEBAD005EF2DE /* b2World.cpp */,
+				AD34D3C61D8EEBAD005EF2DE /* b2World.h */,
+				AD34D3C71D8EEBAD005EF2DE /* b2WorldCallbacks.cpp */,
+				AD34D3C81D8EEBAD005EF2DE /* b2WorldCallbacks.h */,
+				AD34D3C91D8EEBAD005EF2DE /* Contacts */,
+				AD34D3DC1D8EEBAD005EF2DE /* Joints */,
 			);
 			path = Dynamics;
 			sourceTree = "<group>";
 		};
-		9271CEE11BAB66B50085E667 /* Contacts */ = {
+		AD34D3C91D8EEBAD005EF2DE /* Contacts */ = {
 			isa = PBXGroup;
 			children = (
-				9271CEE21BAB66B50085E667 /* b2ChainAndCircleContact.cpp */,
-				9271CEE31BAB66B50085E667 /* b2ChainAndCircleContact.h */,
-				9271CEE41BAB66B50085E667 /* b2ChainAndPolygonContact.cpp */,
-				9271CEE51BAB66B50085E667 /* b2ChainAndPolygonContact.h */,
-				9271CEE61BAB66B50085E667 /* b2CircleContact.cpp */,
-				9271CEE71BAB66B50085E667 /* b2CircleContact.h */,
-				9271CEE81BAB66B50085E667 /* b2Contact.cpp */,
-				9271CEE91BAB66B50085E667 /* b2Contact.h */,
-				9271CEEA1BAB66B50085E667 /* b2ContactSolver.cpp */,
-				9271CEEB1BAB66B50085E667 /* b2ContactSolver.h */,
-				9271CEEC1BAB66B50085E667 /* b2EdgeAndCircleContact.cpp */,
-				9271CEED1BAB66B50085E667 /* b2EdgeAndCircleContact.h */,
-				9271CEEE1BAB66B50085E667 /* b2EdgeAndPolygonContact.cpp */,
-				9271CEEF1BAB66B50085E667 /* b2EdgeAndPolygonContact.h */,
-				9271CEF01BAB66B50085E667 /* b2PolygonAndCircleContact.cpp */,
-				9271CEF11BAB66B50085E667 /* b2PolygonAndCircleContact.h */,
-				9271CEF21BAB66B50085E667 /* b2PolygonContact.cpp */,
-				9271CEF31BAB66B50085E667 /* b2PolygonContact.h */,
+				AD34D3CA1D8EEBAD005EF2DE /* b2ChainAndCircleContact.cpp */,
+				AD34D3CB1D8EEBAD005EF2DE /* b2ChainAndCircleContact.h */,
+				AD34D3CC1D8EEBAD005EF2DE /* b2ChainAndPolygonContact.cpp */,
+				AD34D3CD1D8EEBAD005EF2DE /* b2ChainAndPolygonContact.h */,
+				AD34D3CE1D8EEBAD005EF2DE /* b2CircleContact.cpp */,
+				AD34D3CF1D8EEBAD005EF2DE /* b2CircleContact.h */,
+				AD34D3D01D8EEBAD005EF2DE /* b2Contact.cpp */,
+				AD34D3D11D8EEBAD005EF2DE /* b2Contact.h */,
+				AD34D3D21D8EEBAD005EF2DE /* b2ContactSolver.cpp */,
+				AD34D3D31D8EEBAD005EF2DE /* b2ContactSolver.h */,
+				AD34D3D41D8EEBAD005EF2DE /* b2EdgeAndCircleContact.cpp */,
+				AD34D3D51D8EEBAD005EF2DE /* b2EdgeAndCircleContact.h */,
+				AD34D3D61D8EEBAD005EF2DE /* b2EdgeAndPolygonContact.cpp */,
+				AD34D3D71D8EEBAD005EF2DE /* b2EdgeAndPolygonContact.h */,
+				AD34D3D81D8EEBAD005EF2DE /* b2PolygonAndCircleContact.cpp */,
+				AD34D3D91D8EEBAD005EF2DE /* b2PolygonAndCircleContact.h */,
+				AD34D3DA1D8EEBAD005EF2DE /* b2PolygonContact.cpp */,
+				AD34D3DB1D8EEBAD005EF2DE /* b2PolygonContact.h */,
 			);
 			path = Contacts;
 			sourceTree = "<group>";
 		};
-		9271CEF41BAB66B50085E667 /* Joints */ = {
+		AD34D3DC1D8EEBAD005EF2DE /* Joints */ = {
 			isa = PBXGroup;
 			children = (
-				9271CEF51BAB66B50085E667 /* b2DistanceJoint.cpp */,
-				9271CEF61BAB66B50085E667 /* b2DistanceJoint.h */,
-				9271CEF71BAB66B50085E667 /* b2FrictionJoint.cpp */,
-				9271CEF81BAB66B50085E667 /* b2FrictionJoint.h */,
-				9271CEF91BAB66B50085E667 /* b2GearJoint.cpp */,
-				9271CEFA1BAB66B50085E667 /* b2GearJoint.h */,
-				9271CEFB1BAB66B50085E667 /* b2Joint.cpp */,
-				9271CEFC1BAB66B50085E667 /* b2Joint.h */,
-				9271CEFD1BAB66B50085E667 /* b2MotorJoint.cpp */,
-				9271CEFE1BAB66B50085E667 /* b2MotorJoint.h */,
-				9271CEFF1BAB66B50085E667 /* b2MouseJoint.cpp */,
-				9271CF001BAB66B50085E667 /* b2MouseJoint.h */,
-				9271CF011BAB66B50085E667 /* b2PrismaticJoint.cpp */,
-				9271CF021BAB66B50085E667 /* b2PrismaticJoint.h */,
-				9271CF031BAB66B50085E667 /* b2PulleyJoint.cpp */,
-				9271CF041BAB66B50085E667 /* b2PulleyJoint.h */,
-				9271CF051BAB66B50085E667 /* b2RevoluteJoint.cpp */,
-				9271CF061BAB66B50085E667 /* b2RevoluteJoint.h */,
-				9271CF071BAB66B50085E667 /* b2RopeJoint.cpp */,
-				9271CF081BAB66B50085E667 /* b2RopeJoint.h */,
-				9271CF091BAB66B50085E667 /* b2WeldJoint.cpp */,
-				9271CF0A1BAB66B50085E667 /* b2WeldJoint.h */,
-				9271CF0B1BAB66B50085E667 /* b2WheelJoint.cpp */,
-				9271CF0C1BAB66B50085E667 /* b2WheelJoint.h */,
+				AD34D3DD1D8EEBAD005EF2DE /* b2DistanceJoint.cpp */,
+				AD34D3DE1D8EEBAD005EF2DE /* b2DistanceJoint.h */,
+				AD34D3DF1D8EEBAD005EF2DE /* b2FrictionJoint.cpp */,
+				AD34D3E01D8EEBAD005EF2DE /* b2FrictionJoint.h */,
+				AD34D3E11D8EEBAD005EF2DE /* b2GearJoint.cpp */,
+				AD34D3E21D8EEBAD005EF2DE /* b2GearJoint.h */,
+				AD34D3E31D8EEBAD005EF2DE /* b2Joint.cpp */,
+				AD34D3E41D8EEBAD005EF2DE /* b2Joint.h */,
+				AD34D3E51D8EEBAD005EF2DE /* b2MotorJoint.cpp */,
+				AD34D3E61D8EEBAD005EF2DE /* b2MotorJoint.h */,
+				AD34D3E71D8EEBAD005EF2DE /* b2MouseJoint.cpp */,
+				AD34D3E81D8EEBAD005EF2DE /* b2MouseJoint.h */,
+				AD34D3E91D8EEBAD005EF2DE /* b2PrismaticJoint.cpp */,
+				AD34D3EA1D8EEBAD005EF2DE /* b2PrismaticJoint.h */,
+				AD34D3EB1D8EEBAD005EF2DE /* b2PulleyJoint.cpp */,
+				AD34D3EC1D8EEBAD005EF2DE /* b2PulleyJoint.h */,
+				AD34D3ED1D8EEBAD005EF2DE /* b2RevoluteJoint.cpp */,
+				AD34D3EE1D8EEBAD005EF2DE /* b2RevoluteJoint.h */,
+				AD34D3EF1D8EEBAD005EF2DE /* b2RopeJoint.cpp */,
+				AD34D3F01D8EEBAD005EF2DE /* b2RopeJoint.h */,
+				AD34D3F11D8EEBAD005EF2DE /* b2WeldJoint.cpp */,
+				AD34D3F21D8EEBAD005EF2DE /* b2WeldJoint.h */,
+				AD34D3F31D8EEBAD005EF2DE /* b2WheelJoint.cpp */,
+				AD34D3F41D8EEBAD005EF2DE /* b2WheelJoint.h */,
 			);
 			path = Joints;
 			sourceTree = "<group>";
 		};
-		9271CF0D1BAB66B50085E667 /* Rope */ = {
+		AD34D3F51D8EEBAD005EF2DE /* Rope */ = {
 			isa = PBXGroup;
 			children = (
-				9271CF0E1BAB66B50085E667 /* b2Rope.cpp */,
-				9271CF0F1BAB66B50085E667 /* b2Rope.h */,
+				AD34D3F61D8EEBAD005EF2DE /* b2Rope.cpp */,
+				AD34D3F71D8EEBAD005EF2DE /* b2Rope.h */,
 			);
 			path = Rope;
 			sourceTree = "<group>";
 		};
-		92908EE119C9EBE00088BCA9 /* box2d */ = {
-			isa = PBXGroup;
-			children = (
-				9271CEAB1BAB66B50085E667 /* Box2D */,
-			);
-			name = box2d;
-			sourceTree = "<group>";
-		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -583,6 +587,13 @@
 			remoteRef = 049B52AC1871EBBA00EF3C66 /* PBXContainerItemProxy */;
 			sourceTree = BUILT_PRODUCTS_DIR;
 		};
+		AD34D2861D8EE94A005EF2DE /* libSDL2.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = libSDL2.a;
+			remoteRef = AD34D2851D8EE94A005EF2DE /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
 /* End PBXReferenceProxy section */
 
 /* Begin PBXResourcesBuildPhase section */
@@ -604,55 +615,55 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				9271CF191BAB66B50085E667 /* b2CircleShape.cpp in Sources */,
-				9271CF381BAB66B50085E667 /* b2PulleyJoint.cpp in Sources */,
-				9271CF1E1BAB66B50085E667 /* b2Math.cpp in Sources */,
-				9271CF2E1BAB66B50085E667 /* b2EdgeAndPolygonContact.cpp in Sources */,
-				9271CF141BAB66B50085E667 /* b2Collision.cpp in Sources */,
-				9271CF341BAB66B50085E667 /* b2Joint.cpp in Sources */,
-				9271CF231BAB66B50085E667 /* b2ContactManager.cpp in Sources */,
-				9271CF301BAB66B50085E667 /* b2PolygonContact.cpp in Sources */,
+				AD34D4011D8EEBAD005EF2DE /* b2CircleShape.cpp in Sources */,
+				AD34D4201D8EEBAD005EF2DE /* b2PulleyJoint.cpp in Sources */,
+				AD34D4061D8EEBAD005EF2DE /* b2Math.cpp in Sources */,
+				AD34D4161D8EEBAD005EF2DE /* b2EdgeAndPolygonContact.cpp in Sources */,
+				AD34D3FC1D8EEBAD005EF2DE /* b2Collision.cpp in Sources */,
+				AD34D41C1D8EEBAD005EF2DE /* b2Joint.cpp in Sources */,
+				AD34D40B1D8EEBAD005EF2DE /* b2ContactManager.cpp in Sources */,
+				AD34D4181D8EEBAD005EF2DE /* b2PolygonContact.cpp in Sources */,
 				2DC477AC10D6C07B3FE008F6 /* Box2DDebugDraw.cpp in Sources */,
-				9271CF151BAB66B50085E667 /* b2Distance.cpp in Sources */,
-				9271CF2B1BAB66B50085E667 /* b2Contact.cpp in Sources */,
-				9271CF251BAB66B50085E667 /* b2Island.cpp in Sources */,
-				9271CF271BAB66B50085E667 /* b2WorldCallbacks.cpp in Sources */,
-				9271CF161BAB66B50085E667 /* b2DynamicTree.cpp in Sources */,
-				9271CF2D1BAB66B50085E667 /* b2EdgeAndCircleContact.cpp in Sources */,
-				9271CF1C1BAB66B50085E667 /* b2BlockAllocator.cpp in Sources */,
-				9271CF1D1BAB66B50085E667 /* b2Draw.cpp in Sources */,
-				DA49ED8903C628BA578C8670 /* main.cpp in Sources */,
-				9271CF3B1BAB66B50085E667 /* b2WeldJoint.cpp in Sources */,
-				9271CF1B1BAB66B50085E667 /* b2PolygonShape.cpp in Sources */,
-				9271CF291BAB66B50085E667 /* b2ChainAndPolygonContact.cpp in Sources */,
-				9271CF171BAB66B50085E667 /* b2TimeOfImpact.cpp in Sources */,
-				9271CF111BAB66B50085E667 /* b2CollideCircle.cpp in Sources */,
-				9271CF201BAB66B50085E667 /* b2StackAllocator.cpp in Sources */,
-				9271CF391BAB66B50085E667 /* b2RevoluteJoint.cpp in Sources */,
-				9271CF281BAB66B50085E667 /* b2ChainAndCircleContact.cpp in Sources */,
-				9271CF2F1BAB66B50085E667 /* b2PolygonAndCircleContact.cpp in Sources */,
-				9271CF2A1BAB66B50085E667 /* b2CircleContact.cpp in Sources */,
-				9271CF321BAB66B50085E667 /* b2FrictionJoint.cpp in Sources */,
-				9271CF3A1BAB66B50085E667 /* b2RopeJoint.cpp in Sources */,
-				9271CF3C1BAB66B50085E667 /* b2WheelJoint.cpp in Sources */,
-				9271CF221BAB66B50085E667 /* b2Body.cpp in Sources */,
-				9271CF331BAB66B50085E667 /* b2GearJoint.cpp in Sources */,
-				9271CF101BAB66B50085E667 /* b2BroadPhase.cpp in Sources */,
-				C8860D93875589970329DCCD /* example.cpp in Sources */,
-				9271CF241BAB66B50085E667 /* b2Fixture.cpp in Sources */,
-				9271CF181BAB66B50085E667 /* b2ChainShape.cpp in Sources */,
-				9271CF3D1BAB66B50085E667 /* b2Rope.cpp in Sources */,
-				9271CF361BAB66B50085E667 /* b2MouseJoint.cpp in Sources */,
-				9271CF261BAB66B50085E667 /* b2World.cpp in Sources */,
-				9271CF131BAB66B50085E667 /* b2CollidePolygon.cpp in Sources */,
-				9271CF371BAB66B50085E667 /* b2PrismaticJoint.cpp in Sources */,
-				9271CF211BAB66B50085E667 /* b2Timer.cpp in Sources */,
-				9271CF311BAB66B50085E667 /* b2DistanceJoint.cpp in Sources */,
-				9271CF1F1BAB66B50085E667 /* b2Settings.cpp in Sources */,
-				9271CF351BAB66B50085E667 /* b2MotorJoint.cpp in Sources */,
-				9271CF1A1BAB66B50085E667 /* b2EdgeShape.cpp in Sources */,
-				9271CF121BAB66B50085E667 /* b2CollideEdge.cpp in Sources */,
-				9271CF2C1BAB66B50085E667 /* b2ContactSolver.cpp in Sources */,
+				AD34D3FD1D8EEBAD005EF2DE /* b2Distance.cpp in Sources */,
+				AD34D4131D8EEBAD005EF2DE /* b2Contact.cpp in Sources */,
+				AD34D40D1D8EEBAD005EF2DE /* b2Island.cpp in Sources */,
+				AD34D40F1D8EEBAD005EF2DE /* b2WorldCallbacks.cpp in Sources */,
+				AD34D3FE1D8EEBAD005EF2DE /* b2DynamicTree.cpp in Sources */,
+				AD34D4151D8EEBAD005EF2DE /* b2EdgeAndCircleContact.cpp in Sources */,
+				AD34D4041D8EEBAD005EF2DE /* b2BlockAllocator.cpp in Sources */,
+				AD34D4051D8EEBAD005EF2DE /* b2Draw.cpp in Sources */,
+				DA49ED8903C628BA578C8670 /* example.cpp in Sources */,
+				AD34D4231D8EEBAD005EF2DE /* b2WeldJoint.cpp in Sources */,
+				AD34D4031D8EEBAD005EF2DE /* b2PolygonShape.cpp in Sources */,
+				AD34D4111D8EEBAD005EF2DE /* b2ChainAndPolygonContact.cpp in Sources */,
+				AD34D3FF1D8EEBAD005EF2DE /* b2TimeOfImpact.cpp in Sources */,
+				AD34D3F91D8EEBAD005EF2DE /* b2CollideCircle.cpp in Sources */,
+				AD34D4081D8EEBAD005EF2DE /* b2StackAllocator.cpp in Sources */,
+				AD34D4211D8EEBAD005EF2DE /* b2RevoluteJoint.cpp in Sources */,
+				AD34D4101D8EEBAD005EF2DE /* b2ChainAndCircleContact.cpp in Sources */,
+				AD34D4171D8EEBAD005EF2DE /* b2PolygonAndCircleContact.cpp in Sources */,
+				AD34D4121D8EEBAD005EF2DE /* b2CircleContact.cpp in Sources */,
+				AD34D41A1D8EEBAD005EF2DE /* b2FrictionJoint.cpp in Sources */,
+				AD34D4221D8EEBAD005EF2DE /* b2RopeJoint.cpp in Sources */,
+				AD34D4241D8EEBAD005EF2DE /* b2WheelJoint.cpp in Sources */,
+				AD34D40A1D8EEBAD005EF2DE /* b2Body.cpp in Sources */,
+				AD34D41B1D8EEBAD005EF2DE /* b2GearJoint.cpp in Sources */,
+				AD34D3F81D8EEBAD005EF2DE /* b2BroadPhase.cpp in Sources */,
+				C8860D93875589970329DCCD /* main.cpp in Sources */,
+				AD34D40C1D8EEBAD005EF2DE /* b2Fixture.cpp in Sources */,
+				AD34D4001D8EEBAD005EF2DE /* b2ChainShape.cpp in Sources */,
+				AD34D4251D8EEBAD005EF2DE /* b2Rope.cpp in Sources */,
+				AD34D41E1D8EEBAD005EF2DE /* b2MouseJoint.cpp in Sources */,
+				AD34D40E1D8EEBAD005EF2DE /* b2World.cpp in Sources */,
+				AD34D3FB1D8EEBAD005EF2DE /* b2CollidePolygon.cpp in Sources */,
+				AD34D41F1D8EEBAD005EF2DE /* b2PrismaticJoint.cpp in Sources */,
+				AD34D4091D8EEBAD005EF2DE /* b2Timer.cpp in Sources */,
+				AD34D4191D8EEBAD005EF2DE /* b2DistanceJoint.cpp in Sources */,
+				AD34D4071D8EEBAD005EF2DE /* b2Settings.cpp in Sources */,
+				AD34D41D1D8EEBAD005EF2DE /* b2MotorJoint.cpp in Sources */,
+				AD34D4021D8EEBAD005EF2DE /* b2EdgeShape.cpp in Sources */,
+				AD34D3FA1D8EEBAD005EF2DE /* b2CollideEdge.cpp in Sources */,
+				AD34D4141D8EEBAD005EF2DE /* b2ContactSolver.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -706,8 +717,8 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				ONLY_ACTIVE_ARCH = NO;
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				USER_HEADER_SEARCH_PATHS = "../../..//oxygine/src ../../../..//SDL/include";
@@ -742,7 +753,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				USER_HEADER_SEARCH_PATHS = "../../..//oxygine/src ../../../..//SDL/include";
@@ -753,25 +764,27 @@
 		04998D2217F8A933003441C3 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = YES;
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				DEVELOPMENT_TEAM = SG98QZPTLD;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "DemoBox2D/DemoBox2D_ios-Prefix.pch";
 				GCC_WARN_UNUSED_VALUE = YES;
 				GCC_WARN_UNUSED_VARIABLE = NO;
+				HEADER_SEARCH_PATHS = ../box2d;
 				INFOPLIST_FILE = "DemoBox2D/DemoBox2D_ios-Info.plist";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
 					"../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.demobox2d;
 				PRODUCT_NAME = DemoBox2D_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";
-				USER_HEADER_SEARCH_PATHS = "../../..//oxygine/src ../../../..//SDL/include ../box2d";
+				USER_HEADER_SEARCH_PATHS = "../../..//oxygine/src ../../../..//SDL/include";
 				WRAPPER_EXTENSION = app;
 			};
 			name = Debug;
@@ -779,25 +792,27 @@
 		04998D2317F8A933003441C3 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = YES;
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				DEVELOPMENT_TEAM = SG98QZPTLD;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "DemoBox2D/DemoBox2D_ios-Prefix.pch";
 				GCC_WARN_UNUSED_VALUE = YES;
 				GCC_WARN_UNUSED_VARIABLE = NO;
+				HEADER_SEARCH_PATHS = ../box2d;
 				INFOPLIST_FILE = "DemoBox2D/DemoBox2D_ios-Info.plist";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
 					"../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.demobox2d;
 				PRODUCT_NAME = DemoBox2D_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";
-				USER_HEADER_SEARCH_PATHS = "../../..//oxygine/src ../../../..//SDL/include ../box2d";
+				USER_HEADER_SEARCH_PATHS = "../../..//oxygine/src ../../../..//SDL/include";
 				WRAPPER_EXTENSION = app;
 			};
 			name = Release;

+ 8 - 15
examples/DemoBox2D/src/main.cpp

@@ -138,9 +138,12 @@ int main(int argc, char* argv[])
 
 #include "SDL_main.h"
 #include "SDL.h"
+
 extern "C"
 {
     void one(void* param) { mainloop(); }
+    void oneEmsc() { mainloop(); }
+
     int main(int argc, char* argv[])
     {
 
@@ -151,21 +154,11 @@ extern "C"
         SDL_iPhoneSetAnimationCallback(core::getWindow(), 1, one, nullptr);
 #endif
 
+#if EMSCRIPTEN
+        emscripten_set_main_loop(oneEmsc, 0, 0);
+#endif
+
         return 0;
     }
 };
-#endif
-
-
-#ifdef EMSCRIPTEN
-#include <emscripten.h>
-
-void one() { mainloop(); }
-
-int main(int argc, char* argv[])
-{
-    run();
-    emscripten_set_main_loop(one, 0, 0);
-    return 0;
-}
-#endif
+#endif

+ 40 - 0
examples/Game/part1/proj.android/build.gradle

@@ -0,0 +1,40 @@
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:1.0.+'
+    }
+}
+
+apply plugin: 'com.android.application'
+
+
+
+dependencies {
+    compile(project(':oxygine-extension'))
+    compile(project(':oxygine-lib')) { exclude module: 'oxygine-extension' }
+}
+
+android {
+    enforceUniquePackageName=false
+        
+    compileSdkVersion 23
+    buildToolsVersion '23.0.2'
+
+
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+            manifest.srcFile 'AndroidManifest.xml'
+            java.srcDirs = ['src']
+            res.srcDirs = ['res']
+            assets.srcDirs = ['../data']
+        }
+    }
+
+    aaptOptions {
+        noCompress 'zip', 'ogg'
+        ignoreAssetsPattern "!*.dll:*.icf"
+    }
+}

+ 5 - 0
examples/Game/part1/proj.android/settings.gradle

@@ -0,0 +1,5 @@
+include 'oxygine-lib'
+project(':oxygine-lib').projectDir = new File('../../../../..//oxygine-framework/oxygine/SDL/android/lib')
+
+include 'oxygine-extension'
+project(':oxygine-extension').projectDir = new File('../../../../..//oxygine-framework/oxygine/SDL/android/extension')

+ 4 - 6
examples/Game/part1/proj.cmake/CMakeLists.txt

@@ -6,7 +6,8 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OXYGINE_CXX_FLAGS}")
+
 add_executable(GamePart1 ../src/Game.cpp ../src/Joystick.cpp ../src/Player.cpp ../src/Unit.cpp ../src/example.cpp ../src/main.cpp ../src/res.cpp  ../src/Game.h ../src/Joystick.h ../src/Player.h ../src/Unit.h ../src/example.h ../src/res.h )
 target_link_libraries(GamePart1 ${OXYGINE_CORE_LIBS})
 
@@ -19,10 +20,7 @@ endif(WIN32)
 
 
 if (EMSCRIPTEN)
-	SET(CMAKE_EXECUTABLE_SUFFIX ".html")
-	set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
-
-	set_target_properties(GamePart1 PROPERTIES LINK_FLAGS "${linkFlags}")
-
+	SET(CMAKE_EXECUTABLE_SUFFIX ".html")	
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
 	em_link_pre_js(GamePart1  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 8 - 1
examples/Game/part1/proj.ios/GamePart1/GamePart1_ios-Info.plist

@@ -13,7 +13,7 @@
 	<key>CFBundleIcons~ipad</key>
 	<dict/>
 	<key>CFBundleIdentifier</key>
-	<string>oxygine.${PRODUCT_NAME:rfc1034identifier}</string>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
 	<string>6.0</string>
 	<key>CFBundleName</key>
@@ -34,6 +34,8 @@
 	<array>
 		<string>armv7</string>
 	</array>
+	<key>UIRequiresFullScreen</key>
+	<true/>
 	<key>UIStatusBarHidden</key>
 	<true/>
 	<key>UISupportedInterfaceOrientations</key>
@@ -46,6 +48,11 @@
 		<string>UIInterfaceOrientationLandscapeLeft</string>
 		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
 	<key>UIViewControllerBasedStatusBarAppearance</key>
 	<false/>
 </dict>

+ 10 - 6
examples/Game/part1/proj.ios/GamePart1_ios.xcodeproj/project.pbxproj

@@ -23,8 +23,8 @@
 		04998EF817F8B6F3003441C3 /* libjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EF617F8B6F3003441C3 /* libjpeg.a */; };
 		049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 049B52AD1871EBBA00EF3C66 /* liboxygine_ios.a */; };
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
-
+		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
+		
 		2DC477AC10D6C07B3FE008F6 /* ../src/Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Game.cpp */; };
 		DA49ED8903C628BA578C8670 /* ../src/Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF9628FC8D38F9748F0CDEB /* ../src/Joystick.cpp */; };
 		C8860D93875589970329DCCD /* ../src/Player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DA100C319512824B7570663 /* ../src/Player.cpp */; };
@@ -35,6 +35,7 @@
 		F2CFD518E4E2E05ECEDBB262 /* ../data/images in Sources */ = {isa = PBXBuildFile; fileRef = BA41FC88D76540A6905224D6 /* ../data/images */; };
 		693088A7AB377368EE4A018E /* ../data/xmls in Sources */ = {isa = PBXBuildFile; fileRef = 2CE4BD5BB9DEF92439C0AB58 /* ../data/xmls */; };
 
+
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -82,10 +83,10 @@
 		04998EEC17F8ADD4003441C3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		04998EED17F8ADD4003441C3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
 		9223FE7E1C2D913D000B1FDA /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
+		AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
 		04998EF517F8B6F3003441C3 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = "../../../..//oxygine/third_party/ios/libraries/libpng.a"; sourceTree = "<group>"; };
 		04998EF617F8B6F3003441C3 /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjpeg.a; path = "../../../..//oxygine/third_party/ios/libraries/libjpeg.a"; sourceTree = "<group>"; };
 		04E9AD3E1876FE84006A7317 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name =Images.xcassets; path = GamePart1/Images.xcassets; sourceTree = "<group>"; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
 
 		360377333740D8A2FD15BBE6 /* ../src/Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Game.cpp; path = ../src/Game.cpp; sourceTree = "<group>"; };
 		0BF9628FC8D38F9748F0CDEB /* ../src/Joystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Joystick.cpp; path = ../src/Joystick.cpp; sourceTree = "<group>"; };
@@ -103,6 +104,7 @@
 		BA41FC88D76540A6905224D6 /* ../data/images */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = images; path = ../data/images; sourceTree = "<group>"; };
 		2CE4BD5BB9DEF92439C0AB58 /* ../data/xmls */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = xmls; path = ../data/xmls; sourceTree = "<group>"; };
 
+
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -110,6 +112,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
 				049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */,
 				04998D3617F8A97D003441C3 /* libSDL2.a in Frameworks */,
@@ -143,7 +146,6 @@
 		04998CE317F8A933003441C3 = {
 			isa = PBXGroup;
 			children = (
-				922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */,
 				045D531C17F8BD5E00CC2C64 /* dependencies */,
 				04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */,
 				04998D2F17F8A96E003441C3 /* SDL.xcodeproj */,
@@ -166,6 +168,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,
 				04998EEB17F8ADD4003441C3 /* UIKit.framework */,
 				048AD0AD197D24AB001963EF /* CoreMotion.framework */,
@@ -309,7 +312,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */,
-				922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */,
 								F2CFD518E4E2E05ECEDBB262 /* images */, 
 				693088A7AB377368EE4A018E /* xmls */, 
 
@@ -385,7 +387,7 @@
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
-				ONLY_ACTIVE_ARCH = NO;
+				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				USER_HEADER_SEARCH_PATHS = "../../../..//oxygine/src ../../../../..//SDL/include";
@@ -445,6 +447,7 @@
 					"../../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.gamepart1;
 				PRODUCT_NAME = GamePart1_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";
@@ -469,6 +472,7 @@
 					"../../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.gamepart1;
 				PRODUCT_NAME = GamePart1_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";

+ 8 - 15
examples/Game/part1/src/main.cpp

@@ -138,9 +138,12 @@ int main(int argc, char* argv[])
 
 #include "SDL_main.h"
 #include "SDL.h"
+
 extern "C"
 {
     void one(void* param) { mainloop(); }
+    void oneEmsc() { mainloop(); }
+
     int main(int argc, char* argv[])
     {
 
@@ -151,21 +154,11 @@ extern "C"
         SDL_iPhoneSetAnimationCallback(core::getWindow(), 1, one, nullptr);
 #endif
 
+#if EMSCRIPTEN
+        emscripten_set_main_loop(oneEmsc, 0, 0);
+#endif
+
         return 0;
     }
 };
-#endif
-
-
-#ifdef EMSCRIPTEN
-#include <emscripten.h>
-
-void one() { mainloop(); }
-
-int main(int argc, char* argv[])
-{
-    run();
-    emscripten_set_main_loop(one, 0, 0);
-    return 0;
-}
-#endif
+#endif

+ 40 - 0
examples/Game/part2/proj.android/build.gradle

@@ -0,0 +1,40 @@
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:1.0.+'
+    }
+}
+
+apply plugin: 'com.android.application'
+
+
+
+dependencies {
+    compile(project(':oxygine-extension'))
+    compile(project(':oxygine-lib')) { exclude module: 'oxygine-extension' }
+}
+
+android {
+    enforceUniquePackageName=false
+        
+    compileSdkVersion 23
+    buildToolsVersion '23.0.2'
+
+
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+            manifest.srcFile 'AndroidManifest.xml'
+            java.srcDirs = ['src']
+            res.srcDirs = ['res']
+            assets.srcDirs = ['../data']
+        }
+    }
+
+    aaptOptions {
+        noCompress 'zip', 'ogg'
+        ignoreAssetsPattern "!*.dll:*.icf"
+    }
+}

+ 5 - 0
examples/Game/part2/proj.android/settings.gradle

@@ -0,0 +1,5 @@
+include 'oxygine-lib'
+project(':oxygine-lib').projectDir = new File('../../../../..//oxygine-framework/oxygine/SDL/android/lib')
+
+include 'oxygine-extension'
+project(':oxygine-extension').projectDir = new File('../../../../..//oxygine-framework/oxygine/SDL/android/extension')

+ 4 - 6
examples/Game/part2/proj.cmake/CMakeLists.txt

@@ -6,7 +6,8 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OXYGINE_CXX_FLAGS}")
+
 add_executable(GamePart2 ../src/Enemy.cpp ../src/Game.cpp ../src/Joystick.cpp ../src/Player.cpp ../src/Rocket.cpp ../src/Unit.cpp ../src/example.cpp ../src/main.cpp ../src/res.cpp  ../src/Enemy.h ../src/Game.h ../src/Joystick.h ../src/Player.h ../src/Rocket.h ../src/Unit.h ../src/example.h ../src/res.h )
 target_link_libraries(GamePart2 ${OXYGINE_CORE_LIBS})
 
@@ -19,10 +20,7 @@ endif(WIN32)
 
 
 if (EMSCRIPTEN)
-	SET(CMAKE_EXECUTABLE_SUFFIX ".html")
-	set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
-
-	set_target_properties(GamePart2 PROPERTIES LINK_FLAGS "${linkFlags}")
-
+	SET(CMAKE_EXECUTABLE_SUFFIX ".html")	
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
 	em_link_pre_js(GamePart2  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 8 - 1
examples/Game/part2/proj.ios/GamePart2/GamePart2_ios-Info.plist

@@ -13,7 +13,7 @@
 	<key>CFBundleIcons~ipad</key>
 	<dict/>
 	<key>CFBundleIdentifier</key>
-	<string>oxygine.${PRODUCT_NAME:rfc1034identifier}</string>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
 	<string>6.0</string>
 	<key>CFBundleName</key>
@@ -34,6 +34,8 @@
 	<array>
 		<string>armv7</string>
 	</array>
+	<key>UIRequiresFullScreen</key>
+	<true/>
 	<key>UIStatusBarHidden</key>
 	<true/>
 	<key>UISupportedInterfaceOrientations</key>
@@ -46,6 +48,11 @@
 		<string>UIInterfaceOrientationLandscapeLeft</string>
 		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
 	<key>UIViewControllerBasedStatusBarAppearance</key>
 	<false/>
 </dict>

+ 10 - 6
examples/Game/part2/proj.ios/GamePart2_ios.xcodeproj/project.pbxproj

@@ -23,8 +23,8 @@
 		04998EF817F8B6F3003441C3 /* libjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EF617F8B6F3003441C3 /* libjpeg.a */; };
 		049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 049B52AD1871EBBA00EF3C66 /* liboxygine_ios.a */; };
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
-
+		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
+		
 		2DC477AC10D6C07B3FE008F6 /* ../src/Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */; };
 		DA49ED8903C628BA578C8670 /* ../src/Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF9628FC8D38F9748F0CDEB /* ../src/Game.cpp */; };
 		C8860D93875589970329DCCD /* ../src/Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DA100C319512824B7570663 /* ../src/Joystick.cpp */; };
@@ -37,6 +37,7 @@
 		2B0FCA4EF2CDAB7EF6C6252E /* ../data/images in Sources */ = {isa = PBXBuildFile; fileRef = F196143B0370A9D348494ACC /* ../data/images */; };
 		F87DC9641C1B8FCF28948580 /* ../data/xmls in Sources */ = {isa = PBXBuildFile; fileRef = 7746CA7A63049ED8F7D6BF42 /* ../data/xmls */; };
 
+
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -84,10 +85,10 @@
 		04998EEC17F8ADD4003441C3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		04998EED17F8ADD4003441C3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
 		9223FE7E1C2D913D000B1FDA /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
+		AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
 		04998EF517F8B6F3003441C3 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = "../../../..//oxygine/third_party/ios/libraries/libpng.a"; sourceTree = "<group>"; };
 		04998EF617F8B6F3003441C3 /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjpeg.a; path = "../../../..//oxygine/third_party/ios/libraries/libjpeg.a"; sourceTree = "<group>"; };
 		04E9AD3E1876FE84006A7317 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name =Images.xcassets; path = GamePart2/Images.xcassets; sourceTree = "<group>"; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
 
 		360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Enemy.cpp; path = ../src/Enemy.cpp; sourceTree = "<group>"; };
 		0BF9628FC8D38F9748F0CDEB /* ../src/Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Game.cpp; path = ../src/Game.cpp; sourceTree = "<group>"; };
@@ -109,6 +110,7 @@
 		F196143B0370A9D348494ACC /* ../data/images */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = images; path = ../data/images; sourceTree = "<group>"; };
 		7746CA7A63049ED8F7D6BF42 /* ../data/xmls */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = xmls; path = ../data/xmls; sourceTree = "<group>"; };
 
+
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -116,6 +118,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
 				049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */,
 				04998D3617F8A97D003441C3 /* libSDL2.a in Frameworks */,
@@ -149,7 +152,6 @@
 		04998CE317F8A933003441C3 = {
 			isa = PBXGroup;
 			children = (
-				922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */,
 				045D531C17F8BD5E00CC2C64 /* dependencies */,
 				04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */,
 				04998D2F17F8A96E003441C3 /* SDL.xcodeproj */,
@@ -172,6 +174,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,
 				04998EEB17F8ADD4003441C3 /* UIKit.framework */,
 				048AD0AD197D24AB001963EF /* CoreMotion.framework */,
@@ -319,7 +322,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */,
-				922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */,
 								2B0FCA4EF2CDAB7EF6C6252E /* images */, 
 				F87DC9641C1B8FCF28948580 /* xmls */, 
 
@@ -397,7 +399,7 @@
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
-				ONLY_ACTIVE_ARCH = NO;
+				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				USER_HEADER_SEARCH_PATHS = "../../../..//oxygine/src ../../../../..//SDL/include";
@@ -457,6 +459,7 @@
 					"../../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.gamepart2;
 				PRODUCT_NAME = GamePart2_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";
@@ -481,6 +484,7 @@
 					"../../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.gamepart2;
 				PRODUCT_NAME = GamePart2_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";

+ 8 - 15
examples/Game/part2/src/main.cpp

@@ -138,9 +138,12 @@ int main(int argc, char* argv[])
 
 #include "SDL_main.h"
 #include "SDL.h"
+
 extern "C"
 {
     void one(void* param) { mainloop(); }
+    void oneEmsc() { mainloop(); }
+
     int main(int argc, char* argv[])
     {
 
@@ -151,21 +154,11 @@ extern "C"
         SDL_iPhoneSetAnimationCallback(core::getWindow(), 1, one, nullptr);
 #endif
 
+#if EMSCRIPTEN
+        emscripten_set_main_loop(oneEmsc, 0, 0);
+#endif
+
         return 0;
     }
 };
-#endif
-
-
-#ifdef EMSCRIPTEN
-#include <emscripten.h>
-
-void one() { mainloop(); }
-
-int main(int argc, char* argv[])
-{
-    run();
-    emscripten_set_main_loop(one, 0, 0);
-    return 0;
-}
-#endif
+#endif

+ 40 - 0
examples/Game/part3/proj.android/build.gradle

@@ -0,0 +1,40 @@
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:1.0.+'
+    }
+}
+
+apply plugin: 'com.android.application'
+
+
+
+dependencies {
+    compile(project(':oxygine-extension'))
+    compile(project(':oxygine-lib')) { exclude module: 'oxygine-extension' }
+}
+
+android {
+    enforceUniquePackageName=false
+        
+    compileSdkVersion 23
+    buildToolsVersion '23.0.2'
+
+
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+            manifest.srcFile 'AndroidManifest.xml'
+            java.srcDirs = ['src']
+            res.srcDirs = ['res']
+            assets.srcDirs = ['../data']
+        }
+    }
+
+    aaptOptions {
+        noCompress 'zip', 'ogg'
+        ignoreAssetsPattern "!*.dll:*.icf"
+    }
+}

+ 5 - 0
examples/Game/part3/proj.android/settings.gradle

@@ -0,0 +1,5 @@
+include 'oxygine-lib'
+project(':oxygine-lib').projectDir = new File('../../../../..//oxygine-framework/oxygine/SDL/android/lib')
+
+include 'oxygine-extension'
+project(':oxygine-extension').projectDir = new File('../../../../..//oxygine-framework/oxygine/SDL/android/extension')

+ 4 - 6
examples/Game/part3/proj.cmake/CMakeLists.txt

@@ -6,7 +6,8 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OXYGINE_CXX_FLAGS}")
+
 add_executable(GamePart3 ../src/Enemy.cpp ../src/Game.cpp ../src/GameScene.cpp ../src/Joystick.cpp ../src/MainMenuScene.cpp ../src/MyButton.cpp ../src/Player.cpp ../src/Rocket.cpp ../src/Scene.cpp ../src/Unit.cpp ../src/example.cpp ../src/main.cpp ../src/res.cpp  ../src/Enemy.h ../src/Game.h ../src/GameScene.h ../src/Joystick.h ../src/MainMenuScene.h ../src/MyButton.h ../src/Player.h ../src/Rocket.h ../src/Scene.h ../src/Unit.h ../src/example.h ../src/res.h )
 target_link_libraries(GamePart3 ${OXYGINE_CORE_LIBS})
 
@@ -19,10 +20,7 @@ endif(WIN32)
 
 
 if (EMSCRIPTEN)
-	SET(CMAKE_EXECUTABLE_SUFFIX ".html")
-	set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
-
-	set_target_properties(GamePart3 PROPERTIES LINK_FLAGS "${linkFlags}")
-
+	SET(CMAKE_EXECUTABLE_SUFFIX ".html")	
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
 	em_link_pre_js(GamePart3  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 8 - 1
examples/Game/part3/proj.ios/GamePart3/GamePart3_ios-Info.plist

@@ -13,7 +13,7 @@
 	<key>CFBundleIcons~ipad</key>
 	<dict/>
 	<key>CFBundleIdentifier</key>
-	<string>oxygine.${PRODUCT_NAME:rfc1034identifier}</string>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
 	<string>6.0</string>
 	<key>CFBundleName</key>
@@ -34,6 +34,8 @@
 	<array>
 		<string>armv7</string>
 	</array>
+	<key>UIRequiresFullScreen</key>
+	<true/>
 	<key>UIStatusBarHidden</key>
 	<true/>
 	<key>UISupportedInterfaceOrientations</key>
@@ -46,6 +48,11 @@
 		<string>UIInterfaceOrientationLandscapeLeft</string>
 		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
 	<key>UIViewControllerBasedStatusBarAppearance</key>
 	<false/>
 </dict>

+ 10 - 6
examples/Game/part3/proj.ios/GamePart3_ios.xcodeproj/project.pbxproj

@@ -23,8 +23,8 @@
 		04998EF817F8B6F3003441C3 /* libjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EF617F8B6F3003441C3 /* libjpeg.a */; };
 		049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 049B52AD1871EBBA00EF3C66 /* liboxygine_ios.a */; };
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
-
+		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
+		
 		2DC477AC10D6C07B3FE008F6 /* ../src/Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */; };
 		DA49ED8903C628BA578C8670 /* ../src/Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF9628FC8D38F9748F0CDEB /* ../src/Game.cpp */; };
 		C8860D93875589970329DCCD /* ../src/GameScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DA100C319512824B7570663 /* ../src/GameScene.cpp */; };
@@ -41,6 +41,7 @@
 		3BB41671209E30BDF95D1B16 /* ../data/images in Sources */ = {isa = PBXBuildFile; fileRef = 7623D793B59EF0CD569E6EC2 /* ../data/images */; };
 		E02A0627DE00D04110ABADA6 /* ../data/xmls in Sources */ = {isa = PBXBuildFile; fileRef = AFA30E959880563E6ABBBC4F /* ../data/xmls */; };
 
+
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -88,10 +89,10 @@
 		04998EEC17F8ADD4003441C3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		04998EED17F8ADD4003441C3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
 		9223FE7E1C2D913D000B1FDA /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
+		AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
 		04998EF517F8B6F3003441C3 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = "../../../..//oxygine/third_party/ios/libraries/libpng.a"; sourceTree = "<group>"; };
 		04998EF617F8B6F3003441C3 /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjpeg.a; path = "../../../..//oxygine/third_party/ios/libraries/libjpeg.a"; sourceTree = "<group>"; };
 		04E9AD3E1876FE84006A7317 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name =Images.xcassets; path = GamePart3/Images.xcassets; sourceTree = "<group>"; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
 
 		360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Enemy.cpp; path = ../src/Enemy.cpp; sourceTree = "<group>"; };
 		0BF9628FC8D38F9748F0CDEB /* ../src/Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Game.cpp; path = ../src/Game.cpp; sourceTree = "<group>"; };
@@ -121,6 +122,7 @@
 		7623D793B59EF0CD569E6EC2 /* ../data/images */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = images; path = ../data/images; sourceTree = "<group>"; };
 		AFA30E959880563E6ABBBC4F /* ../data/xmls */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = xmls; path = ../data/xmls; sourceTree = "<group>"; };
 
+
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -128,6 +130,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
 				049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */,
 				04998D3617F8A97D003441C3 /* libSDL2.a in Frameworks */,
@@ -161,7 +164,6 @@
 		04998CE317F8A933003441C3 = {
 			isa = PBXGroup;
 			children = (
-				922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */,
 				045D531C17F8BD5E00CC2C64 /* dependencies */,
 				04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */,
 				04998D2F17F8A96E003441C3 /* SDL.xcodeproj */,
@@ -184,6 +186,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,
 				04998EEB17F8ADD4003441C3 /* UIKit.framework */,
 				048AD0AD197D24AB001963EF /* CoreMotion.framework */,
@@ -339,7 +342,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */,
-				922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */,
 								3BB41671209E30BDF95D1B16 /* images */, 
 				E02A0627DE00D04110ABADA6 /* xmls */, 
 
@@ -421,7 +423,7 @@
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
-				ONLY_ACTIVE_ARCH = NO;
+				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				USER_HEADER_SEARCH_PATHS = "../../../..//oxygine/src ../../../../..//SDL/include";
@@ -481,6 +483,7 @@
 					"../../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.gamepart3;
 				PRODUCT_NAME = GamePart3_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";
@@ -505,6 +508,7 @@
 					"../../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.gamepart3;
 				PRODUCT_NAME = GamePart3_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";

+ 8 - 15
examples/Game/part3/src/main.cpp

@@ -138,9 +138,12 @@ int main(int argc, char* argv[])
 
 #include "SDL_main.h"
 #include "SDL.h"
+
 extern "C"
 {
     void one(void* param) { mainloop(); }
+    void oneEmsc() { mainloop(); }
+
     int main(int argc, char* argv[])
     {
 
@@ -151,21 +154,11 @@ extern "C"
         SDL_iPhoneSetAnimationCallback(core::getWindow(), 1, one, nullptr);
 #endif
 
+#if EMSCRIPTEN
+        emscripten_set_main_loop(oneEmsc, 0, 0);
+#endif
+
         return 0;
     }
 };
-#endif
-
-
-#ifdef EMSCRIPTEN
-#include <emscripten.h>
-
-void one() { mainloop(); }
-
-int main(int argc, char* argv[])
-{
-    run();
-    emscripten_set_main_loop(one, 0, 0);
-    return 0;
-}
-#endif
+#endif

+ 40 - 0
examples/Game/part4/proj.android/build.gradle

@@ -0,0 +1,40 @@
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:1.0.+'
+    }
+}
+
+apply plugin: 'com.android.application'
+
+
+
+dependencies {
+    compile(project(':oxygine-extension'))
+    compile(project(':oxygine-lib')) { exclude module: 'oxygine-extension' }
+}
+
+android {
+    enforceUniquePackageName=false
+        
+    compileSdkVersion 23
+    buildToolsVersion '23.0.2'
+
+
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+            manifest.srcFile 'AndroidManifest.xml'
+            java.srcDirs = ['src']
+            res.srcDirs = ['res']
+            assets.srcDirs = ['../data']
+        }
+    }
+
+    aaptOptions {
+        noCompress 'zip', 'ogg'
+        ignoreAssetsPattern "!*.dll:*.icf"
+    }
+}

+ 5 - 0
examples/Game/part4/proj.android/settings.gradle

@@ -0,0 +1,5 @@
+include 'oxygine-lib'
+project(':oxygine-lib').projectDir = new File('../../../../..//oxygine-framework/oxygine/SDL/android/lib')
+
+include 'oxygine-extension'
+project(':oxygine-extension').projectDir = new File('../../../../..//oxygine-framework/oxygine/SDL/android/extension')

+ 4 - 6
examples/Game/part4/proj.cmake/CMakeLists.txt

@@ -6,7 +6,8 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OXYGINE_CXX_FLAGS}")
+
 add_executable(GamePart4 ../src/Enemy.cpp ../src/Game.cpp ../src/GameMenu.cpp ../src/GameScene.cpp ../src/Joystick.cpp ../src/MainMenuScene.cpp ../src/MyButton.cpp ../src/Player.cpp ../src/Rocket.cpp ../src/Scene.cpp ../src/Unit.cpp ../src/example.cpp ../src/main.cpp ../src/res.cpp  ../src/Enemy.h ../src/Game.h ../src/GameMenu.h ../src/GameScene.h ../src/Joystick.h ../src/MainMenuScene.h ../src/MyButton.h ../src/Player.h ../src/Rocket.h ../src/Scene.h ../src/Unit.h ../src/example.h ../src/res.h )
 target_link_libraries(GamePart4 ${OXYGINE_CORE_LIBS})
 
@@ -19,10 +20,7 @@ endif(WIN32)
 
 
 if (EMSCRIPTEN)
-	SET(CMAKE_EXECUTABLE_SUFFIX ".html")
-	set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
-
-	set_target_properties(GamePart4 PROPERTIES LINK_FLAGS "${linkFlags}")
-
+	SET(CMAKE_EXECUTABLE_SUFFIX ".html")	
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
 	em_link_pre_js(GamePart4  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 8 - 1
examples/Game/part4/proj.ios/GamePart4/GamePart4_ios-Info.plist

@@ -13,7 +13,7 @@
 	<key>CFBundleIcons~ipad</key>
 	<dict/>
 	<key>CFBundleIdentifier</key>
-	<string>oxygine.${PRODUCT_NAME:rfc1034identifier}</string>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
 	<string>6.0</string>
 	<key>CFBundleName</key>
@@ -34,6 +34,8 @@
 	<array>
 		<string>armv7</string>
 	</array>
+	<key>UIRequiresFullScreen</key>
+	<true/>
 	<key>UIStatusBarHidden</key>
 	<true/>
 	<key>UISupportedInterfaceOrientations</key>
@@ -46,6 +48,11 @@
 		<string>UIInterfaceOrientationLandscapeLeft</string>
 		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
 	<key>UIViewControllerBasedStatusBarAppearance</key>
 	<false/>
 </dict>

+ 10 - 6
examples/Game/part4/proj.ios/GamePart4_ios.xcodeproj/project.pbxproj

@@ -23,8 +23,8 @@
 		04998EF817F8B6F3003441C3 /* libjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EF617F8B6F3003441C3 /* libjpeg.a */; };
 		049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 049B52AD1871EBBA00EF3C66 /* liboxygine_ios.a */; };
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
-
+		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
+		
 		2DC477AC10D6C07B3FE008F6 /* ../src/Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */; };
 		DA49ED8903C628BA578C8670 /* ../src/Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF9628FC8D38F9748F0CDEB /* ../src/Game.cpp */; };
 		C8860D93875589970329DCCD /* ../src/GameMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DA100C319512824B7570663 /* ../src/GameMenu.cpp */; };
@@ -43,6 +43,7 @@
 		2EDD01D75F08726BE081C106 /* ../data/images in Sources */ = {isa = PBXBuildFile; fileRef = B52CCD463855CF91A7FBDB8E /* ../data/images */; };
 		D42581590DA5455B882E551F /* ../data/xmls in Sources */ = {isa = PBXBuildFile; fileRef = 7EEFDEEC289FCBB5FA67F822 /* ../data/xmls */; };
 
+
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -90,10 +91,10 @@
 		04998EEC17F8ADD4003441C3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		04998EED17F8ADD4003441C3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
 		9223FE7E1C2D913D000B1FDA /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
+		AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
 		04998EF517F8B6F3003441C3 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = "../../../..//oxygine/third_party/ios/libraries/libpng.a"; sourceTree = "<group>"; };
 		04998EF617F8B6F3003441C3 /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjpeg.a; path = "../../../..//oxygine/third_party/ios/libraries/libjpeg.a"; sourceTree = "<group>"; };
 		04E9AD3E1876FE84006A7317 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name =Images.xcassets; path = GamePart4/Images.xcassets; sourceTree = "<group>"; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
 
 		360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Enemy.cpp; path = ../src/Enemy.cpp; sourceTree = "<group>"; };
 		0BF9628FC8D38F9748F0CDEB /* ../src/Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Game.cpp; path = ../src/Game.cpp; sourceTree = "<group>"; };
@@ -126,6 +127,7 @@
 		B52CCD463855CF91A7FBDB8E /* ../data/images */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = images; path = ../data/images; sourceTree = "<group>"; };
 		7EEFDEEC289FCBB5FA67F822 /* ../data/xmls */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = xmls; path = ../data/xmls; sourceTree = "<group>"; };
 
+
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -133,6 +135,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
 				049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */,
 				04998D3617F8A97D003441C3 /* libSDL2.a in Frameworks */,
@@ -166,7 +169,6 @@
 		04998CE317F8A933003441C3 = {
 			isa = PBXGroup;
 			children = (
-				922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */,
 				045D531C17F8BD5E00CC2C64 /* dependencies */,
 				04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */,
 				04998D2F17F8A96E003441C3 /* SDL.xcodeproj */,
@@ -189,6 +191,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,
 				04998EEB17F8ADD4003441C3 /* UIKit.framework */,
 				048AD0AD197D24AB001963EF /* CoreMotion.framework */,
@@ -347,7 +350,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */,
-				922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */,
 								E02A0627DE00D04110ABADA6 /* fonts */, 
 				2EDD01D75F08726BE081C106 /* images */, 
 				D42581590DA5455B882E551F /* xmls */, 
@@ -431,7 +433,7 @@
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
-				ONLY_ACTIVE_ARCH = NO;
+				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				USER_HEADER_SEARCH_PATHS = "../../../..//oxygine/src ../../../../..//SDL/include";
@@ -491,6 +493,7 @@
 					"../../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.gamepart4;
 				PRODUCT_NAME = GamePart4_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";
@@ -515,6 +518,7 @@
 					"../../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.gamepart4;
 				PRODUCT_NAME = GamePart4_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";

+ 1 - 1
examples/Game/part4/src/GameMenu.cpp

@@ -25,7 +25,7 @@ GameMenu::GameMenu()
     //initialize TextStyle for TextField
     //TextStyle is plain struct with "setting" for Text
     TextStyle style;
-    style.font = res::ui.getResFont("big")->getFont();
+    style.font = res::ui.getResFont("big");
     //vertical align
     style.vAlign = TextStyle::VALIGN_BOTTOM;
     //horizontal align

+ 1 - 1
examples/Game/part4/src/MyButton.cpp

@@ -32,7 +32,7 @@ void MyButton::setText(const string& txt)
     {
         //create TextField if it wasn't created yet
         TextStyle style;
-        style.font = res::ui.getResFont("normal")->getFont();
+        style.font = res::ui.getResFont("normal");
         style.vAlign = TextStyle::VALIGN_MIDDLE;
         style.hAlign = TextStyle::HALIGN_CENTER;
 

+ 8 - 15
examples/Game/part4/src/main.cpp

@@ -138,9 +138,12 @@ int main(int argc, char* argv[])
 
 #include "SDL_main.h"
 #include "SDL.h"
+
 extern "C"
 {
     void one(void* param) { mainloop(); }
+    void oneEmsc() { mainloop(); }
+
     int main(int argc, char* argv[])
     {
 
@@ -151,21 +154,11 @@ extern "C"
         SDL_iPhoneSetAnimationCallback(core::getWindow(), 1, one, nullptr);
 #endif
 
+#if EMSCRIPTEN
+        emscripten_set_main_loop(oneEmsc, 0, 0);
+#endif
+
         return 0;
     }
 };
-#endif
-
-
-#ifdef EMSCRIPTEN
-#include <emscripten.h>
-
-void one() { mainloop(); }
-
-int main(int argc, char* argv[])
-{
-    run();
-    emscripten_set_main_loop(one, 0, 0);
-    return 0;
-}
-#endif
+#endif

+ 40 - 0
examples/Game/part5/proj.android/build.gradle

@@ -0,0 +1,40 @@
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:1.0.+'
+    }
+}
+
+apply plugin: 'com.android.application'
+
+
+
+dependencies {
+    compile(project(':oxygine-extension'))
+    compile(project(':oxygine-lib')) { exclude module: 'oxygine-extension' }
+}
+
+android {
+    enforceUniquePackageName=false
+        
+    compileSdkVersion 23
+    buildToolsVersion '23.0.2'
+
+
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+            manifest.srcFile 'AndroidManifest.xml'
+            java.srcDirs = ['src']
+            res.srcDirs = ['res']
+            assets.srcDirs = ['../data']
+        }
+    }
+
+    aaptOptions {
+        noCompress 'zip', 'ogg'
+        ignoreAssetsPattern "!*.dll:*.icf"
+    }
+}

+ 5 - 0
examples/Game/part5/proj.android/settings.gradle

@@ -0,0 +1,5 @@
+include 'oxygine-lib'
+project(':oxygine-lib').projectDir = new File('../../../../..//oxygine-framework/oxygine/SDL/android/lib')
+
+include 'oxygine-extension'
+project(':oxygine-extension').projectDir = new File('../../../../..//oxygine-framework/oxygine/SDL/android/extension')

+ 4 - 6
examples/Game/part5/proj.cmake/CMakeLists.txt

@@ -6,7 +6,8 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OXYGINE_CXX_FLAGS}")
+
 add_executable(GamePart5 ../src/Enemy.cpp ../src/Game.cpp ../src/GameMenu.cpp ../src/GameScene.cpp ../src/Joystick.cpp ../src/MainMenuScene.cpp ../src/MyButton.cpp ../src/Player.cpp ../src/Rocket.cpp ../src/Scene.cpp ../src/Unit.cpp ../src/example.cpp ../src/main.cpp ../src/res.cpp  ../src/Enemy.h ../src/Game.h ../src/GameMenu.h ../src/GameScene.h ../src/Joystick.h ../src/MainMenuScene.h ../src/MyButton.h ../src/Player.h ../src/Rocket.h ../src/Scene.h ../src/Unit.h ../src/example.h ../src/res.h )
 target_link_libraries(GamePart5 ${OXYGINE_CORE_LIBS})
 
@@ -19,10 +20,7 @@ endif(WIN32)
 
 
 if (EMSCRIPTEN)
-	SET(CMAKE_EXECUTABLE_SUFFIX ".html")
-	set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
-
-	set_target_properties(GamePart5 PROPERTIES LINK_FLAGS "${linkFlags}")
-
+	SET(CMAKE_EXECUTABLE_SUFFIX ".html")	
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
 	em_link_pre_js(GamePart5  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 8 - 1
examples/Game/part5/proj.ios/GamePart5/GamePart5_ios-Info.plist

@@ -13,7 +13,7 @@
 	<key>CFBundleIcons~ipad</key>
 	<dict/>
 	<key>CFBundleIdentifier</key>
-	<string>oxygine.${PRODUCT_NAME:rfc1034identifier}</string>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
 	<string>6.0</string>
 	<key>CFBundleName</key>
@@ -34,6 +34,8 @@
 	<array>
 		<string>armv7</string>
 	</array>
+	<key>UIRequiresFullScreen</key>
+	<true/>
 	<key>UIStatusBarHidden</key>
 	<true/>
 	<key>UISupportedInterfaceOrientations</key>
@@ -46,6 +48,11 @@
 		<string>UIInterfaceOrientationLandscapeLeft</string>
 		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
 	<key>UIViewControllerBasedStatusBarAppearance</key>
 	<false/>
 </dict>

+ 10 - 6
examples/Game/part5/proj.ios/GamePart5_ios.xcodeproj/project.pbxproj

@@ -23,8 +23,8 @@
 		04998EF817F8B6F3003441C3 /* libjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EF617F8B6F3003441C3 /* libjpeg.a */; };
 		049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 049B52AD1871EBBA00EF3C66 /* liboxygine_ios.a */; };
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
-
+		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
+		
 		2DC477AC10D6C07B3FE008F6 /* ../src/Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */; };
 		DA49ED8903C628BA578C8670 /* ../src/Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF9628FC8D38F9748F0CDEB /* ../src/Game.cpp */; };
 		C8860D93875589970329DCCD /* ../src/GameMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DA100C319512824B7570663 /* ../src/GameMenu.cpp */; };
@@ -43,6 +43,7 @@
 		2EDD01D75F08726BE081C106 /* ../data/ui.xml.ox in Sources */ = {isa = PBXBuildFile; fileRef = B52CCD463855CF91A7FBDB8E /* ../data/ui.xml.ox */; };
 		D42581590DA5455B882E551F /* ../data/xmls in Sources */ = {isa = PBXBuildFile; fileRef = 7EEFDEEC289FCBB5FA67F822 /* ../data/xmls */; };
 
+
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -90,10 +91,10 @@
 		04998EEC17F8ADD4003441C3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		04998EED17F8ADD4003441C3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
 		9223FE7E1C2D913D000B1FDA /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
+		AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
 		04998EF517F8B6F3003441C3 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = "../../../..//oxygine/third_party/ios/libraries/libpng.a"; sourceTree = "<group>"; };
 		04998EF617F8B6F3003441C3 /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjpeg.a; path = "../../../..//oxygine/third_party/ios/libraries/libjpeg.a"; sourceTree = "<group>"; };
 		04E9AD3E1876FE84006A7317 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name =Images.xcassets; path = GamePart5/Images.xcassets; sourceTree = "<group>"; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
 
 		360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Enemy.cpp; path = ../src/Enemy.cpp; sourceTree = "<group>"; };
 		0BF9628FC8D38F9748F0CDEB /* ../src/Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Game.cpp; path = ../src/Game.cpp; sourceTree = "<group>"; };
@@ -126,6 +127,7 @@
 		B52CCD463855CF91A7FBDB8E /* ../data/ui.xml.ox */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = ui.xml.ox; path = ../data/ui.xml.ox; sourceTree = "<group>"; };
 		7EEFDEEC289FCBB5FA67F822 /* ../data/xmls */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = xmls; path = ../data/xmls; sourceTree = "<group>"; };
 
+
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -133,6 +135,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
 				049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */,
 				04998D3617F8A97D003441C3 /* libSDL2.a in Frameworks */,
@@ -166,7 +169,6 @@
 		04998CE317F8A933003441C3 = {
 			isa = PBXGroup;
 			children = (
-				922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */,
 				045D531C17F8BD5E00CC2C64 /* dependencies */,
 				04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */,
 				04998D2F17F8A96E003441C3 /* SDL.xcodeproj */,
@@ -189,6 +191,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,
 				04998EEB17F8ADD4003441C3 /* UIKit.framework */,
 				048AD0AD197D24AB001963EF /* CoreMotion.framework */,
@@ -347,7 +350,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */,
-				922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */,
 								E02A0627DE00D04110ABADA6 /* fonts */, 
 				2EDD01D75F08726BE081C106 /* ui.xml.ox */, 
 				D42581590DA5455B882E551F /* xmls */, 
@@ -431,7 +433,7 @@
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
-				ONLY_ACTIVE_ARCH = NO;
+				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				USER_HEADER_SEARCH_PATHS = "../../../..//oxygine/src ../../../../..//SDL/include";
@@ -491,6 +493,7 @@
 					"../../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.gamepart5;
 				PRODUCT_NAME = GamePart5_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";
@@ -515,6 +518,7 @@
 					"../../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.gamepart5;
 				PRODUCT_NAME = GamePart5_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";

+ 1 - 1
examples/Game/part5/src/GameMenu.cpp

@@ -25,7 +25,7 @@ GameMenu::GameMenu()
     //initialize TextStyle for TextField
     //TextStyle is plain struct with "setting" for Text
     TextStyle style;
-    style.font = res::ui.getResFont("big")->getFont();
+    style.font = res::ui.getResFont("big");
     //vertical align
     style.vAlign = TextStyle::VALIGN_BOTTOM;
     //horizontal align

+ 1 - 1
examples/Game/part5/src/MyButton.cpp

@@ -32,7 +32,7 @@ void MyButton::setText(const string& txt)
     {
         //create TextField if it wasn't created yet
         TextStyle style;
-        style.font = res::ui.getResFont("normal")->getFont();
+        style.font = res::ui.getResFont("normal");
         style.vAlign = TextStyle::VALIGN_MIDDLE;
         style.hAlign = TextStyle::HALIGN_CENTER;
 

+ 8 - 15
examples/Game/part5/src/main.cpp

@@ -138,9 +138,12 @@ int main(int argc, char* argv[])
 
 #include "SDL_main.h"
 #include "SDL.h"
+
 extern "C"
 {
     void one(void* param) { mainloop(); }
+    void oneEmsc() { mainloop(); }
+
     int main(int argc, char* argv[])
     {
 
@@ -151,21 +154,11 @@ extern "C"
         SDL_iPhoneSetAnimationCallback(core::getWindow(), 1, one, nullptr);
 #endif
 
+#if EMSCRIPTEN
+        emscripten_set_main_loop(oneEmsc, 0, 0);
+#endif
+
         return 0;
     }
 };
-#endif
-
-
-#ifdef EMSCRIPTEN
-#include <emscripten.h>
-
-void one() { mainloop(); }
-
-int main(int argc, char* argv[])
-{
-    run();
-    emscripten_set_main_loop(one, 0, 0);
-    return 0;
-}
-#endif
+#endif

+ 21 - 28
examples/HelloWorld/proj.android/build.gradle

@@ -12,36 +12,29 @@ apply plugin: 'com.android.application'
 
 
 dependencies {
-		compile(project(':oxygine-extension'))
-        compile(project(':oxygine-lib')) { exclude module: 'oxygine-extension' }
-    }
+    compile(project(':oxygine-extension'))
+    compile(project(':oxygine-lib')) { exclude module: 'oxygine-extension' }
+}
 
 android {
-		enforceUniquePackageName=false
-		
-        compileSdkVersion 23
-        buildToolsVersion '23.0.2'
-
-        task buildNative(type: Exec) {
-            commandLine 'cmd', '/c', 'build.bat'
-            standardOutput = new ByteArrayOutputStream()
-
-            ext.output = {
-                return standardOutput.toString()
-            }
-        }        
-
-        tasks.withType(JavaCompile) {
-                compileTask -> compileTask.dependsOn buildNative
+    enforceUniquePackageName=false
+        
+    compileSdkVersion 23
+    buildToolsVersion '23.0.2'
+
+
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+            manifest.srcFile 'AndroidManifest.xml'
+            java.srcDirs = ['src']
+            res.srcDirs = ['res']
+            assets.srcDirs = ['../data']
         }
+    }
 
-  		sourceSets {
-            main {
-                jniLibs.srcDirs = ['libs']
-                manifest.srcFile 'AndroidManifest.xml'
-                java.srcDirs = ['src']
-                res.srcDirs = ['res']
-                assets.srcDirs = ['../data']
-            }
-        }
+    aaptOptions {
+        noCompress 'zip', 'ogg'
+        ignoreAssetsPattern "!*.dll:*.icf"
+    }
 }

+ 4 - 6
examples/HelloWorld/proj.cmake/CMakeLists.txt

@@ -6,7 +6,8 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OXYGINE_CXX_FLAGS}")
+
 add_executable(HelloWorld ../src/example.cpp ../src/main.cpp  ../src/example.h )
 target_link_libraries(HelloWorld ${OXYGINE_CORE_LIBS})
 
@@ -19,10 +20,7 @@ endif(WIN32)
 
 
 if (EMSCRIPTEN)
-	SET(CMAKE_EXECUTABLE_SUFFIX ".html")
-	set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
-
-	set_target_properties(HelloWorld PROPERTIES LINK_FLAGS "${linkFlags}")
-
+	SET(CMAKE_EXECUTABLE_SUFFIX ".html")	
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
 	em_link_pre_js(HelloWorld  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 8 - 1
examples/HelloWorld/proj.ios/HelloWorld/HelloWorld_ios-Info.plist

@@ -13,7 +13,7 @@
 	<key>CFBundleIcons~ipad</key>
 	<dict/>
 	<key>CFBundleIdentifier</key>
-	<string>oxygine.${PRODUCT_NAME:rfc1034identifier}</string>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
 	<string>6.0</string>
 	<key>CFBundleName</key>
@@ -34,6 +34,8 @@
 	<array>
 		<string>armv7</string>
 	</array>
+	<key>UIRequiresFullScreen</key>
+	<true/>
 	<key>UIStatusBarHidden</key>
 	<true/>
 	<key>UISupportedInterfaceOrientations</key>
@@ -46,6 +48,11 @@
 		<string>UIInterfaceOrientationLandscapeLeft</string>
 		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
 	<key>UIViewControllerBasedStatusBarAppearance</key>
 	<false/>
 </dict>

+ 10 - 6
examples/HelloWorld/proj.ios/HelloWorld_ios.xcodeproj/project.pbxproj

@@ -23,14 +23,15 @@
 		04998EF817F8B6F3003441C3 /* libjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EF617F8B6F3003441C3 /* libjpeg.a */; };
 		049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 049B52AD1871EBBA00EF3C66 /* liboxygine_ios.a */; };
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
-
+		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
+		
 		2DC477AC10D6C07B3FE008F6 /* ../src/example.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/example.cpp */; };
 		DA49ED8903C628BA578C8670 /* ../src/main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF9628FC8D38F9748F0CDEB /* ../src/main.cpp */; };
 		C8860D93875589970329DCCD /* ../data/fonts in Sources */ = {isa = PBXBuildFile; fileRef = 4DA100C319512824B7570663 /* ../data/fonts */; };
 		1E839D002B2BA83FC83A695A /* ../data/images in Sources */ = {isa = PBXBuildFile; fileRef = 04FE4D4FB640E0DF92DFB865 /* ../data/images */; };
 		3A631A475DE035FC53ADE5EA /* ../data/res.xml in Sources */ = {isa = PBXBuildFile; fileRef = 7F3B12E3C9D554D9FE28101D /* ../data/res.xml */; };
 
+
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -78,10 +79,10 @@
 		04998EEC17F8ADD4003441C3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		04998EED17F8ADD4003441C3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
 		9223FE7E1C2D913D000B1FDA /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
+		AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
 		04998EF517F8B6F3003441C3 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = "../../..//oxygine/third_party/ios/libraries/libpng.a"; sourceTree = "<group>"; };
 		04998EF617F8B6F3003441C3 /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjpeg.a; path = "../../..//oxygine/third_party/ios/libraries/libjpeg.a"; sourceTree = "<group>"; };
 		04E9AD3E1876FE84006A7317 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name =Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = "<group>"; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
 
 		360377333740D8A2FD15BBE6 /* ../src/example.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = example.cpp; path = ../src/example.cpp; sourceTree = "<group>"; };
 		0BF9628FC8D38F9748F0CDEB /* ../src/main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../src/main.cpp; sourceTree = "<group>"; };
@@ -90,6 +91,7 @@
 		04FE4D4FB640E0DF92DFB865 /* ../data/images */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = images; path = ../data/images; sourceTree = "<group>"; };
 		7F3B12E3C9D554D9FE28101D /* ../data/res.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = wtf; name = res.xml; path = ../data/res.xml; sourceTree = "<group>"; };
 
+
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -97,6 +99,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
 				049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */,
 				04998D3617F8A97D003441C3 /* libSDL2.a in Frameworks */,
@@ -130,7 +133,6 @@
 		04998CE317F8A933003441C3 = {
 			isa = PBXGroup;
 			children = (
-				922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */,
 				045D531C17F8BD5E00CC2C64 /* dependencies */,
 				04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */,
 				04998D2F17F8A96E003441C3 /* SDL.xcodeproj */,
@@ -153,6 +155,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,
 				04998EEB17F8ADD4003441C3 /* UIKit.framework */,
 				048AD0AD197D24AB001963EF /* CoreMotion.framework */,
@@ -287,7 +290,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */,
-				922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */,
 								C8860D93875589970329DCCD /* fonts */, 
 				1E839D002B2BA83FC83A695A /* images */, 
 				3A631A475DE035FC53ADE5EA /* res.xml */, 
@@ -359,7 +361,7 @@
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
-				ONLY_ACTIVE_ARCH = NO;
+				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				USER_HEADER_SEARCH_PATHS = "../../..//oxygine/src ../../../..//SDL/include";
@@ -419,6 +421,7 @@
 					"../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.helloworld;
 				PRODUCT_NAME = HelloWorld_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";
@@ -443,6 +446,7 @@
 					"../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.helloworld;
 				PRODUCT_NAME = HelloWorld_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";

+ 3 - 1
examples/HelloWorld/src/example.cpp

@@ -1,5 +1,6 @@
 #include "oxygine-framework.h"
 #include <functional>
+#include "res/SingleResAnim.h"
 using namespace oxygine;
 
 //it is our resources
@@ -19,6 +20,7 @@ public:
         //create button Sprite
         spSprite button = new Sprite();
 
+
         //setup it:
         //set button.png image. Resource 'button' defined in 'res.xml'
         button->setResAnim(gameResources.getResAnim("button"));
@@ -55,7 +57,7 @@ public:
 
         //initialize text style
         TextStyle style;
-        style.font = gameResources.getResFont("main")->getFont();
+        style.font = gameResources.getResFont("main");
         style.color = Color::White;
         style.vAlign = TextStyle::VALIGN_MIDDLE;
         style.hAlign = TextStyle::HALIGN_CENTER;

+ 8 - 15
examples/HelloWorld/src/main.cpp

@@ -138,9 +138,12 @@ int main(int argc, char* argv[])
 
 #include "SDL_main.h"
 #include "SDL.h"
+
 extern "C"
 {
     void one(void* param) { mainloop(); }
+    void oneEmsc() { mainloop(); }
+
     int main(int argc, char* argv[])
     {
 
@@ -151,21 +154,11 @@ extern "C"
         SDL_iPhoneSetAnimationCallback(core::getWindow(), 1, one, nullptr);
 #endif
 
+#if EMSCRIPTEN
+        emscripten_set_main_loop(oneEmsc, 0, 0);
+#endif
+
         return 0;
     }
 };
-#endif
-
-
-#ifdef EMSCRIPTEN
-#include <emscripten.h>
-
-void one() { mainloop(); }
-
-int main(int argc, char* argv[])
-{
-    run();
-    emscripten_set_main_loop(one, 0, 0);
-    return 0;
-}
-#endif
+#endif

+ 40 - 0
examples/Match3/proj.android/build.gradle

@@ -0,0 +1,40 @@
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:1.0.+'
+    }
+}
+
+apply plugin: 'com.android.application'
+
+
+
+dependencies {
+    compile(project(':oxygine-extension'))
+    compile(project(':oxygine-lib')) { exclude module: 'oxygine-extension' }
+}
+
+android {
+    enforceUniquePackageName=false
+        
+    compileSdkVersion 23
+    buildToolsVersion '23.0.2'
+
+
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+            manifest.srcFile 'AndroidManifest.xml'
+            java.srcDirs = ['src']
+            res.srcDirs = ['res']
+            assets.srcDirs = ['../data']
+        }
+    }
+
+    aaptOptions {
+        noCompress 'zip', 'ogg'
+        ignoreAssetsPattern "!*.dll:*.icf"
+    }
+}

+ 5 - 0
examples/Match3/proj.android/settings.gradle

@@ -0,0 +1,5 @@
+include 'oxygine-lib'
+project(':oxygine-lib').projectDir = new File('../../../..//oxygine-framework/oxygine/SDL/android/lib')
+
+include 'oxygine-extension'
+project(':oxygine-extension').projectDir = new File('../../../..//oxygine-framework/oxygine/SDL/android/extension')

+ 4 - 6
examples/Match3/proj.cmake/CMakeLists.txt

@@ -6,7 +6,8 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OXYGINE_CXX_FLAGS}")
+
 add_executable(Match3 ../src/Board.cpp ../src/Jewel.cpp ../src/example.cpp ../src/main.cpp ../src/shared.cpp  ../src/Board.h ../src/Jewel.h ../src/example.h ../src/shared.h )
 target_link_libraries(Match3 ${OXYGINE_CORE_LIBS})
 
@@ -19,10 +20,7 @@ endif(WIN32)
 
 
 if (EMSCRIPTEN)
-	SET(CMAKE_EXECUTABLE_SUFFIX ".html")
-	set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
-
-	set_target_properties(Match3 PROPERTIES LINK_FLAGS "${linkFlags}")
-
+	SET(CMAKE_EXECUTABLE_SUFFIX ".html")	
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648")
 	em_link_pre_js(Match3  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 8 - 1
examples/Match3/proj.ios/Match3/Match3_ios-Info.plist

@@ -13,7 +13,7 @@
 	<key>CFBundleIcons~ipad</key>
 	<dict/>
 	<key>CFBundleIdentifier</key>
-	<string>oxygine.${PRODUCT_NAME:rfc1034identifier}</string>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
 	<string>6.0</string>
 	<key>CFBundleName</key>
@@ -34,6 +34,8 @@
 	<array>
 		<string>armv7</string>
 	</array>
+	<key>UIRequiresFullScreen</key>
+	<true/>
 	<key>UIStatusBarHidden</key>
 	<true/>
 	<key>UISupportedInterfaceOrientations</key>
@@ -46,6 +48,11 @@
 		<string>UIInterfaceOrientationLandscapeLeft</string>
 		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
 	<key>UIViewControllerBasedStatusBarAppearance</key>
 	<false/>
 </dict>

+ 10 - 6
examples/Match3/proj.ios/Match3_ios.xcodeproj/project.pbxproj

@@ -23,8 +23,8 @@
 		04998EF817F8B6F3003441C3 /* libjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EF617F8B6F3003441C3 /* libjpeg.a */; };
 		049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 049B52AD1871EBBA00EF3C66 /* liboxygine_ios.a */; };
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
-
+		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
+		
 		2DC477AC10D6C07B3FE008F6 /* ../src/Board.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Board.cpp */; };
 		DA49ED8903C628BA578C8670 /* ../src/Jewel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF9628FC8D38F9748F0CDEB /* ../src/Jewel.cpp */; };
 		C8860D93875589970329DCCD /* ../src/example.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DA100C319512824B7570663 /* ../src/example.cpp */; };
@@ -34,6 +34,7 @@
 		EFF139F8BA484314F7AAF645 /* ../data/images in Sources */ = {isa = PBXBuildFile; fileRef = 5DE458993031811A4C7D28C1 /* ../data/images */; };
 		F2CFD518E4E2E05ECEDBB262 /* ../data/resources.xml in Sources */ = {isa = PBXBuildFile; fileRef = BA41FC88D76540A6905224D6 /* ../data/resources.xml */; };
 
+
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -81,10 +82,10 @@
 		04998EEC17F8ADD4003441C3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		04998EED17F8ADD4003441C3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
 		9223FE7E1C2D913D000B1FDA /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
+		AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
 		04998EF517F8B6F3003441C3 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = "../../..//oxygine/third_party/ios/libraries/libpng.a"; sourceTree = "<group>"; };
 		04998EF617F8B6F3003441C3 /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjpeg.a; path = "../../..//oxygine/third_party/ios/libraries/libjpeg.a"; sourceTree = "<group>"; };
 		04E9AD3E1876FE84006A7317 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name =Images.xcassets; path = Match3/Images.xcassets; sourceTree = "<group>"; };
-		922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */; settings = {ASSET_TAGS = (); }; };
 
 		360377333740D8A2FD15BBE6 /* ../src/Board.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Board.cpp; path = ../src/Board.cpp; sourceTree = "<group>"; };
 		0BF9628FC8D38F9748F0CDEB /* ../src/Jewel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Jewel.cpp; path = ../src/Jewel.cpp; sourceTree = "<group>"; };
@@ -99,6 +100,7 @@
 		5DE458993031811A4C7D28C1 /* ../data/images */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = images; path = ../data/images; sourceTree = "<group>"; };
 		BA41FC88D76540A6905224D6 /* ../data/resources.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = wtf; name = resources.xml; path = ../data/resources.xml; sourceTree = "<group>"; };
 
+
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -106,6 +108,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
 				049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */,
 				04998D3617F8A97D003441C3 /* libSDL2.a in Frameworks */,
@@ -139,7 +142,6 @@
 		04998CE317F8A933003441C3 = {
 			isa = PBXGroup;
 			children = (
-				922B9F8E1BBB2FB100B1401E /* LaunchScreen.storyboard */,
 				045D531C17F8BD5E00CC2C64 /* dependencies */,
 				04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */,
 				04998D2F17F8A96E003441C3 /* SDL.xcodeproj */,
@@ -162,6 +164,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,
 				04998EEB17F8ADD4003441C3 /* UIKit.framework */,
 				048AD0AD197D24AB001963EF /* CoreMotion.framework */,
@@ -302,7 +305,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */,
-				922B9F8F1BBB2FB100B1401E /* LaunchScreen.storyboard in Resources */,
 								CD59C69314E9E74CD0A11E03 /* fonts */, 
 				EFF139F8BA484314F7AAF645 /* images */, 
 				F2CFD518E4E2E05ECEDBB262 /* resources.xml */, 
@@ -377,7 +379,7 @@
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
-				ONLY_ACTIVE_ARCH = NO;
+				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				USER_HEADER_SEARCH_PATHS = "../../..//oxygine/src ../../../..//SDL/include";
@@ -437,6 +439,7 @@
 					"../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.match3;
 				PRODUCT_NAME = Match3_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";
@@ -461,6 +464,7 @@
 					"../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.match3;
 				PRODUCT_NAME = Match3_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";

+ 8 - 15
examples/Match3/src/main.cpp

@@ -138,9 +138,12 @@ int main(int argc, char* argv[])
 
 #include "SDL_main.h"
 #include "SDL.h"
+
 extern "C"
 {
     void one(void* param) { mainloop(); }
+    void oneEmsc() { mainloop(); }
+
     int main(int argc, char* argv[])
     {
 
@@ -151,21 +154,11 @@ extern "C"
         SDL_iPhoneSetAnimationCallback(core::getWindow(), 1, one, nullptr);
 #endif
 
+#if EMSCRIPTEN
+        emscripten_set_main_loop(oneEmsc, 0, 0);
+#endif
+
         return 0;
     }
 };
-#endif
-
-
-#ifdef EMSCRIPTEN
-#include <emscripten.h>
-
-void one() { mainloop(); }
-
-int main(int argc, char* argv[])
-{
-    run();
-    emscripten_set_main_loop(one, 0, 0);
-    return 0;
-}
-#endif
+#endif

BIN
libs/SDL2.dll


BIN
libs/SDL2.lib


BIN
libs/SDL2main.lib


+ 1 - 1
license.txt

@@ -1,4 +1,4 @@
-This framework (folders: examples, oxygine, tools) is distributed under the MIT License:
+This framework is distributed under the MIT License:
 
 Copyright (c) 2011-2013 Denis Muratshin
 

+ 1 - 1
oxygine/SDL/android/extension/build.gradle

@@ -11,7 +11,7 @@ apply plugin: 'com.android.library'
 
 android {
         compileSdkVersion 23
-  		buildToolsVersion '23.0.2'
+  		buildToolsVersion '23.0.3'
 
         sourceSets {
             main {

+ 69 - 16
oxygine/SDL/android/lib/src/org/libsdl/app/SDLActivity.java

@@ -17,7 +17,7 @@ import android.view.inputmethod.BaseInputConnection;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputConnection;
 import android.view.inputmethod.InputMethodManager;
-import android.widget.AbsoluteLayout;
+import android.widget.RelativeLayout;
 import android.widget.Button;
 import android.widget.LinearLayout;
 import android.widget.TextView;
@@ -59,6 +59,7 @@ public class SDLActivity extends Activity {
 
     // Audio
     protected static AudioTrack mAudioTrack;
+    protected static AudioRecord mAudioRecord;
 
     /**
      * This method is called by SDL before loading the native shared libraries.
@@ -106,6 +107,7 @@ public class SDLActivity extends Activity {
         mJoystickHandler = null;
         mSDLThread = null;
         mAudioTrack = null;
+        mAudioRecord = null;
         mExitCalledFromJava = false;
         mBrokenLibraries = false;
         mIsPaused = false;
@@ -171,7 +173,7 @@ public class SDLActivity extends Activity {
             mJoystickHandler = new SDLJoystickHandler();
         }
 
-        mLayout = new AbsoluteLayout(this);
+        mLayout = new RelativeLayout(this);
         mLayout.addView(mSurface);
 
         setContentView(mLayout);
@@ -504,8 +506,9 @@ public class SDLActivity extends Activity {
 
         @Override
         public void run() {
-            AbsoluteLayout.LayoutParams params = new AbsoluteLayout.LayoutParams(
-                    w, h + HEIGHT_PADDING, x, y);
+            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(w, h + HEIGHT_PADDING);
+            params.leftMargin = x;
+            params.topMargin = y;
 
             if (mTextEdit == null) {
                 mTextEdit = new DummyEdit(getContext());
@@ -543,7 +546,7 @@ public class SDLActivity extends Activity {
     /**
      * This method is called by SDL using JNI.
      */
-    public static int audioInit(int sampleRate, boolean is16Bit, boolean isStereo, int desiredFrames) {
+    public static int audioOpen(int sampleRate, boolean is16Bit, boolean isStereo, int desiredFrames) {
         int channelConfig = isStereo ? AudioFormat.CHANNEL_CONFIGURATION_STEREO : AudioFormat.CHANNEL_CONFIGURATION_MONO;
         int audioFormat = is16Bit ? AudioFormat.ENCODING_PCM_16BIT : AudioFormat.ENCODING_PCM_8BIT;
         int frameSize = (isStereo ? 2 : 1) * (is16Bit ? 2 : 1);
@@ -622,13 +625,72 @@ public class SDLActivity extends Activity {
     /**
      * This method is called by SDL using JNI.
      */
-    public static void audioQuit() {
+    public static int captureOpen(int sampleRate, boolean is16Bit, boolean isStereo, int desiredFrames) {
+        int channelConfig = isStereo ? AudioFormat.CHANNEL_CONFIGURATION_STEREO : AudioFormat.CHANNEL_CONFIGURATION_MONO;
+        int audioFormat = is16Bit ? AudioFormat.ENCODING_PCM_16BIT : AudioFormat.ENCODING_PCM_8BIT;
+        int frameSize = (isStereo ? 2 : 1) * (is16Bit ? 2 : 1);
+
+        Log.v(TAG, "SDL capture: wanted " + (isStereo ? "stereo" : "mono") + " " + (is16Bit ? "16-bit" : "8-bit") + " " + (sampleRate / 1000f) + "kHz, " + desiredFrames + " frames buffer");
+
+        // Let the user pick a larger buffer if they really want -- but ye
+        // gods they probably shouldn't, the minimums are horrifyingly high
+        // latency already
+        desiredFrames = Math.max(desiredFrames, (AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat) + frameSize - 1) / frameSize);
+
+        if (mAudioRecord == null) {
+            mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, sampleRate,
+                    channelConfig, audioFormat, desiredFrames * frameSize);
+
+            // see notes about AudioTrack state in audioOpen(), above. Probably also applies here.
+            if (mAudioRecord.getState() != AudioRecord.STATE_INITIALIZED) {
+                Log.e(TAG, "Failed during initialization of AudioRecord");
+                mAudioRecord.release();
+                mAudioRecord = null;
+                return -1;
+            }
+
+            mAudioRecord.startRecording();
+        }
+
+        Log.v(TAG, "SDL capture: got " + ((mAudioRecord.getChannelCount() >= 2) ? "stereo" : "mono") + " " + ((mAudioRecord.getAudioFormat() == AudioFormat.ENCODING_PCM_16BIT) ? "16-bit" : "8-bit") + " " + (mAudioRecord.getSampleRate() / 1000f) + "kHz, " + desiredFrames + " frames buffer");
+
+        return 0;
+    }
+
+    /** This method is called by SDL using JNI. */
+    public static int captureReadShortBuffer(short[] buffer, boolean blocking) {
+        // !!! FIXME: this is available in API Level 23. Until then, we always block.  :(
+        //return mAudioRecord.read(buffer, 0, buffer.length, blocking ? AudioRecord.READ_BLOCKING : AudioRecord.READ_NON_BLOCKING);
+        return mAudioRecord.read(buffer, 0, buffer.length);
+    }
+
+    /** This method is called by SDL using JNI. */
+    public static int captureReadByteBuffer(byte[] buffer, boolean blocking) {
+        // !!! FIXME: this is available in API Level 23. Until then, we always block.  :(
+        //return mAudioRecord.read(buffer, 0, buffer.length, blocking ? AudioRecord.READ_BLOCKING : AudioRecord.READ_NON_BLOCKING);
+        return mAudioRecord.read(buffer, 0, buffer.length);
+    }
+
+
+    /** This method is called by SDL using JNI. */
+    public static void audioClose() {
         if (mAudioTrack != null) {
             mAudioTrack.stop();
+            mAudioTrack.release();
             mAudioTrack = null;
         }
     }
 
+    /** This method is called by SDL using JNI. */
+    public static void captureClose() {
+        if (mAudioRecord != null) {
+            mAudioRecord.stop();
+            mAudioRecord.release();
+            mAudioRecord = null;
+        }
+    }
+
+
     // Input
 
     /**
@@ -670,15 +732,6 @@ public class SDLActivity extends Activity {
     /** com.android.vending.expansion.zipfile.ZipResourceFile's getInputStream() or null. */
     private Method expansionFileMethod;
 
-    /**
-     * This method was called by SDL using JNI.
-     * @deprecated because of an incorrect name
-     */
-    @Deprecated
-    public InputStream openAPKExtensionInputStream(String fileName) throws IOException {
-        return openAPKExpansionInputStream(fileName);
-    }
-
     /**
      * This method is called by SDL using JNI.
      * @return an InputStream on success or null if no expansion file was used.
@@ -1393,7 +1446,7 @@ class DummyEdit extends View implements View.OnKeyListener {
         // As seen on StackOverflow: http://stackoverflow.com/questions/7634346/keyboard-hide-event
         // FIXME: Discussion at http://bugzilla.libsdl.org/show_bug.cgi?id=1639
         // FIXME: This is not a 100% effective solution to the problem of detecting if the keyboard is showing or not
-        // FIXME: A more effective solution would be to change our Layout from AbsoluteLayout to Relative or Linear
+        // FIXME: A more effective solution would be to assume our Layout to be RelativeLayout or LinearLayout
         // FIXME: And determine the keyboard presence doing this: http://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android
         // FIXME: An even more effective way would be if Android provided this out of the box, but where would the fun be in that :)
         if (event.getAction()==KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {

+ 91 - 82
oxygine/SDL/ios/oxygine/oxygine_ios.xcodeproj/project.pbxproj

@@ -92,6 +92,10 @@
 		92CE26631A589401003901D6 /* ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 92CE26611A589401003901D6 /* ios.mm */; };
 		92E0C9A01B2491C200F0DB21 /* cdecode.c in Sources */ = {isa = PBXBuildFile; fileRef = 92E0C99E1B2491C200F0DB21 /* cdecode.c */; };
 		92E0C9A11B2491C200F0DB21 /* cdecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 92E0C99F1B2491C200F0DB21 /* cdecode.h */; };
+		AD2E0A7B1D6B4F6400E77A23 /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD2E0A791D6B4F6400E77A23 /* Image.cpp */; };
+		AD2E0A7C1D6B4F6400E77A23 /* Image.h in Headers */ = {isa = PBXBuildFile; fileRef = AD2E0A7A1D6B4F6400E77A23 /* Image.h */; };
+		AD977D911D56EAD800C3C05E /* key.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD977D8F1D56EAD800C3C05E /* key.cpp */; };
+		AD977D921D56EAD800C3C05E /* key.h in Headers */ = {isa = PBXBuildFile; fileRef = AD977D901D56EAD800C3C05E /* key.h */; };
 		C38704A617C0C71700015CA8 /* VideoDriverGLES20.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C38704A417C0C71700015CA8 /* VideoDriverGLES20.cpp */; };
 		C38704A717C0C71700015CA8 /* VideoDriverGLES20.h in Headers */ = {isa = PBXBuildFile; fileRef = C38704A517C0C71700015CA8 /* VideoDriverGLES20.h */; };
 		C38EC22C1709600E00568283 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C38EC22B1709600E00568283 /* OpenGLES.framework */; };
@@ -172,7 +176,6 @@
 		C3E8704816EBC8EB00052915 /* vector2.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FA516EBC8EB00052915 /* vector2.h */; };
 		C3E8704916EBC8EB00052915 /* vector3.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FA616EBC8EB00052915 /* vector3.h */; };
 		C3E8704A16EBC8EB00052915 /* vector4.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FA716EBC8EB00052915 /* vector4.h */; };
-		C3E8704B16EBC8EB00052915 /* MemoryTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86FA816EBC8EB00052915 /* MemoryTexture.cpp */; };
 		C3E8704C16EBC8EB00052915 /* MemoryTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FA916EBC8EB00052915 /* MemoryTexture.h */; };
 		C3E8705316EBC8EB00052915 /* PointerState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86FB016EBC8EB00052915 /* PointerState.cpp */; };
 		C3E8705416EBC8EB00052915 /* PointerState.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FB116EBC8EB00052915 /* PointerState.h */; };
@@ -199,7 +202,6 @@
 		C3E8706916EBC8EB00052915 /* Resources.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FCB16EBC8EB00052915 /* Resources.h */; };
 		C3E8706A16EBC8EB00052915 /* ResStarlingAtlas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86FCC16EBC8EB00052915 /* ResStarlingAtlas.cpp */; };
 		C3E8706B16EBC8EB00052915 /* ResStarlingAtlas.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FCD16EBC8EB00052915 /* ResStarlingAtlas.h */; };
-		C3E8706D16EBC8EB00052915 /* RootActor.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FCF16EBC8EB00052915 /* RootActor.h */; };
 		C3E8706E16EBC8EB00052915 /* SlidingActor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86FD016EBC8EB00052915 /* SlidingActor.cpp */; };
 		C3E8706F16EBC8EB00052915 /* SlidingActor.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FD116EBC8EB00052915 /* SlidingActor.h */; };
 		C3E8707016EBC8EB00052915 /* Sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86FD216EBC8EB00052915 /* Sprite.cpp */; };
@@ -330,6 +332,10 @@
 		92CE26611A589401003901D6 /* ios.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ios.mm; path = ../../../src/core/ios/ios.mm; sourceTree = "<group>"; };
 		92E0C99E1B2491C200F0DB21 /* cdecode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cdecode.c; sourceTree = "<group>"; };
 		92E0C99F1B2491C200F0DB21 /* cdecode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cdecode.h; sourceTree = "<group>"; };
+		AD2E0A791D6B4F6400E77A23 /* Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Image.cpp; path = ../../../src/Image.cpp; sourceTree = "<group>"; };
+		AD2E0A7A1D6B4F6400E77A23 /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Image.h; path = ../../../src/Image.h; sourceTree = "<group>"; };
+		AD977D8F1D56EAD800C3C05E /* key.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = key.cpp; path = ../../../src/key.cpp; sourceTree = "<group>"; };
+		AD977D901D56EAD800C3C05E /* key.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = key.h; path = ../../../src/key.h; sourceTree = "<group>"; };
 		C38704A417C0C71700015CA8 /* VideoDriverGLES20.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VideoDriverGLES20.cpp; path = gl/VideoDriverGLES20.cpp; sourceTree = "<group>"; };
 		C38704A517C0C71700015CA8 /* VideoDriverGLES20.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VideoDriverGLES20.h; path = gl/VideoDriverGLES20.h; sourceTree = "<group>"; };
 		C38EC22B1709600E00568283 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
@@ -413,7 +419,6 @@
 		C3E86FA516EBC8EB00052915 /* vector2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector2.h; sourceTree = "<group>"; };
 		C3E86FA616EBC8EB00052915 /* vector3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector3.h; sourceTree = "<group>"; };
 		C3E86FA716EBC8EB00052915 /* vector4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector4.h; sourceTree = "<group>"; };
-		C3E86FA816EBC8EB00052915 /* MemoryTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MemoryTexture.cpp; path = ../../../src/MemoryTexture.cpp; sourceTree = "<group>"; };
 		C3E86FA916EBC8EB00052915 /* MemoryTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MemoryTexture.h; path = ../../../src/MemoryTexture.h; sourceTree = "<group>"; };
 		C3E86FB016EBC8EB00052915 /* PointerState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PointerState.cpp; path = ../../../src/PointerState.cpp; sourceTree = "<group>"; };
 		C3E86FB116EBC8EB00052915 /* PointerState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PointerState.h; path = ../../../src/PointerState.h; sourceTree = "<group>"; };
@@ -442,7 +447,6 @@
 		C3E86FCB16EBC8EB00052915 /* Resources.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Resources.h; sourceTree = "<group>"; };
 		C3E86FCC16EBC8EB00052915 /* ResStarlingAtlas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ResStarlingAtlas.cpp; sourceTree = "<group>"; };
 		C3E86FCD16EBC8EB00052915 /* ResStarlingAtlas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResStarlingAtlas.h; sourceTree = "<group>"; };
-		C3E86FCF16EBC8EB00052915 /* RootActor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RootActor.h; path = ../../../src/RootActor.h; sourceTree = "<group>"; };
 		C3E86FD016EBC8EB00052915 /* SlidingActor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SlidingActor.cpp; path = ../../../src/SlidingActor.cpp; sourceTree = "<group>"; };
 		C3E86FD116EBC8EB00052915 /* SlidingActor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SlidingActor.h; path = ../../../src/SlidingActor.h; sourceTree = "<group>"; };
 		C3E86FD216EBC8EB00052915 /* Sprite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Sprite.cpp; path = ../../../src/Sprite.cpp; sourceTree = "<group>"; };
@@ -575,110 +579,112 @@
 		C3E86F5316EBC8C200052915 /* src */ = {
 			isa = PBXGroup;
 			children = (
-				922553371CAFA4EF00333A1E /* TweenGlow.cpp */,
-				922553381CAFA4EF00333A1E /* TweenGlow.h */,
-				9250AFAC1C9B14950060A168 /* PostProcess.cpp */,
-				9250AFAD1C9B14950060A168 /* PostProcess.h */,
-				9250AFAE1C9B14950060A168 /* TweenOutline.cpp */,
-				9250AFAF1C9B14950060A168 /* TweenOutline.h */,
-				929AF5641C88AA4000D276ED /* ThreadLoader.cpp */,
-				929AF5651C88AA4000D276ED /* ThreadLoader.h */,
-				9264E5B91B8358B00049F91F /* json */,
-				CEC2D0001C47288E00450163 /* Material.cpp */,
-				CEC2D0011C47288E00450163 /* Material.h */,
-				CEC2D0021C47288E00450163 /* STDMaterial.cpp */,
-				CEC2D0031C47288E00450163 /* STDMaterial.h */,
-				9240B4051ADFB856005F9C5B /* Property.h */,
-				9240B4061ADFB856005F9C5B /* TweenAnim.cpp */,
-				9240B4071ADFB856005F9C5B /* TweenAnim.h */,
-				9223E31B1A530E8A00B2770B /* HttpRequestTask.cpp */,
-				9223E3151A52D6B800B2770B /* HttpRequestTask.h */,
-				9223E3161A52D6B800B2770B /* WebImage.cpp */,
-				9223E3171A52D6B800B2770B /* WebImage.h */,
+				AD2E0A791D6B4F6400E77A23 /* Image.cpp */,
+				AD2E0A7A1D6B4F6400E77A23 /* Image.h */,
+				C3E86F5516EBC8EB00052915 /* Actor.cpp */,
+				C3E86F5716EBC8EB00052915 /* AnimationFrame.cpp */,
 				9223E3101A5193E000B2770B /* AsyncTask.cpp */,
-				9223E3111A5193E000B2770B /* AsyncTask.h */,
-				9223E30B1A518BCC00B2770B /* ios */,
-				923663611A4756C500EB65B3 /* KeyEvent.h */,
-				923663621A4756C500EB65B3 /* Serializable.cpp */,
-				923663631A4756C500EB65B3 /* Serializable.h */,
-				923663641A4756C500EB65B3 /* TouchEvent.h */,
-				923663651A4756C500EB65B3 /* Tween.cpp */,
-				923663661A4756C500EB65B3 /* Tween.h */,
-				923663671A4756C500EB65B3 /* TweenQueue.cpp */,
-				923663681A4756C500EB65B3 /* TweenQueue.h */,
-				CEC2D0041C47288E00450163 /* TweenAlphaFade.cpp */,
-				CEC2D0051C47288E00450163 /* TweenAlphaFade.h */,
+				C3E86F5916EBC8EB00052915 /* Blocking.cpp */,
+				C3E86F5B16EBC8EB00052915 /* Box9Sprite.cpp */,
+				C3E86F5D16EBC8EB00052915 /* Button.cpp */,
+				C3E86F5F16EBC8EB00052915 /* ClipRectActor.cpp */,
+				C3E86F6116EBC8EB00052915 /* Clock.cpp */,
+				C3E86F6616EBC8EB00052915 /* ColorRectSprite.cpp */,
+				C3E86F9016EBC8EB00052915 /* DebugActor.cpp */,
+				C3E86F9216EBC8EB00052915 /* Draggable.cpp */,
+				C3E86F9516EBC8EB00052915 /* EventDispatcher.cpp */,
+				C3E86F9716EBC8EB00052915 /* Font.cpp */,
+				9223E31B1A530E8A00B2770B /* HttpRequestTask.cpp */,
+				C3E86F9A16EBC8EB00052915 /* Input.cpp */,
+				04B3A71718A65668004C67E3 /* InputText.cpp */,
+				AD977D8F1D56EAD800C3C05E /* key.cpp */,
 				923A9E931A1FCBB700A6F08E /* MaskedRenderer.cpp */,
-				923A9E941A1FCBB700A6F08E /* MaskedRenderer.h */,
-				923A9E951A1FCBB700A6F08E /* STDRenderer.cpp */,
-				923A9E961A1FCBB700A6F08E /* STDRenderer.h */,
+				0472E37B17F8A2EC0016A832 /* MaskedSprite.cpp */,
+				CEC2D0001C47288E00450163 /* Material.cpp */,
+				C3E86FB016EBC8EB00052915 /* PointerState.cpp */,
 				92214D6219F14A2F00A4459A /* Polygon.cpp */,
-				92214D6319F14A2F00A4459A /* Polygon.h */,
+				9250AFAC1C9B14950060A168 /* PostProcess.cpp */,
+				C3E86FB216EBC8EB00052915 /* ProgressBar.cpp */,
+				923663621A4756C500EB65B3 /* Serializable.cpp */,
+				0467086D192796E500D71824 /* Serialize.cpp */,
+				C3E86FD016EBC8EB00052915 /* SlidingActor.cpp */,
+				C3E86FD216EBC8EB00052915 /* Sprite.cpp */,
 				048AD0C919B1FD74001963EF /* Stage.cpp */,
-				048AD0CA19B1FD74001963EF /* Stage.h */,
+				CEC2D0021C47288E00450163 /* STDMaterial.cpp */,
+				923A9E951A1FCBB700A6F08E /* STDRenderer.cpp */,
 				048AD0A8197D2444001963EF /* TextField.cpp */,
-				048AD0A9197D2444001963EF /* TextField.h */,
-				0467086D192796E500D71824 /* Serialize.cpp */,
-				0467086B192796A000D71824 /* Serialize.h */,
-				04B3A71718A65668004C67E3 /* InputText.cpp */,
-				04B3A71818A65668004C67E3 /* InputText.h */,
-				0472E37B17F8A2EC0016A832 /* MaskedSprite.cpp */,
-				0472E37C17F8A2EC0016A832 /* MaskedSprite.h */,
-				0472E37D17F8A2EC0016A832 /* oxygine_include.h */,
-				0472E37E17F8A2EC0016A832 /* oxygine-framework.h */,
-				0472E36E17F8A2D30016A832 /* minizip */,
-				C38EC2611709649300568283 /* dev_tools */,
-				C3E86F5516EBC8EB00052915 /* Actor.cpp */,
+				929AF5641C88AA4000D276ED /* ThreadLoader.cpp */,
+				923663651A4756C500EB65B3 /* Tween.cpp */,
+				CEC2D0041C47288E00450163 /* TweenAlphaFade.cpp */,
+				9240B4061ADFB856005F9C5B /* TweenAnim.cpp */,
+				922553371CAFA4EF00333A1E /* TweenGlow.cpp */,
+				9250AFAE1C9B14950060A168 /* TweenOutline.cpp */,
+				923663671A4756C500EB65B3 /* TweenQueue.cpp */,
+				C3E86FF516EBC8EB00052915 /* VisualStyle.cpp */,
+				9223E3161A52D6B800B2770B /* WebImage.cpp */,
 				C3E86F5616EBC8EB00052915 /* Actor.h */,
-				C3E86F5716EBC8EB00052915 /* AnimationFrame.cpp */,
 				C3E86F5816EBC8EB00052915 /* AnimationFrame.h */,
-				C3E86F5916EBC8EB00052915 /* Blocking.cpp */,
+				9223E3111A5193E000B2770B /* AsyncTask.h */,
 				C3E86F5A16EBC8EB00052915 /* Blocking.h */,
-				C3E86F5B16EBC8EB00052915 /* Box9Sprite.cpp */,
 				C3E86F5C16EBC8EB00052915 /* Box9Sprite.h */,
-				C3E86F5D16EBC8EB00052915 /* Button.cpp */,
 				C3E86F5E16EBC8EB00052915 /* Button.h */,
-				C3E86F5F16EBC8EB00052915 /* ClipRectActor.cpp */,
 				C3E86F6016EBC8EB00052915 /* ClipRectActor.h */,
-				C3E86F6116EBC8EB00052915 /* Clock.cpp */,
 				C3E86F6216EBC8EB00052915 /* Clock.h */,
-				C3E86F6316EBC8EB00052915 /* closure */,
-				C3E86F6616EBC8EB00052915 /* ColorRectSprite.cpp */,
 				C3E86F6716EBC8EB00052915 /* ColorRectSprite.h */,
-				C3E86F6816EBC8EB00052915 /* core */,
-				C3E86F9016EBC8EB00052915 /* DebugActor.cpp */,
 				C3E86F9116EBC8EB00052915 /* DebugActor.h */,
-				C3E86F9216EBC8EB00052915 /* Draggable.cpp */,
 				C3E86F9316EBC8EB00052915 /* Draggable.h */,
 				C3E86F9416EBC8EB00052915 /* Event.h */,
-				C3E86F9516EBC8EB00052915 /* EventDispatcher.cpp */,
 				C3E86F9616EBC8EB00052915 /* EventDispatcher.h */,
-				C3E86F9716EBC8EB00052915 /* Font.cpp */,
 				C3E86F9816EBC8EB00052915 /* Font.h */,
+				9223E3151A52D6B800B2770B /* HttpRequestTask.h */,
 				C3E86F9916EBC8EB00052915 /* InitActor.h */,
-				C3E86F9A16EBC8EB00052915 /* Input.cpp */,
 				C3E86F9B16EBC8EB00052915 /* Input.h */,
-				C3E86F9D16EBC8EB00052915 /* math */,
-				C3E86FA816EBC8EB00052915 /* MemoryTexture.cpp */,
+				04B3A71818A65668004C67E3 /* InputText.h */,
+				AD977D901D56EAD800C3C05E /* key.h */,
+				923663611A4756C500EB65B3 /* KeyEvent.h */,
+				923A9E941A1FCBB700A6F08E /* MaskedRenderer.h */,
+				0472E37C17F8A2EC0016A832 /* MaskedSprite.h */,
+				CEC2D0011C47288E00450163 /* Material.h */,
 				C3E86FA916EBC8EB00052915 /* MemoryTexture.h */,
-				C3E86FB016EBC8EB00052915 /* PointerState.cpp */,
+				0472E37D17F8A2EC0016A832 /* oxygine_include.h */,
+				0472E37E17F8A2EC0016A832 /* oxygine-framework.h */,
 				C3E86FB116EBC8EB00052915 /* PointerState.h */,
-				C3E86FB216EBC8EB00052915 /* ProgressBar.cpp */,
+				92214D6319F14A2F00A4459A /* Polygon.h */,
+				9250AFAD1C9B14950060A168 /* PostProcess.h */,
 				C3E86FB316EBC8EB00052915 /* ProgressBar.h */,
-				C3E86FB416EBC8EB00052915 /* pugixml */,
+				9240B4051ADFB856005F9C5B /* Property.h */,
 				C3E86FBA16EBC8EB00052915 /* RenderState.h */,
-				C3E86FBB16EBC8EB00052915 /* res */,
-				C3E86FCF16EBC8EB00052915 /* RootActor.h */,
-				C3E86FD016EBC8EB00052915 /* SlidingActor.cpp */,
+				923663631A4756C500EB65B3 /* Serializable.h */,
+				0467086B192796A000D71824 /* Serialize.h */,
 				C3E86FD116EBC8EB00052915 /* SlidingActor.h */,
-				C3E86FD216EBC8EB00052915 /* Sprite.cpp */,
 				C3E86FD316EBC8EB00052915 /* Sprite.h */,
-				C3E86FD416EBC8EB00052915 /* text_utils */,
+				048AD0CA19B1FD74001963EF /* Stage.h */,
+				CEC2D0031C47288E00450163 /* STDMaterial.h */,
+				923A9E961A1FCBB700A6F08E /* STDRenderer.h */,
+				048AD0A9197D2444001963EF /* TextField.h */,
 				C3E86FDD16EBC8EB00052915 /* TextStyle.h */,
+				929AF5651C88AA4000D276ED /* ThreadLoader.h */,
+				923663641A4756C500EB65B3 /* TouchEvent.h */,
+				923663661A4756C500EB65B3 /* Tween.h */,
+				CEC2D0051C47288E00450163 /* TweenAlphaFade.h */,
+				9240B4071ADFB856005F9C5B /* TweenAnim.h */,
+				922553381CAFA4EF00333A1E /* TweenGlow.h */,
+				9250AFAF1C9B14950060A168 /* TweenOutline.h */,
+				923663681A4756C500EB65B3 /* TweenQueue.h */,
 				C3E86FEB16EBC8EB00052915 /* UpdateState.h */,
-				C3E86FEC16EBC8EB00052915 /* utils */,
-				C3E86FF516EBC8EB00052915 /* VisualStyle.cpp */,
 				C3E86FF616EBC8EB00052915 /* VisualStyle.h */,
+				9223E3171A52D6B800B2770B /* WebImage.h */,
+				C3E86F6316EBC8EB00052915 /* closure */,
+				C3E86F6816EBC8EB00052915 /* core */,
+				C38EC2611709649300568283 /* dev_tools */,
+				9223E30B1A518BCC00B2770B /* ios */,
+				9264E5B91B8358B00049F91F /* json */,
+				C3E86F9D16EBC8EB00052915 /* math */,
+				0472E36E17F8A2D30016A832 /* minizip */,
+				C3E86FB416EBC8EB00052915 /* pugixml */,
+				C3E86FBB16EBC8EB00052915 /* res */,
+				C3E86FD416EBC8EB00052915 /* text_utils */,
+				C3E86FEC16EBC8EB00052915 /* utils */,
 				C3E86FF716EBC8EB00052915 /* winnie_alloc */,
 			);
 			name = src;
@@ -882,6 +888,7 @@
 			isa = PBXHeadersBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				AD977D921D56EAD800C3C05E /* key.h in Headers */,
 				0472E35817F8A1A80016A832 /* file.h in Headers */,
 				0472E35C17F8A1A80016A832 /* log.h in Headers */,
 				C3E86FFF16EBC8EB00052915 /* Actor.h in Headers */,
@@ -929,6 +936,7 @@
 				C3E8702D16EBC8EB00052915 /* Renderer.h in Headers */,
 				C3E8702F16EBC8EB00052915 /* Texture.h in Headers */,
 				C3E8703116EBC8EB00052915 /* VideoDriver.h in Headers */,
+				AD2E0A7C1D6B4F6400E77A23 /* Image.h in Headers */,
 				0472E37A17F8A2D30016A832 /* unzip.h in Headers */,
 				C3E8703716EBC8EB00052915 /* DebugActor.h in Headers */,
 				C3E8703916EBC8EB00052915 /* Draggable.h in Headers */,
@@ -973,7 +981,6 @@
 				9264E5BE1B8358D80049F91F /* json.h in Headers */,
 				C3E8706916EBC8EB00052915 /* Resources.h in Headers */,
 				C3E8706B16EBC8EB00052915 /* ResStarlingAtlas.h in Headers */,
-				C3E8706D16EBC8EB00052915 /* RootActor.h in Headers */,
 				C3E8706F16EBC8EB00052915 /* SlidingActor.h in Headers */,
 				C3E8707116EBC8EB00052915 /* Sprite.h in Headers */,
 				C3E8707316EBC8EB00052915 /* Aligner.h in Headers */,
@@ -1042,7 +1049,7 @@
 		C3E86F4316EBC8A500052915 /* Project object */ = {
 			isa = PBXProject;
 			attributes = {
-				LastUpgradeCheck = 0510;
+				LastUpgradeCheck = 0730;
 				ORGANIZATIONNAME = denism;
 			};
 			buildConfigurationList = C3E86F4616EBC8A500052915 /* Build configuration list for PBXProject "oxygine_ios" */;
@@ -1103,7 +1110,6 @@
 				0472E36017F8A1A80016A832 /* system_data.cpp in Sources */,
 				C3E8704016EBC8EB00052915 /* Input.cpp in Sources */,
 				C3E8704216EBC8EB00052915 /* AffineTransform.cpp in Sources */,
-				C3E8704B16EBC8EB00052915 /* MemoryTexture.cpp in Sources */,
 				0472E37F17F8A2EC0016A832 /* MaskedSprite.cpp in Sources */,
 				04AEC313182BD98D006413A9 /* UberShaderProgram.cpp in Sources */,
 				C3E8705316EBC8EB00052915 /* PointerState.cpp in Sources */,
@@ -1142,12 +1148,14 @@
 				0472E37917F8A2D30016A832 /* unzip.c in Sources */,
 				C3E8708D16EBC8EB00052915 /* VisualStyle.cpp in Sources */,
 				048AD0CB19B1FD74001963EF /* Stage.cpp in Sources */,
+				AD977D911D56EAD800C3C05E /* key.cpp in Sources */,
 				C3E8708F16EBC8EB00052915 /* system_alloc.cpp in Sources */,
 				0472E35917F8A1A80016A832 /* FileSystem.cpp in Sources */,
 				9250AFB21C9B14950060A168 /* TweenOutline.cpp in Sources */,
 				9223E30E1A518CC400B2770B /* HttpRequestCocoaTask.mm in Sources */,
 				C3E8709116EBC8EB00052915 /* winnie_alloc.cpp in Sources */,
 				048AD0AA197D2444001963EF /* TextField.cpp in Sources */,
+				AD2E0A7B1D6B4F6400E77A23 /* Image.cpp in Sources */,
 				C38EC26F1709649300568283 /* DeveloperMenu.cpp in Sources */,
 				929AF56E1C88AD5600D276ED /* ResAtlasPrebuilt.cpp in Sources */,
 				92214D6419F14A2F00A4459A /* Polygon.cpp in Sources */,
@@ -1184,6 +1192,7 @@
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
+				ENABLE_TESTABILITY = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_OBJC_EXCEPTIONS = YES;

+ 80 - 0
oxygine/SDL/ios/oxygine/oxygine_ios.xcodeproj/xcshareddata/xcschemes/oxygine_ios.xcscheme

@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0800"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "C3E86F4B16EBC8A500052915"
+               BuildableName = "liboxygine_ios.a"
+               BlueprintName = "oxygine_ios"
+               ReferencedContainer = "container:oxygine_ios.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "C3E86F4B16EBC8A500052915"
+            BuildableName = "liboxygine_ios.a"
+            BlueprintName = "oxygine_ios"
+            ReferencedContainer = "container:oxygine_ios.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "C3E86F4B16EBC8A500052915"
+            BuildableName = "liboxygine_ios.a"
+            BlueprintName = "oxygine_ios"
+            ReferencedContainer = "container:oxygine_ios.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 84 - 76
oxygine/SDL/macosx/oxygine_macosx/oxygine_macosx.xcodeproj/project.pbxproj

@@ -123,7 +123,6 @@
 		049B56DC1871F21E00EF3C66 /* vector2.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B56111871F21D00EF3C66 /* vector2.h */; };
 		049B56DD1871F21E00EF3C66 /* vector3.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B56121871F21D00EF3C66 /* vector3.h */; };
 		049B56DE1871F21E00EF3C66 /* vector4.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B56131871F21D00EF3C66 /* vector4.h */; };
-		049B56DF1871F21E00EF3C66 /* MemoryTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 049B56141871F21D00EF3C66 /* MemoryTexture.cpp */; };
 		049B56E01871F21E00EF3C66 /* MemoryTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B56151871F21D00EF3C66 /* MemoryTexture.h */; };
 		049B56E11871F21E00EF3C66 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 049B56171871F21D00EF3C66 /* ioapi.c */; };
 		049B56E21871F21E00EF3C66 /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B56181871F21D00EF3C66 /* ioapi.h */; };
@@ -159,7 +158,6 @@
 		049B57021871F21E00EF3C66 /* Resources.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B563D1871F21E00EF3C66 /* Resources.h */; };
 		049B57031871F21E00EF3C66 /* ResStarlingAtlas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 049B563E1871F21E00EF3C66 /* ResStarlingAtlas.cpp */; };
 		049B57041871F21E00EF3C66 /* ResStarlingAtlas.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B563F1871F21E00EF3C66 /* ResStarlingAtlas.h */; };
-		049B57061871F21E00EF3C66 /* RootActor.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B56411871F21E00EF3C66 /* RootActor.h */; };
 		049B57071871F21E00EF3C66 /* SlidingActor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 049B56421871F21E00EF3C66 /* SlidingActor.cpp */; };
 		049B57081871F21E00EF3C66 /* SlidingActor.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B56431871F21E00EF3C66 /* SlidingActor.h */; };
 		049B57091871F21E00EF3C66 /* Sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 049B56441871F21E00EF3C66 /* Sprite.cpp */; };
@@ -236,6 +234,10 @@
 		92F3F3491CA3BD7B00425D52 /* ThreadDispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92F3F3461CA3BD7B00425D52 /* ThreadDispatcher.cpp */; };
 		92F3F34A1CA3BD7B00425D52 /* ThreadDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 92F3F3471CA3BD7B00425D52 /* ThreadDispatcher.h */; };
 		92F3F34B1CA3BD7B00425D52 /* ThreadMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 92F3F3481CA3BD7B00425D52 /* ThreadMessages.h */; };
+		AD14D5611D72B19600182666 /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD14D55F1D72B19600182666 /* Image.cpp */; };
+		AD14D5621D72B19600182666 /* Image.h in Headers */ = {isa = PBXBuildFile; fileRef = AD14D5601D72B19600182666 /* Image.h */; };
+		AD977D971D56F26400C3C05E /* key.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD977D951D56F26400C3C05E /* key.cpp */; };
+		AD977D981D56F26400C3C05E /* key.h in Headers */ = {isa = PBXBuildFile; fileRef = AD977D961D56F26400C3C05E /* key.h */; };
 		CEC2CFF61C47274C00450163 /* Material.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CEC2CFEE1C47274C00450163 /* Material.cpp */; };
 		CEC2CFF71C47274C00450163 /* Material.h in Headers */ = {isa = PBXBuildFile; fileRef = CEC2CFEF1C47274C00450163 /* Material.h */; };
 		CEC2CFF81C47274C00450163 /* STDMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CEC2CFF01C47274C00450163 /* STDMaterial.cpp */; };
@@ -364,7 +366,6 @@
 		049B56111871F21D00EF3C66 /* vector2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector2.h; sourceTree = "<group>"; };
 		049B56121871F21D00EF3C66 /* vector3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector3.h; sourceTree = "<group>"; };
 		049B56131871F21D00EF3C66 /* vector4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector4.h; sourceTree = "<group>"; };
-		049B56141871F21D00EF3C66 /* MemoryTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MemoryTexture.cpp; path = ../../../src/MemoryTexture.cpp; sourceTree = "<group>"; };
 		049B56151871F21D00EF3C66 /* MemoryTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MemoryTexture.h; path = ../../../src/MemoryTexture.h; sourceTree = "<group>"; };
 		049B56171871F21D00EF3C66 /* ioapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ioapi.c; sourceTree = "<group>"; };
 		049B56181871F21D00EF3C66 /* ioapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ioapi.h; sourceTree = "<group>"; };
@@ -402,7 +403,6 @@
 		049B563D1871F21E00EF3C66 /* Resources.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Resources.h; sourceTree = "<group>"; };
 		049B563E1871F21E00EF3C66 /* ResStarlingAtlas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ResStarlingAtlas.cpp; sourceTree = "<group>"; };
 		049B563F1871F21E00EF3C66 /* ResStarlingAtlas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResStarlingAtlas.h; sourceTree = "<group>"; };
-		049B56411871F21E00EF3C66 /* RootActor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RootActor.h; path = ../../../src/RootActor.h; sourceTree = "<group>"; };
 		049B56421871F21E00EF3C66 /* SlidingActor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SlidingActor.cpp; path = ../../../src/SlidingActor.cpp; sourceTree = "<group>"; };
 		049B56431871F21E00EF3C66 /* SlidingActor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SlidingActor.h; path = ../../../src/SlidingActor.h; sourceTree = "<group>"; };
 		049B56441871F21E00EF3C66 /* Sprite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Sprite.cpp; path = ../../../src/Sprite.cpp; sourceTree = "<group>"; };
@@ -480,6 +480,10 @@
 		92F3F3461CA3BD7B00425D52 /* ThreadDispatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ThreadDispatcher.cpp; sourceTree = "<group>"; };
 		92F3F3471CA3BD7B00425D52 /* ThreadDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreadDispatcher.h; sourceTree = "<group>"; };
 		92F3F3481CA3BD7B00425D52 /* ThreadMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreadMessages.h; sourceTree = "<group>"; };
+		AD14D55F1D72B19600182666 /* Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Image.cpp; path = ../../../src/Image.cpp; sourceTree = "<group>"; };
+		AD14D5601D72B19600182666 /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Image.h; path = ../../../src/Image.h; sourceTree = "<group>"; };
+		AD977D951D56F26400C3C05E /* key.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = key.cpp; path = ../../../src/key.cpp; sourceTree = "<group>"; };
+		AD977D961D56F26400C3C05E /* key.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = key.h; path = ../../../src/key.h; sourceTree = "<group>"; };
 		CEC2CFEE1C47274C00450163 /* Material.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Material.cpp; path = ../../../src/Material.cpp; sourceTree = "<group>"; };
 		CEC2CFEF1C47274C00450163 /* Material.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Material.h; path = ../../../src/Material.h; sourceTree = "<group>"; };
 		CEC2CFF01C47274C00450163 /* STDMaterial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = STDMaterial.cpp; path = ../../../src/STDMaterial.cpp; sourceTree = "<group>"; };
@@ -520,109 +524,111 @@
 		049B55901871F21000EF3C66 /* src */ = {
 			isa = PBXGroup;
 			children = (
-				9225533E1CAFA59F00333A1E /* TweenGlow.cpp */,
-				9225533F1CAFA59F00333A1E /* TweenGlow.h */,
-				92F3F33E1CA3BD5400425D52 /* PostProcess.cpp */,
-				92F3F33F1CA3BD5400425D52 /* PostProcess.h */,
-				92F3F3401CA3BD5400425D52 /* TweenOutline.cpp */,
-				92F3F3411CA3BD5400425D52 /* TweenOutline.h */,
-				929AF5721C88AF1200D276ED /* ThreadLoader.cpp */,
-				929AF5731C88AF1200D276ED /* ThreadLoader.h */,
-				9264E5C71B835AE50049F91F /* json */,
-				CEC2CFEE1C47274C00450163 /* Material.cpp */,
-				CEC2CFEF1C47274C00450163 /* Material.h */,
-				CEC2CFF01C47274C00450163 /* STDMaterial.cpp */,
-				CEC2CFF11C47274C00450163 /* STDMaterial.h */,
-				9240B40E1ADFBB3C005F9C5B /* TweenAnim.cpp */,
-				9240B40F1ADFBB3C005F9C5B /* TweenAnim.h */,
+				AD14D55F1D72B19600182666 /* Image.cpp */,
+				AD14D5601D72B19600182666 /* Image.h */,
+				AD977D951D56F26400C3C05E /* key.cpp */,
+				AD977D961D56F26400C3C05E /* key.h */,
+				049B55911871F21D00EF3C66 /* Actor.cpp */,
+				049B55931871F21D00EF3C66 /* AnimationFrame.cpp */,
 				92CE26711A58ABDC003901D6 /* AsyncTask.cpp */,
-				92CE26721A58ABDC003901D6 /* AsyncTask.h */,
+				049B55951871F21D00EF3C66 /* blocking.cpp */,
+				049B55971871F21D00EF3C66 /* Box9Sprite.cpp */,
+				049B55991871F21D00EF3C66 /* Button.cpp */,
+				049B559B1871F21D00EF3C66 /* ClipRectActor.cpp */,
+				049B559D1871F21D00EF3C66 /* Clock.cpp */,
+				049B55A21871F21D00EF3C66 /* ColorRectSprite.cpp */,
+				049B55ED1871F21D00EF3C66 /* DebugActor.cpp */,
+				049B55FD1871F21D00EF3C66 /* Draggable.cpp */,
+				049B56001871F21D00EF3C66 /* EventDispatcher.cpp */,
+				049B56021871F21D00EF3C66 /* Font.cpp */,
 				92CE26731A58ABDC003901D6 /* HttpRequestTask.cpp */,
-				92CE26741A58ABDC003901D6 /* HttpRequestTask.h */,
-				92CE26751A58ABDC003901D6 /* KeyEvent.h */,
-				92CE26761A58ABDC003901D6 /* Property.h */,
-				92CE26771A58ABDC003901D6 /* WebImage.cpp */,
-				92CE26781A58ABDC003901D6 /* WebImage.h */,
-				923663511A47561500EB65B3 /* Serializable.cpp */,
-				923663521A47561500EB65B3 /* Serializable.h */,
-				923663531A47561500EB65B3 /* TouchEvent.h */,
-				923663541A47561500EB65B3 /* Tween.cpp */,
-				923663551A47561500EB65B3 /* Tween.h */,
-				923663561A47561500EB65B3 /* TweenQueue.cpp */,
-				923663571A47561500EB65B3 /* TweenQueue.h */,
-				CEC2CFF21C47274C00450163 /* TweenAlphaFade.cpp */,
-				CEC2CFF31C47274C00450163 /* TweenAlphaFade.h */,
+				049B56051871F21D00EF3C66 /* Input.cpp */,
+				04B3A71D18A6594D004C67E3 /* InputText.cpp */,
 				923A9E8D1A1FCA6600A6F08E /* MaskedRenderer.cpp */,
-				923A9E8E1A1FCA6600A6F08E /* MaskedRenderer.h */,
-				923A9E891A1FCA3500A6F08E /* STDRenderer.cpp */,
-				923A9E8A1A1FCA3500A6F08E /* STDRenderer.h */,
+				049B56071871F21D00EF3C66 /* MaskedSprite.cpp */,
+				CEC2CFEE1C47274C00450163 /* Material.cpp */,
+				049B56211871F21D00EF3C66 /* PointerState.cpp */,
 				92214D5C19F149BC00A4459A /* Polygon.cpp */,
-				92214D5D19F149BC00A4459A /* Polygon.h */,
+				92F3F33E1CA3BD5400425D52 /* PostProcess.cpp */,
+				049B56231871F21D00EF3C66 /* ProgressBar.cpp */,
+				923663511A47561500EB65B3 /* Serializable.cpp */,
+				04670865192795E700D71824 /* Serialize.cpp */,
+				049B56421871F21E00EF3C66 /* SlidingActor.cpp */,
+				049B56441871F21E00EF3C66 /* Sprite.cpp */,
 				048AD0CF19B1FE96001963EF /* Stage.cpp */,
-				048AD0D019B1FE96001963EF /* Stage.h */,
+				CEC2CFF01C47274C00450163 /* STDMaterial.cpp */,
+				923A9E891A1FCA3500A6F08E /* STDRenderer.cpp */,
 				048AD0A2197D238D001963EF /* TextField.cpp */,
-				048AD0A3197D238D001963EF /* TextField.h */,
-				04670865192795E700D71824 /* Serialize.cpp */,
-				04670866192795E700D71824 /* Serialize.h */,
-				04B3A71D18A6594D004C67E3 /* InputText.cpp */,
-				04B3A71E18A6594D004C67E3 /* InputText.h */,
-				049B55911871F21D00EF3C66 /* Actor.cpp */,
+				929AF5721C88AF1200D276ED /* ThreadLoader.cpp */,
+				923663541A47561500EB65B3 /* Tween.cpp */,
+				CEC2CFF21C47274C00450163 /* TweenAlphaFade.cpp */,
+				9240B40E1ADFBB3C005F9C5B /* TweenAnim.cpp */,
+				9225533E1CAFA59F00333A1E /* TweenGlow.cpp */,
+				92F3F3401CA3BD5400425D52 /* TweenOutline.cpp */,
+				923663561A47561500EB65B3 /* TweenQueue.cpp */,
+				049B565C1871F21E00EF3C66 /* VisualStyle.cpp */,
+				92CE26771A58ABDC003901D6 /* WebImage.cpp */,
 				049B55921871F21D00EF3C66 /* Actor.h */,
-				049B55931871F21D00EF3C66 /* AnimationFrame.cpp */,
 				049B55941871F21D00EF3C66 /* AnimationFrame.h */,
-				049B55951871F21D00EF3C66 /* blocking.cpp */,
+				92CE26721A58ABDC003901D6 /* AsyncTask.h */,
 				049B55961871F21D00EF3C66 /* blocking.h */,
-				049B55971871F21D00EF3C66 /* Box9Sprite.cpp */,
 				049B55981871F21D00EF3C66 /* Box9Sprite.h */,
-				049B55991871F21D00EF3C66 /* Button.cpp */,
 				049B559A1871F21D00EF3C66 /* Button.h */,
-				049B559B1871F21D00EF3C66 /* ClipRectActor.cpp */,
 				049B559C1871F21D00EF3C66 /* ClipRectActor.h */,
-				049B559D1871F21D00EF3C66 /* Clock.cpp */,
 				049B559E1871F21D00EF3C66 /* Clock.h */,
-				049B559F1871F21D00EF3C66 /* closure */,
-				049B55A21871F21D00EF3C66 /* ColorRectSprite.cpp */,
 				049B55A31871F21D00EF3C66 /* ColorRectSprite.h */,
-				049B55A41871F21D00EF3C66 /* core */,
-				049B55ED1871F21D00EF3C66 /* DebugActor.cpp */,
 				049B55EE1871F21D00EF3C66 /* DebugActor.h */,
-				049B55EF1871F21D00EF3C66 /* dev_tools */,
-				049B55FD1871F21D00EF3C66 /* Draggable.cpp */,
 				049B55FE1871F21D00EF3C66 /* Draggable.h */,
 				049B55FF1871F21D00EF3C66 /* Event.h */,
-				049B56001871F21D00EF3C66 /* EventDispatcher.cpp */,
 				049B56011871F21D00EF3C66 /* EventDispatcher.h */,
-				049B56021871F21D00EF3C66 /* Font.cpp */,
 				049B56031871F21D00EF3C66 /* Font.h */,
+				92CE26741A58ABDC003901D6 /* HttpRequestTask.h */,
 				049B56041871F21D00EF3C66 /* initActor.h */,
-				049B56051871F21D00EF3C66 /* Input.cpp */,
 				049B56061871F21D00EF3C66 /* Input.h */,
-				049B56071871F21D00EF3C66 /* MaskedSprite.cpp */,
+				04B3A71E18A6594D004C67E3 /* InputText.h */,
+				92CE26751A58ABDC003901D6 /* KeyEvent.h */,
+				923A9E8E1A1FCA6600A6F08E /* MaskedRenderer.h */,
 				049B56081871F21D00EF3C66 /* MaskedSprite.h */,
-				049B56091871F21D00EF3C66 /* math */,
-				049B56141871F21D00EF3C66 /* MemoryTexture.cpp */,
+				CEC2CFEF1C47274C00450163 /* Material.h */,
 				049B56151871F21D00EF3C66 /* MemoryTexture.h */,
-				049B56161871F21D00EF3C66 /* minizip */,
 				049B561F1871F21D00EF3C66 /* oxygine_include.h */,
 				049B56201871F21D00EF3C66 /* oxygine-framework.h */,
-				049B56211871F21D00EF3C66 /* PointerState.cpp */,
 				049B56221871F21D00EF3C66 /* PointerState.h */,
-				049B56231871F21D00EF3C66 /* ProgressBar.cpp */,
+				92214D5D19F149BC00A4459A /* Polygon.h */,
+				92F3F33F1CA3BD5400425D52 /* PostProcess.h */,
 				049B56241871F21D00EF3C66 /* ProgressBar.h */,
-				049B56251871F21D00EF3C66 /* pugixml */,
+				92CE26761A58ABDC003901D6 /* Property.h */,
 				049B562B1871F21D00EF3C66 /* RenderState.h */,
-				049B562C1871F21D00EF3C66 /* res */,
-				049B56411871F21E00EF3C66 /* RootActor.h */,
-				049B56421871F21E00EF3C66 /* SlidingActor.cpp */,
+				923663521A47561500EB65B3 /* Serializable.h */,
+				04670866192795E700D71824 /* Serialize.h */,
 				049B56431871F21E00EF3C66 /* SlidingActor.h */,
-				049B56441871F21E00EF3C66 /* Sprite.cpp */,
 				049B56451871F21E00EF3C66 /* Sprite.h */,
-				049B56461871F21E00EF3C66 /* text_utils */,
+				048AD0D019B1FE96001963EF /* Stage.h */,
+				CEC2CFF11C47274C00450163 /* STDMaterial.h */,
+				923A9E8A1A1FCA3500A6F08E /* STDRenderer.h */,
+				048AD0A3197D238D001963EF /* TextField.h */,
 				049B564F1871F21E00EF3C66 /* TextStyle.h */,
+				929AF5731C88AF1200D276ED /* ThreadLoader.h */,
+				923663531A47561500EB65B3 /* TouchEvent.h */,
+				923663551A47561500EB65B3 /* Tween.h */,
+				CEC2CFF31C47274C00450163 /* TweenAlphaFade.h */,
+				9240B40F1ADFBB3C005F9C5B /* TweenAnim.h */,
+				9225533F1CAFA59F00333A1E /* TweenGlow.h */,
+				92F3F3411CA3BD5400425D52 /* TweenOutline.h */,
+				923663571A47561500EB65B3 /* TweenQueue.h */,
 				049B56521871F21E00EF3C66 /* UpdateState.h */,
-				049B56531871F21E00EF3C66 /* utils */,
-				049B565C1871F21E00EF3C66 /* VisualStyle.cpp */,
 				049B565D1871F21E00EF3C66 /* VisualStyle.h */,
+				92CE26781A58ABDC003901D6 /* WebImage.h */,
+				049B559F1871F21D00EF3C66 /* closure */,
+				049B55A41871F21D00EF3C66 /* core */,
+				049B55EF1871F21D00EF3C66 /* dev_tools */,
+				9264E5C71B835AE50049F91F /* json */,
+				049B56091871F21D00EF3C66 /* math */,
+				049B56161871F21D00EF3C66 /* minizip */,
+				049B56251871F21D00EF3C66 /* pugixml */,
+				049B562C1871F21D00EF3C66 /* res */,
+				049B56461871F21E00EF3C66 /* text_utils */,
+				049B56531871F21E00EF3C66 /* utils */,
 				049B565E1871F21E00EF3C66 /* winnie_alloc */,
 			);
 			name = src;
@@ -893,13 +899,13 @@
 				049B56FA1871F21E00EF3C66 /* ResBuffer.h in Headers */,
 				049B56AD1871F21E00EF3C66 /* STDFileSystem.h in Headers */,
 				922553411CAFA59F00333A1E /* TweenGlow.h in Headers */,
+				AD977D981D56F26400C3C05E /* key.h in Headers */,
 				049B56851871F21E00EF3C66 /* VertexDeclarationGL.h in Headers */,
 				049B56B91871F21E00EF3C66 /* VideoDriver.h in Headers */,
 				049B56C31871F21E00EF3C66 /* TreeInspector.h in Headers */,
 				049B57001871F21E00EF3C66 /* Resource.h in Headers */,
 				049B56EC1871F21E00EF3C66 /* PointerState.h in Headers */,
 				923A9E8C1A1FCA3500A6F08E /* STDRenderer.h in Headers */,
-				049B57061871F21E00EF3C66 /* RootActor.h in Headers */,
 				9236635A1A47561500EB65B3 /* TouchEvent.h in Headers */,
 				049B56B71871F21E00EF3C66 /* VertexDeclaration.h in Headers */,
 				9236635C1A47561500EB65B3 /* Tween.h in Headers */,
@@ -984,6 +990,7 @@
 				049B56EA1871F21E00EF3C66 /* oxygine-framework.h in Headers */,
 				049B571F1871F21E00EF3C66 /* VisualStyle.h in Headers */,
 				049B566A1871F21E00EF3C66 /* blocking.h in Headers */,
+				AD14D5621D72B19600182666 /* Image.h in Headers */,
 				923663591A47561500EB65B3 /* Serializable.h in Headers */,
 				049B56741871F21E00EF3C66 /* closure_impl.h in Headers */,
 				049B56C71871F21E00EF3C66 /* TreeInspectorPage.h in Headers */,
@@ -1088,7 +1095,6 @@
 				049B57171871F21E00EF3C66 /* AtlasTool.cpp in Sources */,
 				049B566D1871F21E00EF3C66 /* Button.cpp in Sources */,
 				049B57011871F21E00EF3C66 /* Resources.cpp in Sources */,
-				049B56DF1871F21E00EF3C66 /* MemoryTexture.cpp in Sources */,
 				92E0C9A61B24922600F0DB21 /* cdecode.c in Sources */,
 				049B56ED1871F21E00EF3C66 /* ProgressBar.cpp in Sources */,
 				049B56A31871F21E00EF3C66 /* Renderer.cpp in Sources */,
@@ -1146,12 +1152,14 @@
 				049B570F1871F21E00EF3C66 /* TextBuilder.cpp in Sources */,
 				049B56711871F21E00EF3C66 /* Clock.cpp in Sources */,
 				049B56BE1871F21E00EF3C66 /* DeveloperMenu.cpp in Sources */,
+				AD977D971D56F26400C3C05E /* key.cpp in Sources */,
 				048AD0A4197D238D001963EF /* TextField.cpp in Sources */,
 				048AD0D119B1FE96001963EF /* Stage.cpp in Sources */,
 				92F3F3441CA3BD5400425D52 /* TweenOutline.cpp in Sources */,
 				049B567E1871F21E00EF3C66 /* NativeTextureGLES.cpp in Sources */,
 				049B56AE1871F21E00EF3C66 /* system_data.cpp in Sources */,
 				049B569A1871F21E00EF3C66 /* NativeTexture.cpp in Sources */,
+				AD14D5611D72B19600182666 /* Image.cpp in Sources */,
 				049B56FF1871F21E00EF3C66 /* Resource.cpp in Sources */,
 				929AF57C1C88AF2E00D276ED /* ResAtlasPrebuilt.cpp in Sources */,
 				049B56D61871F21E00EF3C66 /* AffineTransform.cpp in Sources */,

+ 0 - 1
oxygine/SDL/qt/oxygine-framework/oxygine-framework.pro

@@ -82,7 +82,6 @@ HEADERS +=  \
   $$SRC/PointerState.h \
   $$SRC/ProgressBar.h \
   $$SRC/RenderState.h \
-  $$SRC/RootActor.h \
   $$SRC/SlidingActor.h \
   $$SRC/Sprite.h \
   $$SRC/TextActor.h \

+ 6 - 4
oxygine/SDL/win32/oxygine.vcxproj

@@ -162,14 +162,16 @@
     <ClCompile Include="..\..\src\Input.cpp" />
     <ClCompile Include="..\..\src\InputText.cpp" />
     <ClCompile Include="..\..\src\json\jsoncpp.cpp" />
+    <ClCompile Include="..\..\src\key.cpp" />
     <ClCompile Include="..\..\src\MaskedRenderer.cpp" />
     <ClCompile Include="..\..\src\MaskedSprite.cpp" />
     <ClCompile Include="..\..\src\Material.cpp" />
-    <ClCompile Include="..\..\src\MemoryTexture.cpp" />
+    <ClCompile Include="..\..\src\Image.cpp" />
     <ClCompile Include="..\..\src\minizip\ioapi.c" />
     <ClCompile Include="..\..\src\minizip\ioapi_mem.c" />
     <ClCompile Include="..\..\src\minizip\unzip.c" />
     <ClCompile Include="..\..\src\PostProcess.cpp" />
+    <ClCompile Include="..\..\src\res\SingleResAnim.cpp" />
     <ClCompile Include="..\..\src\ThreadLoader.cpp" />
     <ClCompile Include="..\..\src\PointerState.cpp" />
     <ClCompile Include="..\..\src\Polygon.cpp" />
@@ -274,16 +276,18 @@
     <ClInclude Include="..\..\src\InputText.h" />
     <ClInclude Include="..\..\src\json\json-forwards.h" />
     <ClInclude Include="..\..\src\json\json.h" />
+    <ClInclude Include="..\..\src\key.h" />
     <ClInclude Include="..\..\src\KeyEvent.h" />
     <ClInclude Include="..\..\src\MaskedRenderer.h" />
     <ClInclude Include="..\..\src\MaskedSprite.h" />
     <ClInclude Include="..\..\src\Material.h" />
     <ClInclude Include="..\..\src\math\OBBox.h" />
-    <ClInclude Include="..\..\src\MemoryTexture.h" />
+    <ClInclude Include="..\..\src\Image.h" />
     <ClInclude Include="..\..\src\minizip\ioapi.h" />
     <ClInclude Include="..\..\src\minizip\ioapi_mem.h" />
     <ClInclude Include="..\..\src\minizip\unzip.h" />
     <ClInclude Include="..\..\src\PostProcess.h" />
+    <ClInclude Include="..\..\src\res\SingleResAnim.h" />
     <ClInclude Include="..\..\src\ThreadLoader.h" />
     <ClInclude Include="..\..\src\oxygine-framework.h" />
     <ClInclude Include="..\..\src\oxygine_include.h" />
@@ -303,7 +307,6 @@
     <ClInclude Include="..\..\src\res\Resource.h" />
     <ClInclude Include="..\..\src\res\Resources.h" />
     <ClInclude Include="..\..\src\res\ResStarlingAtlas.h" />
-    <ClInclude Include="..\..\src\RootActor.h" />
     <ClInclude Include="..\..\src\Serializable.h" />
     <ClInclude Include="..\..\src\Stage.h" />
     <ClInclude Include="..\..\src\Serialize.h" />
@@ -320,7 +323,6 @@
     <ClInclude Include="..\..\src\Tween.h" />
     <ClInclude Include="..\..\src\TweenAlphaFade.h" />
     <ClInclude Include="..\..\src\TweenAnim.h" />
-    <ClInclude Include="..\..\src\Tweener.h" />
     <ClInclude Include="..\..\src\TweenGlow.h" />
     <ClInclude Include="..\..\src\TweenOutline.h" />
     <ClInclude Include="..\..\src\TweenQueue.h" />

+ 18 - 12
oxygine/SDL/win32/oxygine.vcxproj.filters

@@ -237,9 +237,6 @@
     <ClCompile Include="..\..\src\MaskedSprite.cpp">
       <Filter>src</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\src\MemoryTexture.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\src\PointerState.cpp">
       <Filter>src</Filter>
     </ClCompile>
@@ -348,6 +345,15 @@
     <ClCompile Include="..\..\src\TweenGlow.cpp">
       <Filter>src</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\key.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\Image.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\res\SingleResAnim.cpp">
+      <Filter>src\res</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\closure\closure.h">
@@ -605,9 +611,6 @@
     <ClInclude Include="..\..\src\MaskedSprite.h">
       <Filter>src</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\src\MemoryTexture.h">
-      <Filter>src</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\src\oxygine-framework.h">
       <Filter>src</Filter>
     </ClInclude>
@@ -629,9 +632,6 @@
     <ClInclude Include="..\..\src\TextStyle.h">
       <Filter>src</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\src\Tweener.h">
-      <Filter>src</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\src\UpdateState.h">
       <Filter>src</Filter>
     </ClInclude>
@@ -701,9 +701,6 @@
     <ClInclude Include="..\..\src\oxygine_include.h">
       <Filter>src</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\src\RootActor.h">
-      <Filter>src</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\src\TweenAnim.h">
       <Filter>src</Filter>
     </ClInclude>
@@ -749,6 +746,15 @@
     <ClInclude Include="..\..\src\TweenGlow.h">
       <Filter>src</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\key.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\Image.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\res\SingleResAnim.h">
+      <Filter>src\res</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="ReadMe.txt" />

+ 0 - 3
oxygine/marmalade/oxygine-framework.mkf

@@ -9,9 +9,6 @@ subproject iwutil
 subproject iwgl
 subproject iwhttp
 
-debug_define MARMALADE
-define MARMALADE
-
 define OX_HAVE_LIBJPEG
 define OX_HAVE_LIBPNG
 

+ 4 - 42
oxygine/src/Actor.cpp

@@ -105,8 +105,6 @@ namespace oxygine
         OX_ASSERT(_stage == 0);
         _stage = stage;
 
-        onAdded2Stage();
-
         spActor actor = _children._first;
         while (actor)
         {
@@ -114,6 +112,8 @@ namespace oxygine
             actor->added2stage(stage);
             actor = next;
         }
+
+        onAdded2Stage();
     }
 
     void Actor::removedFromStage()
@@ -841,46 +841,6 @@ namespace oxygine
         }
     }
 
-    void Actor::insertChildAfter(spActor actor, spActor insertAfter)
-    {
-        OX_ASSERT(actor);
-        if (!actor)
-            return;
-
-        if (insertAfter)
-        {
-            OX_ASSERT(insertAfter->getParent() == this);
-        }
-
-        actor->detach();
-
-        if (insertAfter)
-            _children.insert_after(actor, insertAfter);
-        else
-            _children.append(actor);
-        setParent(actor.get(), this);
-    }
-
-    void Actor::insertChildBefore(spActor actor, spActor insertBefore)
-    {
-        OX_ASSERT(actor);
-        if (!actor)
-            return;
-
-        if (insertBefore)
-        {
-            OX_ASSERT(insertBefore->getParent() == this);
-        }
-
-        actor->detach();
-
-        if (insertBefore)
-            _children.insert_before(actor, insertBefore);
-        else
-            _children.prepend(actor);
-        setParent(actor.get(), this);
-    }
-
     void Actor::insertSiblingBefore(spActor actor)
     {
         OX_ASSERT(actor != this);
@@ -966,6 +926,8 @@ namespace oxygine
 
     void Actor::prependChild(Actor* actor)
     {
+        if (actor == getFirstChild().get())
+            return;
         if (getFirstChild())
             getFirstChild()->insertSiblingBefore(actor);
         else

+ 9 - 30
oxygine/src/Actor.h

@@ -230,16 +230,13 @@ namespace oxygine
         /**Returns true if actor is child or located deeper in current subtree*/
         bool isDescendant(const spActor& actor) const;
 
-        /**DEPRECATED, use insertSiblingBefore Inserts the specified actor before "where" actor as a child*/
-        OXYGINE_DEPRECATED
-        void insertChildBefore(spActor actor, spActor where);
-        /**DEPRECATED, use insertSiblingAfter Inserts the specified actor after "where" actor as a child*/
-        OXYGINE_DEPRECATED
-        void insertChildAfter(spActor actor, spActor where);
-
+        /**inserts sibling before 'this' actor*/
         void insertSiblingBefore(spActor);
+        /**inserts sibling after 'this' actor*/
         void insertSiblingAfter(spActor);
+        /**adds child first in list*/
         void prependChild(spActor actor);
+        /**adds child first in list*/
         void prependChild(Actor* actor);
         void addChild(spActor actor);
         void addChild(Actor* actor);//avoid conversion to spActor
@@ -293,10 +290,10 @@ namespace oxygine
         //converts global position (position in parent space) to local space
         Vector2 global2local(const Vector2& pos) const;
         //converts local position to parent space
-        Vector2 local2global(const Vector2& pos) const;
+        Vector2 local2global(const Vector2& pos = Vector2(0, 0)) const;
 
         //converts local position to Stage
-        Vector2 local2stage(const Vector2& pos, Actor* stage = 0) const;
+        Vector2 local2stage(const Vector2& pos = Vector2(0, 0), Actor* stage = 0) const;
         //converts global position (position in Stage space) to local space
         Vector2 stage2local(const Vector2& pos, Actor* stage = 0) const;
 
@@ -331,6 +328,7 @@ namespace oxygine
         /**recursively removes all event listeners and added tweens*/
         void clean();
 
+        virtual bool getBounds(RectF&) const { return false; }
 
     protected:
 
@@ -342,8 +340,8 @@ namespace oxygine
         virtual void onAdded2Stage() {}
         virtual void onRemovedFromStage() {}
         virtual void transformUpdated() {}
-        virtual bool getBounds(RectF&) const { return false; }
-        void calcBounds2(RectF& bounds, const Transform& transform) const;
+
+        virtual void calcBounds2(RectF& bounds, const Transform& transform) const;
 
 
         typedef intrusive_list<spActor> children;
@@ -420,32 +418,13 @@ namespace oxygine
     Vector2 convert_stage2local(spActor child, const Vector2& pos, spActor root = 0);
     Vector2 convert_stage2local(const Actor* child, const Vector2& pos, const Actor* root = 0);
 
-    /**Deprecated*/
-    OXYGINE_DEPRECATED
-    inline Vector2 convert_local2root(spActor child, const Vector2& pos, spActor root = 0) { return convert_local2stage(child, pos, root); }
-    /**Deprecated*/
-    OXYGINE_DEPRECATED
-    inline Vector2 convert_root2local(spActor child, const Vector2& pos, spActor root = 0) { return convert_stage2local(child, pos, root); }
 
     /*Tests 2 actors intersection and returns contact point in space of object1.*/
     bool testIntersection(spActor obj1, spActor obj2, spActor commonParent = 0, Vector2* contact = 0);
 
 
-    //deprecated, use actor::computeGlobalTransform
-    OXYGINE_DEPRECATED
-    Transform getGlobalTransform(spActor child, spActor parent = 0);
-
-    //deprecated, use actor::computeGlobalTransform
-    OXYGINE_DEPRECATED
-    Transform getGlobalTransform2(spActor child, Actor* parent = 0);
-
-
     RectF getActorTransformedDestRect(Actor* actor, const Transform& tr);
 
-    //deprecated, use reattachActor
-    OXYGINE_DEPRECATED
-    void    changeParentAndSavePosition(spActor mutualParent, spActor actor, spActor newParent);
-
     /**changes actor parent but with the same position on the screen*/
     void    reattachActor(spActor actor, spActor newParent, spActor root = 0);
 

+ 9 - 0
oxygine/src/AnimationFrame.cpp

@@ -79,4 +79,13 @@ namespace oxygine
         _srcRect.setY(_srcRect.getBottom());
         _srcRect.setHeight(-_srcRect.getHeight());
     }
+
+    AnimationFrame::AnimationFrame(spNativeTexture t)
+    {
+        _diffuse.base = t;
+        _diffuse.premultiplied = true;
+        _srcRect = RectF(0, 0, 1, 1);
+        _destRect = RectF(0, 0, t->getWidth(), t->getHeight());
+        _frameSize = Vector2(t->getWidth(), t->getHeight());
+    }
 }

+ 1 - 0
oxygine/src/AnimationFrame.h

@@ -33,6 +33,7 @@ namespace oxygine
     {
     public:
         AnimationFrame() : _srcRect(0, 0, 1, 1), _destRect(0, 0, 1, 1), _resAnim(0), _row(0), _column(0) {}
+        AnimationFrame(spNativeTexture t);
 
         void init(ResAnim* rs, const Diffuse& df,
                   const RectF& srcRect, const RectF& destRect, const Vector2& frame_size);

+ 53 - 22
oxygine/src/DebugActor.cpp

@@ -49,11 +49,12 @@ namespace oxygine
         if (resSystem)
             return;
 
-        spActor a = new MaskedSprite;
+        log::messageln("DebugActor::initialize");
 
         zp.setPrefix("system/");
         zp.add(system_data, system_size);
 
+        //file::ZipFileSystem zp;
         file::mount(&zp);
         resSystem = new Resources;
         resSystem->loadXML("system/res.xml", ResourcesLoadOptions().prebuiltFolder("system"));
@@ -62,12 +63,27 @@ namespace oxygine
     void DebugActor::show()
     {
         initialize();
+
         if (!DebugActor::instance)
             DebugActor::instance = new DebugActor;
 
         getStage()->addChild(DebugActor::instance);
     }
 
+    void DebugActor::toggle()
+    {
+        if (!DebugActor::instance)
+        {
+            show();
+            return;
+        }
+
+        if (DebugActor::instance->_getStage())
+            hide();
+        else
+            show();
+    }
+
     void DebugActor::hide()
     {
         if (DebugActor::instance)
@@ -123,7 +139,7 @@ namespace oxygine
 
         if (ResFont* fnt = resSystem->getResFont("mono"))
         {
-            st.font = fnt->getFont();
+            st.font = fnt;
         }
 
         OX_ASSERT(st.font != NULL);
@@ -197,8 +213,14 @@ namespace oxygine
 
         if (DebugActor::instance)
         {
-            DebugActor::instance->_debugText += buff;
-            DebugActor::instance->_debugText += "\n";
+            std::string& str = DebugActor::instance->_debugText;
+            str += buff;
+            str += "\n";
+
+            if (str.size() > 500)
+            {
+                str.resize(500);
+            }
         }
     }
 
@@ -255,8 +277,6 @@ namespace oxygine
     {
     }
 
-    extern IVideoDriver::Stats _videoStats;
-
     std::string aligned(int v, int width)
     {
         char str[32];
@@ -272,16 +292,21 @@ namespace oxygine
 
     void DebugActor::doUpdate(const UpdateState& us)
     {
+    }
+
+    void DebugActor::render(RenderState const& parentRS)
+    {
+        timeMS tm = getTimeMS();
+
         static int fps = 0;
         ++_frames;
         if (_frames > 50)
         {
-            timeMS this_time = getTimeMS();
-            if (this_time != _startTime)
+            if (tm != _startTime)
             {
-                fps = int(((float)_frames / (this_time - _startTime)) * 1000);
+                fps = int(((float)_frames / (tm - _startTime)) * 1000);
             }
-            _startTime = this_time;
+            _startTime = tm;
             _frames = 0;
         }
 
@@ -300,17 +325,21 @@ namespace oxygine
         s << "mfree=" << mem_free << " mem=" << mem_used << std::endl;
 #endif
 
-
+        const IVideoDriver::Stats& vstats = IVideoDriver::_stats;
 
 #ifdef OXYGINE_DEBUG_TRACE_LEAKS
         s << "objects=" << (int)ObjectBase::__getCreatedObjects().size() << std::endl;
 #endif
-#ifdef OXYGINE_TRACE_VIDEO_STATS
-        s << "batches=" << aligned(_videoStats.batches, 3) << " triangles=" << aligned(_videoStats.triangles, 3) << std::endl;
+
+#if OXYGINE_TRACE_VIDEO_STATS
+        int primitives = 0;
+        primitives += vstats.elements[IVideoDriver::PT_TRIANGLES] / 3;
+        primitives += vstats.elements[IVideoDriver::PT_TRIANGLE_STRIP] - 2;
+        s << "batches=" << aligned(vstats.batches, 3) << " primitives=" << aligned(primitives, 3) << std::endl;
 #endif
 
         s << "update=" << aligned(getStage()->_statUpdate, 2) << "ms ";
-        s << "render=" << aligned(getStage()->_statRender, 2) << "ms ";
+        s << "render=" << aligned(vstats.duration, 2) << "ms ";
         s << "textures=" << aligned(NativeTexture::created, 2) << " ";
 
 #ifdef __APPLE__
@@ -318,7 +347,6 @@ namespace oxygine
         iosGetMemoryUsage(mem);
         s << "memory=" << mem / 1024 << "kb ";
 #endif
-        //s << "\nlisteners=" << getStage()->getListenersCount() << "";
 
         if (!_debugText.empty())
         {
@@ -369,19 +397,18 @@ namespace oxygine
 
         setPosition(pos);
         setScale(1.0f / getStage()->getScaleX());
-    }
 
-    void DebugActor::render(RenderState const& parentRS)
-    {
+
         RenderState rs = parentRS;
         parentRS.material->finish();
 
         STDRenderer renderer;
         STDMaterial mat(&renderer);
         mat.apply(0);
-        //STDRenderer* renderer = mat.getRenderer();
+
+
         IVideoDriver* driver = renderer.getDriver();
-        driver->setDebugStats(false);
+
 
         Rect vp(Point(0, 0), core::getDisplaySize());
         driver->setViewport(vp);
@@ -390,10 +417,14 @@ namespace oxygine
         rs.material = &mat;
         Actor::render(rs);
         renderer.drawBatch();
-        driver->setDebugStats(true);
+
         mat.finish();
 
         Material::setCurrent(0);
+
+        timeMS dur = getTimeMS() - tm;
+
+        IVideoDriver::_stats.start += dur;
     }
 
     void DebugActor::showTexel2PixelErrors(bool show)
@@ -439,7 +470,7 @@ namespace oxygine
         cr->addTween(ColorRectSprite::TweenColor(Color(Color::White, 200)), 700, 1, true, 0, Tween::ease_inCubic)->setDetachActor(true);
         actor->addChild(cr);
         std::string dmp = actor->dump(0);
-        log::messageln("touched actor '%s' local pos: (%.0f,%.0f), pos: (%.0f,%.0f)\n%s",
+        log::messageln(">>>>>>>>>>>>>>>>>>>>\ntouched actor '%s' local pos: (%.0f,%.0f), pos: (%.0f,%.0f)\n%s",
                        actor->getName().c_str(),
                        te->localPosition.x, te->localPosition.y,
                        te->position.x, te->position.y,

+ 1 - 0
oxygine/src/DebugActor.h

@@ -22,6 +22,7 @@ namespace oxygine
         static Resources* resSystem;
         static void initialize();
         static void show();
+        static void toggle();
         static void hide();
         static void release();
         static void setCorner(int corner);

+ 9 - 5
oxygine/src/Draggable.cpp

@@ -58,7 +58,8 @@ namespace oxygine
         _clientIsParent(false),
         _dragEnabled(true),
         _pressed(false),
-        _singleDrag(false)
+        _singleDrag(false),
+        _ignoreTouchUp(false)
     {
 
     }
@@ -164,11 +165,14 @@ namespace oxygine
             break;
             case TouchEvent::TOUCH_UP:
             {
-                _pressed = false;
-                _actor->_getStage()->removeEventListeners(this);
-                if (getTimeMS() - _startTm < 2)
+                if (!_ignoreTouchUp)
                 {
-                    _actor->setPosition(_clientPos);
+                    _pressed = false;
+                    _actor->_getStage()->removeEventListeners(this);
+                    if (getTimeMS() - _startTm < 2)
+                    {
+                        _actor->setPosition(_clientPos);
+                    }
                 }
             }
             break;

+ 2 - 0
oxygine/src/Draggable.h

@@ -31,6 +31,7 @@ namespace oxygine
         void setDragBounds(const RectF& bounds);
         /**sets destination drag client. Default value is Actor attached to DragHandler*/
         void setDragClient(Actor* actor);
+        void setIgnoreTouchUp(bool ignore) { _ignoreTouchUp = ignore; }
         void snapClient2Bounds();
 
     protected:
@@ -53,5 +54,6 @@ namespace oxygine
         bool _clientIsParent;
         bool _pressed;
         bool _dragEnabled;
+        bool _ignoreTouchUp;
     };
 }

+ 18 - 2
oxygine/src/EventDispatcher.cpp

@@ -4,6 +4,8 @@
 #include <malloc.h>
 #endif
 
+#define USE_ALLOCA
+
 namespace oxygine
 {
     EventDispatcher::EventDispatcher(): _lastID(0), _listeners(0)
@@ -154,16 +156,26 @@ namespace oxygine
 
 
         size_t size = _listeners->size();
+        size_t num = 0;
+
+#ifdef USE_ALLOCA
         listenerbase* copy = (listenerbase*)alloca(sizeof(listenerbase) * size);
+#else
+        listenerbase* copy = new listenerbase[size];
+#endif
+
 
-        size_t num = 0;
         for (size_t i = 0; i != size; ++i)
         {
             listener& ls = _listeners->at(i);
             if (ls.type != event->type)
                 continue;
-
+#ifdef USE_ALLOCA
             new(copy + num) listenerbase(ls);
+#else
+            copy[num] = ls;
+#endif
+
             ++num;
         }
 
@@ -177,11 +189,15 @@ namespace oxygine
                 break;
         }
 
+#ifdef USE_ALLOCA
         for (size_t i = 0; i != num; ++i)
         {
             listenerbase& ls = copy[i];
             ls.~listenerbase();
         }
+#else
+        delete[] copy;
+#endif
     }
 
     int EventDispatcher::getListenersCount() const

Some files were not shown because too many files changed in this diff