浏览代码

Merge branch 'dev'

dm 7 年之前
父节点
当前提交
b39981460e
共有 76 个文件被更改,包括 524 次插入207 次删除
  1. 0 2
      examples/Demo/proj.android/AndroidManifest.xml
  2. 16 5
      examples/Demo/proj.android/build.gradle
  3. 1 1
      examples/Demo/proj.android/jni/Application.mk
  4. 2 2
      examples/Demo/proj.cmake/CMakeLists.txt
  5. 4 0
      examples/Demo/proj.ios/demo_ios.xcodeproj/project.pbxproj
  6. 0 2
      examples/DemoBox2D/proj.android/AndroidManifest.xml
  7. 16 5
      examples/DemoBox2D/proj.android/build.gradle
  8. 2 2
      examples/DemoBox2D/proj.android/gradle/wrapper/gradle-wrapper.properties
  9. 1 1
      examples/DemoBox2D/proj.android/jni/Application.mk
  10. 11 3
      examples/DemoBox2D/proj.cmake/CMakeLists.txt
  11. 4 0
      examples/DemoBox2D/proj.ios/DemoBox2D_ios.xcodeproj/project.pbxproj
  12. 0 2
      examples/Game/part1/proj.android/AndroidManifest.xml
  13. 16 5
      examples/Game/part1/proj.android/build.gradle
  14. 1 1
      examples/Game/part1/proj.android/jni/Application.mk
  15. 1 1
      examples/Game/part1/proj.cmake/CMakeLists.txt
  16. 4 0
      examples/Game/part1/proj.ios/GamePart1_ios.xcodeproj/project.pbxproj
  17. 0 2
      examples/Game/part2/proj.android/AndroidManifest.xml
  18. 16 5
      examples/Game/part2/proj.android/build.gradle
  19. 1 1
      examples/Game/part2/proj.android/jni/Application.mk
  20. 1 1
      examples/Game/part2/proj.cmake/CMakeLists.txt
  21. 4 0
      examples/Game/part2/proj.ios/GamePart2_ios.xcodeproj/project.pbxproj
  22. 0 2
      examples/Game/part3/proj.android/AndroidManifest.xml
  23. 16 5
      examples/Game/part3/proj.android/build.gradle
  24. 1 1
      examples/Game/part3/proj.android/jni/Application.mk
  25. 1 1
      examples/Game/part3/proj.cmake/CMakeLists.txt
  26. 4 0
      examples/Game/part3/proj.ios/GamePart3_ios.xcodeproj/project.pbxproj
  27. 0 2
      examples/Game/part4/proj.android/AndroidManifest.xml
  28. 16 5
      examples/Game/part4/proj.android/build.gradle
  29. 1 1
      examples/Game/part4/proj.android/jni/Application.mk
  30. 1 1
      examples/Game/part4/proj.cmake/CMakeLists.txt
  31. 4 0
      examples/Game/part4/proj.ios/GamePart4_ios.xcodeproj/project.pbxproj
  32. 0 2
      examples/Game/part5/proj.android/AndroidManifest.xml
  33. 16 5
      examples/Game/part5/proj.android/build.gradle
  34. 1 1
      examples/Game/part5/proj.android/jni/Application.mk
  35. 1 1
      examples/Game/part5/proj.cmake/CMakeLists.txt
  36. 4 0
      examples/Game/part5/proj.ios/GamePart5_ios.xcodeproj/project.pbxproj
  37. 0 2
      examples/HelloWorld/proj.android/AndroidManifest.xml
  38. 16 5
      examples/HelloWorld/proj.android/build.gradle
  39. 1 1
      examples/HelloWorld/proj.android/jni/Application.mk
  40. 1 1
      examples/HelloWorld/proj.cmake/CMakeLists.txt
  41. 56 56
      examples/HelloWorld/proj.ios/HelloWorld_ios.xcodeproj/project.pbxproj
  42. 0 2
      examples/Match3/proj.android/AndroidManifest.xml
  43. 16 5
      examples/Match3/proj.android/build.gradle
  44. 2 2
      examples/Match3/proj.android/gradle/wrapper/gradle-wrapper.properties
  45. 1 1
      examples/Match3/proj.android/jni/Application.mk
  46. 1 1
      examples/Match3/proj.cmake/CMakeLists.txt
  47. 4 0
      examples/Match3/proj.ios/Match3_ios.xcodeproj/project.pbxproj
  48. 1 1
      oxygine/SDL/android/extension/build.gradle
  49. 12 3
      oxygine/SDL/android/lib/build.gradle
  50. 2 1
      oxygine/src/oxygine/AnimationFrame.cpp
  51. 8 2
      oxygine/src/oxygine/Event.h
  52. 7 0
      oxygine/src/oxygine/Material.cpp
  53. 5 4
      oxygine/src/oxygine/Material.h
  54. 8 1
      oxygine/src/oxygine/VisualStyle.cpp
  55. 1 2
      oxygine/src/oxygine/VisualStyle.h
  56. 56 11
      oxygine/src/oxygine/actor/Actor.cpp
  57. 20 7
      oxygine/src/oxygine/actor/Actor.h
  58. 18 1
      oxygine/src/oxygine/actor/Box9Sprite.cpp
  59. 15 8
      oxygine/src/oxygine/actor/Box9Sprite.h
  60. 1 1
      oxygine/src/oxygine/actor/DebugActor.cpp
  61. 13 0
      oxygine/src/oxygine/closure/closure_impl.h
  62. 4 2
      oxygine/src/oxygine/core/Object.cpp
  63. 18 2
      oxygine/src/oxygine/core/Object.h
  64. 21 1
      oxygine/src/oxygine/math/Matrix.h
  65. 1 0
      oxygine/src/oxygine/math/Rect.h
  66. 1 0
      oxygine/src/oxygine/math/Vector3.h
  67. 1 1
      oxygine/src/oxygine/res/Resources.cpp
  68. 3 1
      oxygine/src/oxygine/tween/Tween.cpp
  69. 5 0
      oxygine/src/oxygine/tween/Tween.h
  70. 15 4
      oxygine/src/oxygine/utils/stringUtils.cpp
  71. 1 1
      tools/others/gen_templates.py
  72. 0 2
      tools/templates/proj.android/AndroidManifest.xml
  73. 16 5
      tools/templates/proj.android/build.gradle
  74. 1 1
      tools/templates/proj.android/jni/Application.mk
  75. 1 1
      tools/templates/proj.cmake/CMakeLists.txt
  76. 4 0
      tools/templates/proj.ios/${PROJECT}_ios.xcodeproj/project.pbxproj

+ 0 - 2
examples/Demo/proj.android/AndroidManifest.xml

@@ -25,8 +25,6 @@
         </activity>
     </application>
 
-    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
-
     <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
     <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  

+ 16 - 5
examples/Demo/proj.android/build.gradle

@@ -1,15 +1,23 @@
 buildscript {
     repositories {
-        mavenLocal()
+    	google()
+        mavenLocal()        
         mavenCentral()
-        jcenter()
-        google()
+        jcenter()        
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.2.0'
+    }
+}
+
+allprojects {
+    repositories {
+        google()
+        jcenter()
     }
 }
 
+
 apply plugin: 'com.android.application'
 
 
@@ -21,7 +29,7 @@ dependencies {
 
 android {
         
-    compileSdkVersion 23
+    compileSdkVersion 26
 
 
     sourceSets {
@@ -35,6 +43,9 @@ android {
     }
 
     defaultConfig {
+    	minSdkVersion 19
+        targetSdkVersion 26
+
         ndk {
             abiFilters 'armeabi-v7a'//, 'arm64-v8a'
         }

+ 1 - 1
examples/Demo/proj.android/jni/Application.mk

@@ -1,4 +1,4 @@
-APP_STL := gnustl_static
+APP_STL := c++_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
 APP_CPPFLAGS += -std=c++11

+ 2 - 2
examples/Demo/proj.cmake/CMakeLists.txt

@@ -8,7 +8,7 @@ link_directories(${OXYGINE_LIBRARY_DIRS})
 
 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/example.h ../src/test.h )
+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/TestCamera.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/TestOpenGL.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/TestTiled.h ../src/TestTouches.h ../src/TestTweenPostProcessing.h ../src/TestTweenShine.h ../src/TestTweenText.h ../src/TestTweens.h ../src/TestUserShader.h ../src/example.h ../src/test.h )
 target_link_libraries(Demo ${OXYGINE_CORE_LIBS})
 
 
@@ -21,6 +21,6 @@ endif(WIN32)
 
 if (EMSCRIPTEN)
 	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 -s FORCE_FILESYSTEM=1")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WASM=0 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648 -s FORCE_FILESYSTEM=1")
 	em_link_pre_js(Demo  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 4 - 0
examples/Demo/proj.ios/demo_ios.xcodeproj/project.pbxproj

@@ -25,6 +25,7 @@
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
 		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
 		4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F7EF5AE200623DE004089D6 /* Metal.framework */; };
+		4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */; };
 
 		
 		2DC477AC10D6C07B3FE008F6 /* ../src/Counter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Counter.cpp */; };
@@ -94,6 +95,7 @@
 		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>"; };
 		4F7EF5AE200623DE004089D6 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
+		4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; };
 
 
 		360377333740D8A2FD15BBE6 /* ../src/Counter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Counter.cpp; path = ../src/Counter.cpp; sourceTree = "<group>"; };
@@ -150,6 +152,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */,
 				4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */,
 				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
@@ -209,6 +212,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */,
 				4F7EF5AE200623DE004089D6 /* Metal.framework */,
 				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,

+ 0 - 2
examples/DemoBox2D/proj.android/AndroidManifest.xml

@@ -25,8 +25,6 @@
         </activity>
     </application>
 
-    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
-
     <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
     <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  

+ 16 - 5
examples/DemoBox2D/proj.android/build.gradle

@@ -1,15 +1,23 @@
 buildscript {
     repositories {
-        mavenLocal()
+    	google()
+        mavenLocal()        
         mavenCentral()
-        jcenter()
-        google()
+        jcenter()        
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.2.0'
+    }
+}
+
+allprojects {
+    repositories {
+        google()
+        jcenter()
     }
 }
 
+
 apply plugin: 'com.android.application'
 
 
@@ -21,7 +29,7 @@ dependencies {
 
 android {
         
-    compileSdkVersion 23
+    compileSdkVersion 26
 
 
     sourceSets {
@@ -35,6 +43,9 @@ android {
     }
 
     defaultConfig {
+    	minSdkVersion 19
+        targetSdkVersion 26
+
         ndk {
             abiFilters 'armeabi-v7a'//, 'arm64-v8a'
         }

+ 2 - 2
examples/DemoBox2D/proj.android/gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
-#Wed Nov 01 12:35:02 YEKT 2017
+#Thu Sep 27 00:47:40 YEKT 2018
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

+ 1 - 1
examples/DemoBox2D/proj.android/jni/Application.mk

@@ -1,4 +1,4 @@
-APP_STL := gnustl_static
+APP_STL := c++_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
 APP_CPPFLAGS += -std=c++11

+ 11 - 3
examples/DemoBox2D/proj.cmake/CMakeLists.txt

@@ -6,13 +6,21 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
+
+file(GLOB_RECURSE BOX2DSRC
+		../box2d/*.cpp
+		../box2d/*.h)
+
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OXYGINE_CXX_FLAGS}")
 
-add_executable(DemoBox2D ../src/Box2DDebugDraw.cpp ../src/example.cpp ../src/main.cpp  ../src/Box2DDebugDraw.h ../src/example.h )
-target_link_libraries(DemoBox2D ${OXYGINE_CORE_LIBS})
+add_executable(DemoBox2D ${BOX2DSRC} ../src/Box2DDebugDraw.cpp ../src/main.cpp ../src/example.cpp  ../src/Box2DDebugDraw.h ../src/example.h )
+source_group(box2d FILES ${BOX2DSRC})
+include_directories(../box2d)
 
 
 
+target_link_libraries(DemoBox2D ${OXYGINE_CORE_LIBS})
+
 if (WIN32) #disable console mode for VC++
 	set_target_properties(DemoBox2D PROPERTIES WIN32_EXECUTABLE TRUE)
 endif(WIN32)
@@ -21,6 +29,6 @@ endif(WIN32)
 
 if (EMSCRIPTEN)
 	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 -s FORCE_FILESYSTEM=1")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WASM=0 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648 -s FORCE_FILESYSTEM=1")
 	em_link_pre_js(DemoBox2D  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 4 - 0
examples/DemoBox2D/proj.ios/DemoBox2D_ios.xcodeproj/project.pbxproj

@@ -25,6 +25,7 @@
 		2DC477AC10D6C07B3FE008F6 /* Box2DDebugDraw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* Box2DDebugDraw.cpp */; };
 		3A631A475DE035FC53ADE5EA /* images in Resources */ = {isa = PBXBuildFile; fileRef = 7F3B12E3C9D554D9FE28101D /* images */; };
 		4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F7EF5AE200623DE004089D6 /* Metal.framework */; };
+		4F8012EF2145521F00FDBA22 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F8012EA2145521F00FDBA22 /* CoreBluetooth.framework */; };
 		4FCB63C8200640C4009B1887 /* b2Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FCB635F200640C4009B1887 /* b2Body.cpp */; };
 		4FCB63C9200640C4009B1887 /* b2World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FCB6360200640C4009B1887 /* b2World.cpp */; };
 		4FCB63CA200640C4009B1887 /* b2Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FCB6361200640C4009B1887 /* b2Fixture.cpp */; };
@@ -137,6 +138,7 @@
 		360377333740D8A2FD15BBE6 /* Box2DDebugDraw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Box2DDebugDraw.cpp; path = ../src/Box2DDebugDraw.cpp; sourceTree = "<group>"; };
 		4DA100C319512824B7570663 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../src/main.cpp; sourceTree = "<group>"; };
 		4F7EF5AE200623DE004089D6 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
+		4F8012EA2145521F00FDBA22 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; };
 		4FCB635F200640C4009B1887 /* b2Body.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Body.cpp; sourceTree = "<group>"; };
 		4FCB6360200640C4009B1887 /* b2World.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2World.cpp; sourceTree = "<group>"; };
 		4FCB6361200640C4009B1887 /* b2Fixture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Fixture.cpp; sourceTree = "<group>"; };
@@ -243,6 +245,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				4F8012EF2145521F00FDBA22 /* CoreBluetooth.framework in Frameworks */,
 				4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */,
 				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
@@ -301,6 +304,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				4F8012EA2145521F00FDBA22 /* CoreBluetooth.framework */,
 				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,
 				04998EEB17F8ADD4003441C3 /* UIKit.framework */,

+ 0 - 2
examples/Game/part1/proj.android/AndroidManifest.xml

@@ -25,8 +25,6 @@
         </activity>
     </application>
 
-    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
-
     <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
     <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  

+ 16 - 5
examples/Game/part1/proj.android/build.gradle

@@ -1,15 +1,23 @@
 buildscript {
     repositories {
-        mavenLocal()
+    	google()
+        mavenLocal()        
         mavenCentral()
-        jcenter()
-        google()
+        jcenter()        
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.2.0'
+    }
+}
+
+allprojects {
+    repositories {
+        google()
+        jcenter()
     }
 }
 
+
 apply plugin: 'com.android.application'
 
 
@@ -21,7 +29,7 @@ dependencies {
 
 android {
         
-    compileSdkVersion 23
+    compileSdkVersion 26
 
 
     sourceSets {
@@ -35,6 +43,9 @@ android {
     }
 
     defaultConfig {
+    	minSdkVersion 19
+        targetSdkVersion 26
+
         ndk {
             abiFilters 'armeabi-v7a'//, 'arm64-v8a'
         }

+ 1 - 1
examples/Game/part1/proj.android/jni/Application.mk

@@ -1,4 +1,4 @@
-APP_STL := gnustl_static
+APP_STL := c++_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
 APP_CPPFLAGS += -std=c++11

+ 1 - 1
examples/Game/part1/proj.cmake/CMakeLists.txt

@@ -21,6 +21,6 @@ endif(WIN32)
 
 if (EMSCRIPTEN)
 	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 -s FORCE_FILESYSTEM=1")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WASM=0 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648 -s FORCE_FILESYSTEM=1")
 	em_link_pre_js(GamePart1  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 4 - 0
examples/Game/part1/proj.ios/GamePart1_ios.xcodeproj/project.pbxproj

@@ -25,6 +25,7 @@
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
 		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
 		4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F7EF5AE200623DE004089D6 /* Metal.framework */; };
+		4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */; };
 
 		
 		2DC477AC10D6C07B3FE008F6 /* ../src/Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Game.cpp */; };
@@ -90,6 +91,7 @@
 		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>"; };
 		4F7EF5AE200623DE004089D6 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
+		4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; };
 
 
 		360377333740D8A2FD15BBE6 /* ../src/Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Game.cpp; path = ../src/Game.cpp; sourceTree = "<group>"; };
@@ -116,6 +118,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */,
 				4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */,
 				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
@@ -175,6 +178,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */,
 				4F7EF5AE200623DE004089D6 /* Metal.framework */,
 				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,

+ 0 - 2
examples/Game/part2/proj.android/AndroidManifest.xml

@@ -25,8 +25,6 @@
         </activity>
     </application>
 
-    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
-
     <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
     <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  

+ 16 - 5
examples/Game/part2/proj.android/build.gradle

@@ -1,15 +1,23 @@
 buildscript {
     repositories {
-        mavenLocal()
+    	google()
+        mavenLocal()        
         mavenCentral()
-        jcenter()
-        google()
+        jcenter()        
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.2.0'
+    }
+}
+
+allprojects {
+    repositories {
+        google()
+        jcenter()
     }
 }
 
+
 apply plugin: 'com.android.application'
 
 
@@ -21,7 +29,7 @@ dependencies {
 
 android {
         
-    compileSdkVersion 23
+    compileSdkVersion 26
 
 
     sourceSets {
@@ -35,6 +43,9 @@ android {
     }
 
     defaultConfig {
+    	minSdkVersion 19
+        targetSdkVersion 26
+
         ndk {
             abiFilters 'armeabi-v7a'//, 'arm64-v8a'
         }

+ 1 - 1
examples/Game/part2/proj.android/jni/Application.mk

@@ -1,4 +1,4 @@
-APP_STL := gnustl_static
+APP_STL := c++_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
 APP_CPPFLAGS += -std=c++11

+ 1 - 1
examples/Game/part2/proj.cmake/CMakeLists.txt

@@ -21,6 +21,6 @@ endif(WIN32)
 
 if (EMSCRIPTEN)
 	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 -s FORCE_FILESYSTEM=1")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WASM=0 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648 -s FORCE_FILESYSTEM=1")
 	em_link_pre_js(GamePart2  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 4 - 0
examples/Game/part2/proj.ios/GamePart2_ios.xcodeproj/project.pbxproj

@@ -25,6 +25,7 @@
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
 		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
 		4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F7EF5AE200623DE004089D6 /* Metal.framework */; };
+		4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */; };
 
 		
 		2DC477AC10D6C07B3FE008F6 /* ../src/Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */; };
@@ -92,6 +93,7 @@
 		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>"; };
 		4F7EF5AE200623DE004089D6 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
+		4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; };
 
 
 		360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Enemy.cpp; path = ../src/Enemy.cpp; sourceTree = "<group>"; };
@@ -122,6 +124,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */,
 				4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */,
 				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
@@ -181,6 +184,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */,
 				4F7EF5AE200623DE004089D6 /* Metal.framework */,
 				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,

+ 0 - 2
examples/Game/part3/proj.android/AndroidManifest.xml

@@ -25,8 +25,6 @@
         </activity>
     </application>
 
-    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
-
     <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
     <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  

+ 16 - 5
examples/Game/part3/proj.android/build.gradle

@@ -1,15 +1,23 @@
 buildscript {
     repositories {
-        mavenLocal()
+    	google()
+        mavenLocal()        
         mavenCentral()
-        jcenter()
-        google()
+        jcenter()        
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.2.0'
+    }
+}
+
+allprojects {
+    repositories {
+        google()
+        jcenter()
     }
 }
 
+
 apply plugin: 'com.android.application'
 
 
@@ -21,7 +29,7 @@ dependencies {
 
 android {
         
-    compileSdkVersion 23
+    compileSdkVersion 26
 
 
     sourceSets {
@@ -35,6 +43,9 @@ android {
     }
 
     defaultConfig {
+    	minSdkVersion 19
+        targetSdkVersion 26
+
         ndk {
             abiFilters 'armeabi-v7a'//, 'arm64-v8a'
         }

+ 1 - 1
examples/Game/part3/proj.android/jni/Application.mk

@@ -1,4 +1,4 @@
-APP_STL := gnustl_static
+APP_STL := c++_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
 APP_CPPFLAGS += -std=c++11

+ 1 - 1
examples/Game/part3/proj.cmake/CMakeLists.txt

@@ -21,6 +21,6 @@ endif(WIN32)
 
 if (EMSCRIPTEN)
 	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 -s FORCE_FILESYSTEM=1")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WASM=0 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648 -s FORCE_FILESYSTEM=1")
 	em_link_pre_js(GamePart3  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 4 - 0
examples/Game/part3/proj.ios/GamePart3_ios.xcodeproj/project.pbxproj

@@ -25,6 +25,7 @@
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
 		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
 		4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F7EF5AE200623DE004089D6 /* Metal.framework */; };
+		4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */; };
 
 		
 		2DC477AC10D6C07B3FE008F6 /* ../src/Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */; };
@@ -96,6 +97,7 @@
 		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>"; };
 		4F7EF5AE200623DE004089D6 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
+		4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; };
 
 
 		360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Enemy.cpp; path = ../src/Enemy.cpp; sourceTree = "<group>"; };
@@ -134,6 +136,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */,
 				4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */,
 				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
@@ -193,6 +196,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */,
 				4F7EF5AE200623DE004089D6 /* Metal.framework */,
 				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,

+ 0 - 2
examples/Game/part4/proj.android/AndroidManifest.xml

@@ -25,8 +25,6 @@
         </activity>
     </application>
 
-    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
-
     <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
     <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  

+ 16 - 5
examples/Game/part4/proj.android/build.gradle

@@ -1,15 +1,23 @@
 buildscript {
     repositories {
-        mavenLocal()
+    	google()
+        mavenLocal()        
         mavenCentral()
-        jcenter()
-        google()
+        jcenter()        
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.2.0'
+    }
+}
+
+allprojects {
+    repositories {
+        google()
+        jcenter()
     }
 }
 
+
 apply plugin: 'com.android.application'
 
 
@@ -21,7 +29,7 @@ dependencies {
 
 android {
         
-    compileSdkVersion 23
+    compileSdkVersion 26
 
 
     sourceSets {
@@ -35,6 +43,9 @@ android {
     }
 
     defaultConfig {
+    	minSdkVersion 19
+        targetSdkVersion 26
+
         ndk {
             abiFilters 'armeabi-v7a'//, 'arm64-v8a'
         }

+ 1 - 1
examples/Game/part4/proj.android/jni/Application.mk

@@ -1,4 +1,4 @@
-APP_STL := gnustl_static
+APP_STL := c++_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
 APP_CPPFLAGS += -std=c++11

+ 1 - 1
examples/Game/part4/proj.cmake/CMakeLists.txt

@@ -21,6 +21,6 @@ endif(WIN32)
 
 if (EMSCRIPTEN)
 	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 -s FORCE_FILESYSTEM=1")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WASM=0 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648 -s FORCE_FILESYSTEM=1")
 	em_link_pre_js(GamePart4  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 4 - 0
examples/Game/part4/proj.ios/GamePart4_ios.xcodeproj/project.pbxproj

@@ -25,6 +25,7 @@
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
 		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
 		4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F7EF5AE200623DE004089D6 /* Metal.framework */; };
+		4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */; };
 
 		
 		2DC477AC10D6C07B3FE008F6 /* ../src/Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */; };
@@ -98,6 +99,7 @@
 		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>"; };
 		4F7EF5AE200623DE004089D6 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
+		4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; };
 
 
 		360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Enemy.cpp; path = ../src/Enemy.cpp; sourceTree = "<group>"; };
@@ -139,6 +141,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */,
 				4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */,
 				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
@@ -198,6 +201,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */,
 				4F7EF5AE200623DE004089D6 /* Metal.framework */,
 				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,

+ 0 - 2
examples/Game/part5/proj.android/AndroidManifest.xml

@@ -25,8 +25,6 @@
         </activity>
     </application>
 
-    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
-
     <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
     <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  

+ 16 - 5
examples/Game/part5/proj.android/build.gradle

@@ -1,15 +1,23 @@
 buildscript {
     repositories {
-        mavenLocal()
+    	google()
+        mavenLocal()        
         mavenCentral()
-        jcenter()
-        google()
+        jcenter()        
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.2.0'
+    }
+}
+
+allprojects {
+    repositories {
+        google()
+        jcenter()
     }
 }
 
+
 apply plugin: 'com.android.application'
 
 
@@ -21,7 +29,7 @@ dependencies {
 
 android {
         
-    compileSdkVersion 23
+    compileSdkVersion 26
 
 
     sourceSets {
@@ -35,6 +43,9 @@ android {
     }
 
     defaultConfig {
+    	minSdkVersion 19
+        targetSdkVersion 26
+
         ndk {
             abiFilters 'armeabi-v7a'//, 'arm64-v8a'
         }

+ 1 - 1
examples/Game/part5/proj.android/jni/Application.mk

@@ -1,4 +1,4 @@
-APP_STL := gnustl_static
+APP_STL := c++_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
 APP_CPPFLAGS += -std=c++11

+ 1 - 1
examples/Game/part5/proj.cmake/CMakeLists.txt

@@ -21,6 +21,6 @@ endif(WIN32)
 
 if (EMSCRIPTEN)
 	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 -s FORCE_FILESYSTEM=1")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WASM=0 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648 -s FORCE_FILESYSTEM=1")
 	em_link_pre_js(GamePart5  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 4 - 0
examples/Game/part5/proj.ios/GamePart5_ios.xcodeproj/project.pbxproj

@@ -25,6 +25,7 @@
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
 		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
 		4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F7EF5AE200623DE004089D6 /* Metal.framework */; };
+		4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */; };
 
 		
 		2DC477AC10D6C07B3FE008F6 /* ../src/Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */; };
@@ -98,6 +99,7 @@
 		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>"; };
 		4F7EF5AE200623DE004089D6 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
+		4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; };
 
 
 		360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Enemy.cpp; path = ../src/Enemy.cpp; sourceTree = "<group>"; };
@@ -139,6 +141,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */,
 				4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */,
 				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
@@ -198,6 +201,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */,
 				4F7EF5AE200623DE004089D6 /* Metal.framework */,
 				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,

+ 0 - 2
examples/HelloWorld/proj.android/AndroidManifest.xml

@@ -25,8 +25,6 @@
         </activity>
     </application>
 
-    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
-
     <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
     <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  

+ 16 - 5
examples/HelloWorld/proj.android/build.gradle

@@ -1,15 +1,23 @@
 buildscript {
     repositories {
-        mavenLocal()
+    	google()
+        mavenLocal()        
         mavenCentral()
-        jcenter()
-        google()
+        jcenter()        
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.2.0'
+    }
+}
+
+allprojects {
+    repositories {
+        google()
+        jcenter()
     }
 }
 
+
 apply plugin: 'com.android.application'
 
 
@@ -21,7 +29,7 @@ dependencies {
 
 android {
         
-    compileSdkVersion 23
+    compileSdkVersion 26
 
 
     sourceSets {
@@ -35,6 +43,9 @@ android {
     }
 
     defaultConfig {
+    	minSdkVersion 19
+        targetSdkVersion 26
+
         ndk {
             abiFilters 'armeabi-v7a'//, 'arm64-v8a'
         }

+ 1 - 1
examples/HelloWorld/proj.android/jni/Application.mk

@@ -1,4 +1,4 @@
-APP_STL := gnustl_static
+APP_STL := c++_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
 APP_CPPFLAGS += -std=c++11

+ 1 - 1
examples/HelloWorld/proj.cmake/CMakeLists.txt

@@ -21,6 +21,6 @@ endif(WIN32)
 
 if (EMSCRIPTEN)
 	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 -s FORCE_FILESYSTEM=1")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WASM=0 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648 -s FORCE_FILESYSTEM=1")
 	em_link_pre_js(HelloWorld  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

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

@@ -13,22 +13,28 @@
 		04998EE717F8ADB4003441C3 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EE217F8ADB4003441C3 /* QuartzCore.framework */; };
 		04998EE817F8ADB4003441C3 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EE317F8ADB4003441C3 /* AudioToolbox.framework */; };
 		04998EE917F8ADB4003441C3 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EE417F8ADB4003441C3 /* CoreAudio.framework */; };
+		04998EE917F8ADB4003441C3 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EE417F8ADB4003441C3 /* CoreAudio.framework */; };
 		04998EEA17F8ADB4003441C3 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EE517F8ADB4003441C3 /* OpenGLES.framework */; };
 		04998EEE17F8ADD4003441C3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EEB17F8ADD4003441C3 /* UIKit.framework */; };
 		04998EEF17F8ADD4003441C3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EEC17F8ADD4003441C3 /* Foundation.framework */; };
 		04998EF017F8ADD4003441C3 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EED17F8ADD4003441C3 /* CoreGraphics.framework */; };
+		9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9223FE7E1C2D913D000B1FDA /* GameController.framework */; };
 		04998EF717F8B6F3003441C3 /* libpng.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EF517F8B6F3003441C3 /* libpng.a */; };
 		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 */; };
-		1E839D002B2BA83FC83A695A /* images in Resources */ = {isa = PBXBuildFile; fileRef = 04FE4D4FB640E0DF92DFB865 /* images */; };
-		2DC477AC10D6C07B3FE008F6 /* example.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* example.cpp */; };
-		3A631A475DE035FC53ADE5EA /* res.xml in Resources */ = {isa = PBXBuildFile; fileRef = 7F3B12E3C9D554D9FE28101D /* res.xml */; };
-		4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F7EF5AE200623DE004089D6 /* Metal.framework */; };
-		9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9223FE7E1C2D913D000B1FDA /* GameController.framework */; };
 		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
-		C8860D93875589970329DCCD /* fonts in Resources */ = {isa = PBXBuildFile; fileRef = 4DA100C319512824B7570663 /* fonts */; };
-		DA49ED8903C628BA578C8670 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF9628FC8D38F9748F0CDEB /* main.cpp */; };
+		4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F7EF5AE200623DE004089D6 /* Metal.framework */; };
+		4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F8012E021454FEA00FDBA22 /* CoreBluetooth.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 */
@@ -60,17 +66,9 @@
 			remoteGlobalIDString = C3E86F4B16EBC8A500052915;
 			remoteInfo = oxygine_ios;
 		};
-		4FCB635920063FF0009B1887 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 04998D2F17F8A96E003441C3 /* SDL.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = FAB598141BB5C1B100BE72C5;
-			remoteInfo = "libSDL-tvOS";
-		};
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
-		048AD0AD197D24AB001963EF /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; };
 		04998CEC17F8A933003441C3 /* HelloWorld_ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld_ios.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		04998D2F17F8A96E003441C3 /* SDL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL.xcodeproj; path = "../../../..//SDL/Xcode-iOS/SDL/SDL.xcodeproj"; sourceTree = "<group>"; };
 		04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = oxygine_ios.xcodeproj; path = "../../..//oxygine/SDL/ios/oxygine/oxygine_ios.xcodeproj"; sourceTree = "<group>"; };
@@ -78,22 +76,28 @@
 		04998EE217F8ADB4003441C3 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
 		04998EE317F8ADB4003441C3 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
 		04998EE417F8ADB4003441C3 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
+		048AD0AD197D24AB001963EF /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; };
 		04998EE517F8ADB4003441C3 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
 		04998EEB17F8ADD4003441C3 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
 		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>"; };
-		04FE4D4FB640E0DF92DFB865 /* images */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = images; path = ../data/images; sourceTree = "<group>"; };
-		0BF9628FC8D38F9748F0CDEB /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../src/main.cpp; sourceTree = "<group>"; };
-		360377333740D8A2FD15BBE6 /* example.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = example.cpp; path = ../src/example.cpp; sourceTree = "<group>"; };
-		4DA100C319512824B7570663 /* fonts */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = fonts; path = ../data/fonts; sourceTree = "<group>"; };
+		04E9AD3E1876FE84006A7317 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name =Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = "<group>"; };
 		4F7EF5AE200623DE004089D6 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
-		7F3B12E3C9D554D9FE28101D /* res.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = wtf; name = res.xml; path = ../data/res.xml; 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; };
-		F6123B1E6FE4471A00F49751 /* example.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = example.h; path = ../src/example.h; sourceTree = "<group>"; };
+		4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; };
+
+
+		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>"; };
+		F6123B1E6FE4471A00F49751 /* ../src/example.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = example.h; path = ../src/example.h; sourceTree = "<group>"; };
+		4DA100C319512824B7570663 /* ../data/fonts */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = fonts; path = ../data/fonts; sourceTree = "<group>"; };
+		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 */
@@ -101,6 +105,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */,
 				4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */,
 				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
@@ -145,6 +150,7 @@
 				04998CEE17F8A933003441C3 /* Frameworks */,
 				04998CED17F8A933003441C3 /* Products */,
 				4F7EF5B620062572004089D6 /* Recovered References */,
+
 			);
 			sourceTree = "<group>";
 		};
@@ -159,6 +165,8 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */,
+				4F7EF5AE200623DE004089D6 /* Metal.framework */,
 				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,
 				04998EEB17F8ADD4003441C3 /* UIKit.framework */,
@@ -173,12 +181,14 @@
 			name = Frameworks;
 			sourceTree = "<group>";
 		};
+
 		04998CF617F8A933003441C3 /* Supporting Files */ = {
 			isa = PBXGroup;
 			children = (
-				4DA100C319512824B7570663 /* fonts */,
-				04FE4D4FB640E0DF92DFB865 /* images */,
-				7F3B12E3C9D554D9FE28101D /* res.xml */,
+				4DA100C319512824B7570663 /* fonts */, 
+				04FE4D4FB640E0DF92DFB865 /* images */, 
+				7F3B12E3C9D554D9FE28101D /* res.xml */, 
+
 			);
 			name = "Supporting Files";
 			sourceTree = "<group>";
@@ -187,7 +197,6 @@
 			isa = PBXGroup;
 			children = (
 				04998D3517F8A96E003441C3 /* libSDL2.a */,
-				4FCB635A20063FF0009B1887 /* libSDL2.a */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -195,9 +204,10 @@
 		04998D4417F8A9ED003441C3 /* src */ = {
 			isa = PBXGroup;
 			children = (
-				360377333740D8A2FD15BBE6 /* example.cpp */,
-				0BF9628FC8D38F9748F0CDEB /* main.cpp */,
-				F6123B1E6FE4471A00F49751 /* example.h */,
+				360377333740D8A2FD15BBE6 /* example.cpp */, 
+				0BF9628FC8D38F9748F0CDEB /* main.cpp */, 
+				F6123B1E6FE4471A00F49751 /* example.h */, 
+
 			);
 			name = src;
 			sourceTree = "<group>";
@@ -210,6 +220,7 @@
 			name = Products;
 			sourceTree = "<group>";
 		};
+
 		4F7EF5B620062572004089D6 /* Recovered References */ = {
 			isa = PBXGroup;
 			children = (
@@ -218,6 +229,7 @@
 			name = "Recovered References";
 			sourceTree = "<group>";
 		};
+
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -248,11 +260,6 @@
 			attributes = {
 				LastUpgradeCheck = 0510;
 				ORGANIZATIONNAME = Mac;
-				TargetAttributes = {
-					04998CEB17F8A933003441C3 = {
-						DevelopmentTeam = ANNH36MSRL;
-					};
-				};
 			};
 			buildConfigurationList = 04998CE717F8A933003441C3 /* Build configuration list for PBXProject "HelloWorld_ios" */;
 			compatibilityVersion = "Xcode 3.2";
@@ -297,13 +304,6 @@
 			remoteRef = 049B52AC1871EBBA00EF3C66 /* PBXContainerItemProxy */;
 			sourceTree = BUILT_PRODUCTS_DIR;
 		};
-		4FCB635A20063FF0009B1887 /* libSDL2.a */ = {
-			isa = PBXReferenceProxy;
-			fileType = archive.ar;
-			path = libSDL2.a;
-			remoteRef = 4FCB635920063FF0009B1887 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
 /* End PBXReferenceProxy section */
 
 /* Begin PBXResourcesBuildPhase section */
@@ -312,9 +312,10 @@
 			buildActionMask = 2147483647;
 			files = (
 				04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */,
-				C8860D93875589970329DCCD /* fonts in Resources */,
-				1E839D002B2BA83FC83A695A /* images in Resources */,
-				3A631A475DE035FC53ADE5EA /* res.xml in Resources */,
+								C8860D93875589970329DCCD /* fonts */, 
+				1E839D002B2BA83FC83A695A /* images */, 
+				3A631A475DE035FC53ADE5EA /* res.xml */, 
+
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -325,8 +326,9 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				2DC477AC10D6C07B3FE008F6 /* example.cpp in Sources */,
-				DA49ED8903C628BA578C8670 /* main.cpp in Sources */,
+				2DC477AC10D6C07B3FE008F6 /* example.cpp */, 
+				DA49ED8903C628BA578C8670 /* main.cpp */, 
+
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -362,13 +364,13 @@
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COMPRESS_PNG_FILES = NO;
 				COPY_PHASE_STRIP = NO;
 				ENABLE_BITCODE = NO;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"DEBUG=1",
@@ -405,13 +407,13 @@
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COMPRESS_PNG_FILES = NO;
 				COPY_PHASE_STRIP = YES;
 				ENABLE_BITCODE = NO;
 				ENABLE_NS_ASSERTIONS = NO;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 				GCC_WARN_UNDECLARED_SELECTOR = YES;
@@ -433,19 +435,18 @@
 				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-				DEVELOPMENT_TEAM = ANNH36MSRL;
-				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "HelloWorld/HelloWorld_ios-Prefix.pch";
 				GCC_WARN_UNUSED_VALUE = YES;
 				GCC_WARN_UNUSED_VARIABLE = NO;
+				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
 				INFOPLIST_FILE = "HelloWorld/HelloWorld_ios-Info.plist";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
 					"../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = YES;
-				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.helloworldkk;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.helloworld;
 				PRODUCT_NAME = HelloWorld_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";
@@ -460,19 +461,18 @@
 				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-				DEVELOPMENT_TEAM = ANNH36MSRL;
-				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "HelloWorld/HelloWorld_ios-Prefix.pch";
 				GCC_WARN_UNUSED_VALUE = YES;
 				GCC_WARN_UNUSED_VARIABLE = NO;
+				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
 				INFOPLIST_FILE = "HelloWorld/HelloWorld_ios-Info.plist";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
 					"../../..//oxygine/third_party/ios/libraries",
 				);
 				ONLY_ACTIVE_ARCH = NO;
-				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.helloworldkk;
+				PRODUCT_BUNDLE_IDENTIFIER = org.oxygine.helloworld;
 				PRODUCT_NAME = HelloWorld_ios;
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = "1,2";

+ 0 - 2
examples/Match3/proj.android/AndroidManifest.xml

@@ -25,8 +25,6 @@
         </activity>
     </application>
 
-    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
-
     <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
     <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  

+ 16 - 5
examples/Match3/proj.android/build.gradle

@@ -1,15 +1,23 @@
 buildscript {
     repositories {
-        mavenLocal()
+    	google()
+        mavenLocal()        
         mavenCentral()
-        jcenter()
-        google()
+        jcenter()        
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.2.0'
+    }
+}
+
+allprojects {
+    repositories {
+        google()
+        jcenter()
     }
 }
 
+
 apply plugin: 'com.android.application'
 
 
@@ -21,7 +29,7 @@ dependencies {
 
 android {
         
-    compileSdkVersion 23
+    compileSdkVersion 26
 
 
     sourceSets {
@@ -35,6 +43,9 @@ android {
     }
 
     defaultConfig {
+    	minSdkVersion 19
+        targetSdkVersion 26
+
         ndk {
             abiFilters 'armeabi-v7a'//, 'arm64-v8a'
         }

+ 2 - 2
examples/Match3/proj.android/gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
-#Wed Nov 01 12:35:02 YEKT 2017
+#Thu Sep 27 00:43:56 YEKT 2018
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

+ 1 - 1
examples/Match3/proj.android/jni/Application.mk

@@ -1,4 +1,4 @@
-APP_STL := gnustl_static
+APP_STL := c++_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
 APP_CPPFLAGS += -std=c++11

+ 1 - 1
examples/Match3/proj.cmake/CMakeLists.txt

@@ -21,6 +21,6 @@ endif(WIN32)
 
 if (EMSCRIPTEN)
 	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 -s FORCE_FILESYSTEM=1")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WASM=0 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648 -s FORCE_FILESYSTEM=1")
 	em_link_pre_js(Match3  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 4 - 0
examples/Match3/proj.ios/Match3_ios.xcodeproj/project.pbxproj

@@ -25,6 +25,7 @@
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
 		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
 		4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F7EF5AE200623DE004089D6 /* Metal.framework */; };
+		4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */; };
 
 		
 		2DC477AC10D6C07B3FE008F6 /* ../src/Board.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Board.cpp */; };
@@ -89,6 +90,7 @@
 		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>"; };
 		4F7EF5AE200623DE004089D6 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
+		4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; };
 
 
 		360377333740D8A2FD15BBE6 /* ../src/Board.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Board.cpp; path = ../src/Board.cpp; sourceTree = "<group>"; };
@@ -112,6 +114,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */,
 				4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */,
 				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
@@ -171,6 +174,7 @@
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */,
 				4F7EF5AE200623DE004089D6 /* Metal.framework */,
 				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,

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

@@ -6,7 +6,7 @@ buildscript {
         google()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.2.0'
     }
 }
 apply plugin: 'com.android.library'

+ 12 - 3
oxygine/SDL/android/lib/build.gradle

@@ -1,14 +1,23 @@
 buildscript {
     repositories {
+        google()
         mavenLocal()
         mavenCentral()
-        jcenter()
-        google()
+        jcenter()        
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.2.0'
     }
 }
+
+
+allprojects {
+    repositories {
+        google()
+        jcenter()
+    }
+}
+
 apply plugin: 'com.android.library'
 
 dependencies {

+ 2 - 1
oxygine/src/oxygine/AnimationFrame.cpp

@@ -46,7 +46,8 @@ namespace oxygine
         f._srcRect = f._srcRect / Vector2(w, h);
 
         f._frameSize = rect.size;
-        f._destRect.pos -= rect.pos;
+        //if (move2lefttop)
+        //    f._destRect.pos -= rect.pos;
 
         return f;
     }

+ 8 - 2
oxygine/src/oxygine/Event.h

@@ -18,11 +18,17 @@ namespace oxygine
             phase_bubbling
         };
 
-        Event(eventType Type, bool Bubbles = false) : listenerID(0), userData(0), type(Type), phase(phase_target), bubbles(Bubbles), stopsImmediatePropagation(false), stopsPropagation(false) {}
+        Event(eventType Type, bool Bubbles = false) : listenerID(0), type(Type), phase(phase_target), bubbles(Bubbles), stopsImmediatePropagation(false), stopsPropagation(false) { userData64 = 0; }
         virtual ~Event() {}
 
         int listenerID;
-        void* userData;
+        union
+        {
+            uint64 userData64;
+            int    userData32;
+            void*  userData;
+        };
+        
         eventType type;
         Phase phase;
         bool bubbles;

+ 7 - 0
oxygine/src/oxygine/Material.cpp

@@ -81,6 +81,13 @@ namespace oxygine
     }
 
 
+    spSTDMaterial STDMaterial::cloneDefaultShader() const
+    {
+        STDMaterial mat(*this);
+        mat._uberShader = &STDRenderer::uberShader;
+        return mc().cache(mat);
+    }
+
     Material::Material(const Material& other)
     {
         _hash = other._hash;

+ 5 - 4
oxygine/src/oxygine/Material.h

@@ -14,8 +14,8 @@ namespace oxygine
         _compare = (compare)f;\
         init();\
     }\
-    void copyFrom(const Material &r) override {*this = (cl&)r;}\
     void copyTo(cl &d) const{d = *this;}\
+    void copyFrom(const cl &d) {*this = d;}\
     cl* clone() const override {return new cl(*this);}\
     void update(size_t &hash, compare &cm) const override {\
         typedef bool (*fn)(const cl&a, const cl&b);\
@@ -52,7 +52,6 @@ namespace oxygine
         virtual void xflush() {}
 
         virtual Material* clone() const = 0;
-        virtual void copyFrom(const Material& r) = 0;
         virtual void update(size_t& hash, compare&) const = 0;
         virtual void rehash(size_t& hash) const = 0;
 
@@ -82,6 +81,7 @@ namespace oxygine
         void rehash(size_t& hash) const override {}
     };
 
+    DECLARE_SMART(STDMaterial, spSTDMaterial);
     class STDMaterial: public Material
     {
     public:
@@ -104,7 +104,8 @@ namespace oxygine
 
         void render(const AffineTransform& tr, const Color& c, const RectF& src, const RectF& dest) override;
         void render(const Color& c, const RectF& src, const RectF& dest) override;
-    };
 
-    DECLARE_SMART(STDMaterial, spSTDMaterial);
+        spSTDMaterial cloneDefaultShader() const;
+    };
+    
 }

+ 8 - 1
oxygine/src/oxygine/VisualStyle.cpp

@@ -18,7 +18,7 @@ namespace oxygine
         STDMaterial mat;
         mat._blend = blend_premultiplied_alpha;
         mat._base = STDRenderer::white;
-
+        _flags |= flag_actorHasBounds;
         _mat = mc().cache(mat);
     }
 
@@ -32,6 +32,7 @@ namespace oxygine
     {
         _color = color;
     }
+
     void VisualStyle::setBlendMode(blend_mode mode)
     {
         _blend = mode;
@@ -130,4 +131,10 @@ namespace oxygine
         _mat = mat;
         matChanged();
     }
+
+    void VStyleActor::resetMaterial()
+    {
+        setMaterial(_mat->cloneDefaultShader());
+    }
+
 }

+ 1 - 2
oxygine/src/oxygine/VisualStyle.h

@@ -50,9 +50,8 @@ namespace oxygine
         typedef Property<Color, const Color&, VStyleActor, &VStyleActor::getColor, &VStyleActor::setColor> TweenColor;
         typedef Property<Color, const Color&, VStyleActor, &VStyleActor::getAddColor, &VStyleActor::setAddColor> TweenAddColor;
 
-        bool getBounds(RectF& b) const  override { b = getDestRect();  return true; }
-
         void                    setMaterial(spSTDMaterial mat);
+        void                    resetMaterial();
         spSTDMaterial _mat;
 
     protected:

+ 56 - 11
oxygine/src/oxygine/actor/Actor.cpp

@@ -142,20 +142,25 @@ namespace oxygine
     {
     }
 
-    void Actor::calcBounds2(RectF& bounds, const Transform& transform) const
+    void Actor::calcChildrenBounds(RectF& bounds, const Transform& transform) const
     {
-        if (!(_flags & flag_boundsNoChildren))
+        const Actor* c = getFirstChild().get();
+        while (c)
         {
-            const Actor* c = getFirstChild().get();
-            while (c)
+            if (c->getVisible())
             {
-                if (c->getVisible())
-                {
-                    Transform tr = c->getTransform() * transform;
-                    c->calcBounds2(bounds, tr);
-                }
-                c = c->getNextSibling().get();
+                Transform tr = c->getTransform() * transform;
+                c->calcBounds2(bounds, tr);
             }
+            c = c->getNextSibling().get();
+        }
+    }
+
+    void Actor::calcBounds2(RectF& bounds, const Transform& transform) const
+    {
+        if (!(_flags & flag_boundsNoChildren))
+        {
+            calcChildrenBounds(bounds, transform);
         }
 
         RectF rect;
@@ -177,6 +182,11 @@ namespace oxygine
         return bounds;
     }
 
+    RectF Actor::computeBoundsInParent() const
+    {
+        return computeBounds(getTransform());
+    }
+
     Transform Actor::computeGlobalTransform(Actor* parent) const
     {
         Transform t;
@@ -220,6 +230,18 @@ namespace oxygine
         if (!getTouchChildrenEnabled())
             stream << " touchChildrenEnabled=false";
 
+        if (_flags & flag_actorHasBounds)
+            stream << " flag_actorHasBounds";
+
+        if (_flags & flag_clickableWithZeroAlpha)
+            stream << " flag_clickableWithZeroAlpha";
+
+        if (_flags & flag_cull)
+            stream << " flag_cull";
+
+        if (_flags & flag_anchorInPixels)
+            stream << " flag_anchorInPixels";
+
         if (getAlpha() != 255)
             stream << " alpha=" << (int)getAlpha();
 
@@ -417,7 +439,10 @@ namespace oxygine
         bool touchEvent = TouchEvent::isTouchEvent(event->type);
         if (touchEvent)
         {
-            if (!(_flags & flag_visible) || getAlpha() == 0)
+            if (!(_flags & flag_visible))
+                return;
+
+            if (getAlpha() == 0 && !(_flags & flag_clickableWithZeroAlpha))
                 return;
         }
 
@@ -1087,11 +1112,21 @@ namespace oxygine
         return convert_local2stage(this, pos, stage);
     }
 
+    Vector2 Actor::local2stage(float x, float y, Actor* stage) const
+    {
+        return convert_local2stage(this, Vector2(x, y), stage);
+    }
+
     Vector2 Actor::stage2local(const Vector2& pos, Actor* stage) const
     {
         return convert_stage2local(this, pos, stage);
     }
 
+    Vector2 Actor::stage2local(float x, float y, Actor* stage) const
+    {
+        return convert_stage2local(this, Vector2(x, y), stage);
+    }
+
 
     bool Actor::prepareRender(RenderState& rs, const RenderState& parentRS)
     {
@@ -1158,6 +1193,16 @@ namespace oxygine
         }
     }
 
+    bool Actor::getBounds(RectF& bounds) const
+    {
+        if (_flags & flag_actorHasBounds)
+        {
+            bounds = getDestRect();
+            return true;
+        }
+        return false;
+    }
+
     void Actor::render(const RenderState& parentRS)
     {
         _rdelegate->render(this, parentRS);

+ 20 - 7
oxygine/src/oxygine/actor/Actor.h

@@ -126,6 +126,8 @@ namespace oxygine
         Transform           computeGlobalTransform(Actor* parent = 0) const;
         /**computes actor Bounds rectangle. Iterates children*/
         RectF               computeBounds(const Transform& transform = Transform::getIdentity()) const;
+        /**computes actor Bounds rectangle in Parent Space. Iterates children*/
+        RectF               computeBoundsInParent() const;
 
         /**Sets Anchor. Anchor also called Pivot point. It is "center" for rotation/scale/position. Anchor could be set in Pixels or in Percents (/100).
         Default value is (0,0) - top left corner of Actor
@@ -174,6 +176,12 @@ namespace oxygine
         /**Sets transparency. if alpha is 0 actor and children are completely invisible. Invisible Actor doesn't receive Touch events.*/
         void setAlpha(unsigned char alpha);
 
+        /**By default Actor doesn't has bounds, this will set it to Actor::getDestRect*/
+        void setHasOwnBounds(bool enable = true) { _flags &= ~flag_actorHasBounds; if (enable) _flags |= flag_actorHasBounds; }
+        /**by default actor with Alpha = 0 not clickable*/
+        void setClickableWithZeroAlpha(bool enable) { _flags &= ~flag_clickableWithZeroAlpha; if (enable) _flags |= flag_clickableWithZeroAlpha; }
+
+
         /**Enables/Disables Touch events for Actor.*/
         void setTouchEnabled(bool enabled) { _flags &= ~flag_touchEnabled; if (enabled) _flags |= flag_touchEnabled; }
         /**Enables/Disables Touch events for children of Actor.*/
@@ -248,14 +256,16 @@ namespace oxygine
         virtual void doRender(const RenderState& rs) {}
 
         //converts position in parent space to local space
-        Vector2 parent2local(const Vector2& pos) const;
+        virtual Vector2 parent2local(const Vector2& pos) const;
         //converts local position to parent space
-        Vector2 local2parent(const Vector2& pos = Vector2(0, 0)) const;
+        virtual Vector2 local2parent(const Vector2& pos = Vector2(0, 0)) const;
 
         //converts local position to Stage
         Vector2 local2stage(const Vector2& pos = Vector2(0, 0), Actor* stage = 0) const;
+        Vector2 local2stage(float x, float y, Actor* stage = 0) const;
         //converts global position (position in Stage space) to local space
-        Vector2 stage2local(const Vector2& pos, Actor* stage = 0) const;
+        Vector2 stage2local(const Vector2& pos = Vector2(0, 0), Actor* stage = 0) const;
+        Vector2 stage2local(float x, float y, Actor* stage = 0) const;
 
         typedef Property2Args<float, Vector2, const Vector2&, Actor, &Actor::getPosition, &Actor::setPosition>  TweenPosition;
         typedef Property<float, float, Actor, &Actor::getX, &Actor::setX>                                       TweenX;
@@ -288,7 +298,7 @@ namespace oxygine
         /**recursively removes all event listeners and added tweens*/
         void clean();
 
-        virtual bool getBounds(RectF&) const { return false; }
+        virtual bool getBounds(RectF&) const;
 
     protected:
 
@@ -302,12 +312,13 @@ namespace oxygine
         virtual void transformUpdated();
 
         virtual void calcBounds2(RectF& bounds, const Transform& transform) const;
+        void calcChildrenBounds(RectF& bounds, const Transform& transform) const;
 
 
         typedef intrusive_list<spActor> children;
         static void setParent(Actor* actor, Actor* parent);
         static children& getChildren(spActor& actor) { return actor->_children; }
-        static unsigned short& _getFlags(Actor* actor) { return actor->_flags; }
+        static unsigned int& _getFlags(Actor* actor) { return actor->_flags; }
 
         void _onGlobalTouchUpEvent(Event*);
         void _onGlobalTouchUpEvent1(Event*);
@@ -347,11 +358,13 @@ namespace oxygine
             flag_cull                   = 1 << 6,
             flag_fastTransform          = 1 << 7,
             flag_boundsNoChildren       = 1 << 8,
-            flag_reserved               = 1 << 9,
+            flag_actorHasBounds         = 1 << 9,
+            flag_clickableWithZeroAlpha = 1 << 10,
+            flag_reserved               = 1 << 11,
             flag_last                   = flag_reserved
         };
 
-        mutable unsigned short _flags;
+        mutable unsigned int _flags;
         unsigned char   _alpha;
         char    _extendedIsOn;
 

+ 18 - 1
oxygine/src/oxygine/actor/Box9Sprite.cpp

@@ -46,6 +46,23 @@ namespace oxygine
             Sprite::setResAnim(DebugActor::resSystem->getResAnim("btn"));
     }
 
+    oxygine::RectF Box9Sprite::getInnerArea() const
+    {
+        if (!_prepared)
+            prepare();
+
+        RectF rect;
+        rect.pos = Vector2(_guideX[0], _guideY[0]);
+        
+        Vector2 rb;
+        rb.x = getWidth() - (_frame.getWidth() - _guideX[1]);
+        rb.y = getHeight() - (_frame.getHeight() - _guideY[1]);
+
+        rect.setSize(rb - rect.pos);
+
+        return rect;                             
+    }
+
     void Box9Sprite::setVerticalMode(StretchMode m)
     {
         _vertMode = m;
@@ -129,7 +146,7 @@ namespace oxygine
         return Actor::isOn(localPosition, localScale);
     }
 
-    void Box9Sprite::prepare()
+    void Box9Sprite::prepare() const
     {
         _guidesX.resize(4);
         _guidesY.resize(4);

+ 15 - 8
oxygine/src/oxygine/actor/Box9Sprite.h

@@ -22,6 +22,13 @@ namespace oxygine
 
         StretchMode getVerticalMode() const {return _vertMode;}
         StretchMode getHorizontalMode() const {return _horzMode;}
+        float       getGuideX1() const { return _guideX[0]; }
+        float       getGuideX2() const { return _guideX[1]; }
+        float       getGuideY1() const { return _guideY[0]; }
+        float       getGuideY2() const { return _guideY[1]; }
+
+
+        RectF       getInnerArea() const;
 
         void setVerticalMode(StretchMode m);
         void setHorizontalMode(StretchMode m);
@@ -47,20 +54,20 @@ namespace oxygine
         void animFrameChanged(const AnimationFrame& f) override;
         void changeAnimFrame(const AnimationFrame& f) override;
 
-        bool _prepared;
+        mutable bool _prepared;
 
         StretchMode _vertMode;
         StretchMode _horzMode;
 
-        float _guideX[2];
-        float _guideY[2];
+        mutable float _guideX[2];
+        mutable float _guideY[2];
 
-        std::vector<float> _guidesX;
-        std::vector<float> _guidesY;
-        std::vector<float> _pointsX;
-        std::vector<float> _pointsY;
+        mutable std::vector<float> _guidesX;
+        mutable std::vector<float> _guidesY;
+        mutable std::vector<float> _pointsX;
+        mutable std::vector<float> _pointsY;
 
-        void prepare();
+        void prepare() const;
 
         void doRender(const RenderState&) override;
     };

+ 1 - 1
oxygine/src/oxygine/actor/DebugActor.cpp

@@ -493,7 +493,7 @@ namespace oxygine
         actor = actor->getParent();
         while (actor)
         {
-            logs::messageln("parent: %s", actor->getName().c_str());
+            logs::messageln("parent: %s (%d)", actor->getName().c_str(), actor->getObjectID());
             actor = actor->getParent();
         }
     }

+ 13 - 0
oxygine/src/oxygine/closure/closure_impl.h

@@ -97,6 +97,19 @@ struct Closure<R(PARAM_TYPE_LIST)>: public detail::CLOSURE_NUM::ClosureBase<R PA
 	  this->p_proxy = callfunction;
   }
 
+  /*
+  Closure(const std::function< void(void)>& f_)
+  {
+      auto f = [f_](Event*) {
+          f_();
+      };
+      
+      this->p_function = std::make_shared< std::function<R(PARAM_TYPE_LIST)> >(f);
+      this->p_this = this->p_function.get();
+      this->p_proxy = callfunction;
+  }
+  */
+
   template<class T>
   Closure(T f)//lambda support
   {

+ 4 - 2
oxygine/src/oxygine/core/Object.cpp

@@ -115,7 +115,7 @@ namespace oxygine
     {
         __addToDebugList(this);
 
-        __userData = src.__userData;
+        __userData64 = src.__userData64;
 #if DYNAMIC_OBJECT_NAME
         if (src.__name)
             setName(*src.__name);
@@ -140,8 +140,10 @@ namespace oxygine
 #endif
     }
 
-    ObjectBase::ObjectBase(bool assignID): __userData(0), __id(0)
+    ObjectBase::ObjectBase(bool assignID): __id(0)
     {
+        __userData64 = 0;
+
 #if DYNAMIC_OBJECT_NAME
         __name = 0;
 #endif

+ 18 - 2
oxygine/src/oxygine/core/Object.h

@@ -25,6 +25,8 @@ namespace oxygine
 
         const std::string&  getName() const;
         const void*         getUserData() const {return __userData;}
+        uint64              getUserData64() const { return __userData64; }
+        int                 getUserData32() const { return __userData32; }
         int                 getObjectID()const {return __id;}
         bool                isName(const std::string& name) const;
         bool                isName(const char* name) const;
@@ -32,7 +34,14 @@ namespace oxygine
 
 
         void setName(const std::string& name);
-        void setUserData(const void* data) {__userData = data;}
+
+        /**void*, uin64 and int userData is UNION!*/
+        void setUserData(const void* data) { __userData64 = 0; __userData = data; }
+        /**void*, uin64 and int userData is UNION!*/
+        void setUserData64(uint64 data) { __userData64 = data; }
+        /**void*, uin64 and int userData is UNION!*/
+        void setUserData32(int data) { __userData32 = data; }
+
 
         void dumpObject() const;
 
@@ -67,7 +76,14 @@ namespace oxygine
         void __freeName() const;
 
         int __id;
-        const void* __userData;
+
+        union
+        {
+            const void* __userData;
+            uint64 __userData64;
+            int    __userData32;
+        };
+
 
 
 #ifdef OXYGINE_DEBUG_TRACE_LEAKS

+ 21 - 1
oxygine/src/oxygine/math/Matrix.h

@@ -1,5 +1,6 @@
 #pragma once
 #include "../oxygine-include.h"
+#include "Vector2.h"
 #include "Vector3.h"
 #include "Vector4.h"
 #include <algorithm>
@@ -11,6 +12,7 @@ namespace oxygine
     template <class T>
     class MatrixT
     {
+        typedef VectorT2<T> vector2;
         typedef VectorT3<T> vector3;
         typedef VectorT4<T> vector4;
         typedef MatrixT<T> matrix;
@@ -41,6 +43,7 @@ namespace oxygine
         MatrixT inversed() const;
         MatrixT transposed() const;
 
+        vector2 transform(const vector2&)const;
         vector3 transformVec3(const vector3&)const;
         vector4 transformVec4(const vector4&)const;
         vector3 getTranslation()const;
@@ -74,6 +77,7 @@ namespace oxygine
 
         static MatrixT& orthoLH(MatrixT& out, T width, T height, T zNear, T zFar);
 
+        static vector2& transformVec2(vector2& out, const vector2& in, const MatrixT& mat);
         static vector3& transformVec3(vector3& out, const vector3& in, const MatrixT& mat);
         static vector4& transformVec4(vector4& out, const vector4& in, const MatrixT& mat);
 
@@ -203,6 +207,13 @@ namespace oxygine
         *this = sm * rm * tm;
     }
 
+    template <class T>
+    VectorT2<T> MatrixT<T>::transform(const vector2& v)const
+    {
+        vector2 out;
+        transformVec2(out, v, *this);
+        return out;
+    }
 
     template <class T>
     VectorT3<T> MatrixT<T>::transformVec3(const vector3& v)const
@@ -448,7 +459,7 @@ namespace oxygine
 
         T det = mat.m11 * t1 - mat.m12 * t2 + mat.m13 * t3 - mat.m14 * t4;
 
-        if (scalar::abs(det) < T(0.0001))
+        if (scalar::abs(det) < T(0.00000001))
         {
             out.identity();
             return out;
@@ -516,6 +527,15 @@ namespace oxygine
         return out;
     }
 
+    template <class T>
+    inline VectorT2<T>& MatrixT<T>::transformVec2(VectorT2<T>& out, const vector2& in, const MatrixT& mat)
+    {
+        out = vector2(
+                  in.x * mat.m11 + in.y * mat.m21 + mat.m41,
+                  in.x * mat.m12 + in.y * mat.m22 + mat.m42);
+        return out;
+    }
+
     template <class T>
     inline VectorT4<T>& MatrixT<T>::transformVec4(VectorT4<T>& out, const vector4& in, const MatrixT& mat)
     {

+ 1 - 0
oxygine/src/oxygine/math/Rect.h

@@ -140,6 +140,7 @@ namespace oxygine
         void moveBottom(T v) {size.y = v - pos.y;}
 
         void expand(const point2& v1, const point2& v2) {pos -= v1; size += v1 + v2;}
+        void expand2(const point2& v) { expand(v, v); }
 
         template<class R>
         RectT operator * (const VectorT2<R>& v) const

+ 1 - 0
oxygine/src/oxygine/math/Vector3.h

@@ -45,6 +45,7 @@ namespace oxygine
 
         void clamp(const VectorT3& min, const VectorT3& max);
         T length() const;
+        T sqlength() const { return dot(*this); }
         T dot(const VectorT3& p)  const;
 
         inline T& operator[](int i) {return m[i];}

+ 1 - 1
oxygine/src/oxygine/res/Resources.cpp

@@ -335,7 +335,7 @@ namespace oxygine
         for (resourcesMap::const_iterator i = _resourcesMap.cbegin(); i != _resourcesMap.cend(); ++i)
         {
             spResource res = i->second;
-            logs::message("%s\n", res->getName().c_str());
+            logs::messageln("%s", res->getName().c_str());
         }
 
         /*

+ 3 - 1
oxygine/src/oxygine/tween/Tween.cpp

@@ -10,6 +10,7 @@ namespace oxygine
 		_loopsDone(0),
         _percent(0),
         _status(status_not_started),
+        _disabledStatusDone(false),
         _elapsed(0), _twoSides(false), _ease(ease_linear), _detach(false), _delay(0), _client(0), _globalEase(ease_linear)
     {
 
@@ -181,7 +182,8 @@ namespace oxygine
                         else
                             _percent = 1;
 
-                        _status = status_done;
+                        if (!_disabledStatusDone)
+                            _status = status_done;
                     }
                 }
                 _update(*_client, us);

+ 5 - 0
oxygine/src/oxygine/tween/Tween.h

@@ -151,6 +151,10 @@ namespace oxygine
         /**set callback when tween done. Doesn't allocate memory. faster than addDoneCallback*/
         void setDoneCallback(const EventCallback& cb);
 
+
+        /** tween will freeze on 100% and never complete  */
+        void setDisabledStatusDone(bool disabled) { _disabledStatusDone = disabled; }
+
     protected:
         void done(Actor&, const UpdateState& us);
 
@@ -178,6 +182,7 @@ namespace oxygine
         EASE _ease;
         EASE _globalEase;
         bool _twoSides;
+        bool _disabledStatusDone;
 
         float _percent;
         bool _detach;

+ 15 - 4
oxygine/src/oxygine/utils/stringUtils.cpp

@@ -284,7 +284,7 @@ namespace oxygine
             return L"";
 
 
-#ifdef OXYGINE_SDL
+#if defined(OXYGINE_SDL) && !defined(EMSCRIPTEN)
         wchar_t* s = 0;
         if (sizeof(wchar_t) == 2)
             s = (wchar_t*)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", utf8str, n);
@@ -296,7 +296,12 @@ namespace oxygine
         SDL_free(s);
         return str;
 #else
-        logs::warning("utf8tows not implemented correctly!");
+        static bool warned = false;
+        if (warned)
+        {
+            warned = true;
+            logs::warning("utf8tows not implemented correctly!");
+        }
 
         std::wstring ws;
         ws.reserve(n);
@@ -323,7 +328,7 @@ namespace oxygine
         if (n == 1)
             return "";
 
-#ifdef OXYGINE_SDL
+#if defined(OXYGINE_SDL) && !defined(EMSCRIPTEN)
         char*  s = 0;
         if (sizeof(wchar_t) == 2)
             s = SDL_iconv_string("UTF-8", "UCS-2-INTERNAL", (const char*)wstr, n * sizeof(wchar_t));
@@ -334,7 +339,13 @@ namespace oxygine
         SDL_free(s);
         return str;
 #else
-        logs::warning("utf8tows not implemented correctly!");
+        static bool warned = false;
+        if (warned)
+        {
+            warned = true;
+            logs::warning("utf8tows not implemented correctly!");
+        }
+
         std::string s;
         int i = 0;
         while (wchar_t t = wstr[i])

+ 1 - 1
tools/others/gen_templates.py

@@ -15,7 +15,7 @@ def gen(path, project=""):
     # projs = ("macosx", )
     #projs = ("win32", )
     projs = ("cmake", )
-    #projs = ("android", )
+    projs = ("android", )
     #projs = ("win32", )
     #projs = ("macosx", )
     # projs = ("emscripten", )

+ 0 - 2
tools/templates/proj.android/AndroidManifest.xml

@@ -25,8 +25,6 @@
         </activity>
     </application>
 
-    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
-
     <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
     <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  

+ 16 - 5
tools/templates/proj.android/build.gradle

@@ -1,15 +1,23 @@
 buildscript {
     repositories {
-        mavenLocal()
+    	google()
+        mavenLocal()        
         mavenCentral()
-        jcenter()
-        google()
+        jcenter()        
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.2.0'
+    }
+}
+
+allprojects {
+    repositories {
+        google()
+        jcenter()
     }
 }
 
+
 apply plugin: 'com.android.application'
 
 
@@ -21,7 +29,7 @@ dependencies {
 
 android {
         
-    compileSdkVersion 23
+    compileSdkVersion 26
 
 
     sourceSets {
@@ -35,6 +43,9 @@ android {
     }
 
     defaultConfig {
+    	minSdkVersion 19
+        targetSdkVersion 26
+
         ndk {
             abiFilters 'armeabi-v7a'//, 'arm64-v8a'
         }

+ 1 - 1
tools/templates/proj.android/jni/Application.mk

@@ -1,4 +1,4 @@
-APP_STL := gnustl_static
+APP_STL := c++_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
 APP_CPPFLAGS += -std=c++11

+ 1 - 1
tools/templates/proj.cmake/CMakeLists.txt

@@ -21,6 +21,6 @@ endif(WIN32)
 
 if (EMSCRIPTEN)
 	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 -s FORCE_FILESYSTEM=1")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s WASM=0 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -s TOTAL_MEMORY=50331648 -s FORCE_FILESYSTEM=1")
 	em_link_pre_js(${PROJECT}  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
 endif(EMSCRIPTEN)

+ 4 - 0
tools/templates/proj.ios/${PROJECT}_ios.xcodeproj/project.pbxproj

@@ -25,6 +25,7 @@
 		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
 		AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */; };
 		4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F7EF5AE200623DE004089D6 /* Metal.framework */; };
+		4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */; };
 
 		
 ${PBXBuildFile}
@@ -81,6 +82,7 @@ ${PBXBuildFile}
 		04998EF617F8B6F3003441C3 /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjpeg.a; path = "${OXYGINE}/oxygine/third_party/ios/libraries/libjpeg.a"; sourceTree = "<group>"; };
 		04E9AD3E1876FE84006A7317 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name =Images.xcassets; path = ${PROJECT}/Images.xcassets; sourceTree = "<group>"; };
 		4F7EF5AE200623DE004089D6 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
+		4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; };
 
 
 ${PBXFileReference}
@@ -92,6 +94,7 @@ ${PBXFileReference}
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				4F8012E521454FEA00FDBA22 /* CoreBluetooth.framework in Frameworks */,
 				4F7EF5AF200623DE004089D6 /* Metal.framework in Frameworks */,
 				AD18619B1D8EC97A0043AFA3 /* AVFoundation.framework in Frameworks */,
 				9223FE7F1C2D913D000B1FDA /* GameController.framework in Frameworks */,
@@ -151,6 +154,7 @@ ${PBXFileReference}
 		04998CEE17F8A933003441C3 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				4F8012E021454FEA00FDBA22 /* CoreBluetooth.framework */,
 				4F7EF5AE200623DE004089D6 /* Metal.framework */,
 				AD18619A1D8EC97A0043AFA3 /* AVFoundation.framework */,
 				9223FE7E1C2D913D000B1FDA /* GameController.framework */,