François Gautrais před 7 roky
rodič
revize
e40938e3fa
70 změnil soubory, kde provedl 1259 přidání a 2257 odebrání
  1. 9 10
      app/app.iml
  2. 0 2
      app/build.gradle
  3. 4 0
      app/src/main/AndroidManifest.xml
  4. binární
      app/src/main/assets/a.jpg
  5. 0 61
      app/src/main/assets/a_obj
  6. 0 26
      app/src/main/assets/a_res
  7. binární
      app/src/main/assets/a_texture.jpg
  8. binární
      app/src/main/assets/b.jpg
  9. 0 61
      app/src/main/assets/b_obj
  10. 0 26
      app/src/main/assets/b_res
  11. binární
      app/src/main/assets/b_texture.jpg
  12. binární
      app/src/main/assets/c.jpg
  13. 0 61
      app/src/main/assets/c_obj
  14. 0 26
      app/src/main/assets/c_res
  15. binární
      app/src/main/assets/c_texture.jpg
  16. 0 12
      app/src/main/assets/camera.mtl
  17. binární
      app/src/main/assets/d.jpg
  18. 0 61
      app/src/main/assets/d_obj
  19. 0 25
      app/src/main/assets/d_res
  20. binární
      app/src/main/assets/d_texture.jpg
  21. binární
      app/src/main/assets/e.jpg
  22. 0 61
      app/src/main/assets/e_obj
  23. 0 25
      app/src/main/assets/e_res
  24. binární
      app/src/main/assets/e_texture.jpg
  25. 0 693
      app/src/main/assets/f_obj
  26. 0 25
      app/src/main/assets/f_res
  27. binární
      app/src/main/assets/f_video
  28. binární
      app/src/main/assets/font.ttf
  29. 75 169
      app/src/main/assets/game_medium
  30. 0 693
      app/src/main/assets/intro_obj
  31. 0 25
      app/src/main/assets/intro_res
  32. binární
      app/src/main/assets/intro_video
  33. binární
      app/src/main/assets/map
  34. 0 7
      app/src/main/assets/mtl_a_mtl
  35. 0 7
      app/src/main/assets/mtl_b_mtl
  36. 0 7
      app/src/main/assets/mtl_c_mtl
  37. 0 7
      app/src/main/assets/mtl_d_mtl
  38. 0 7
      app/src/main/assets/mtl_e_mtl
  39. 1 1
      app/src/main/java/app/mar/activities/ARActivity.java
  40. 6 1
      app/src/main/java/app/mar/activities/ChallengeDriver.java
  41. 84 7
      app/src/main/java/app/mar/activities/ChallengeFragment.java
  42. 0 1
      app/src/main/java/app/mar/activities/CreditsActivity.java
  43. 104 22
      app/src/main/java/app/mar/activities/HostActivity.java
  44. 13 5
      app/src/main/java/app/mar/activities/MediaViewerAcitvity.java
  45. 7 0
      app/src/main/java/app/mar/activities/MenuActivity.java
  46. 2 0
      app/src/main/java/app/mar/activities/PermissionActivity.java
  47. 4 0
      app/src/main/java/app/mar/activities/QCMFragment.java
  48. 107 3
      app/src/main/java/app/mar/activities/QRCodeFragment.java
  49. 2 0
      app/src/main/java/app/mar/activities/QuestionFragment.java
  50. 1 1
      app/src/main/java/app/mar/activities/ResourceListActivity.java
  51. 229 0
      app/src/main/java/app/mar/activities/TestVideoActivity.java
  52. 66 22
      app/src/main/java/app/mar/game/Bomb.java
  53. 146 0
      app/src/main/java/app/mar/game/Event.java
  54. 54 16
      app/src/main/java/app/mar/game/Game.java
  55. 32 15
      app/src/main/java/app/mar/game/Resource.java
  56. 12 1
      app/src/main/java/app/mar/game/ResourceManager.java
  57. 75 1
      app/src/main/java/app/mar/game/Stage.java
  58. 1 1
      app/src/main/java/app/mar/game/challenges/ARTreasure.java
  59. 80 3
      app/src/main/java/app/mar/game/challenges/Challenge.java
  60. 2 15
      app/src/main/java/app/mar/game/challenges/QRCodeTreasure.java
  61. 1 1
      app/src/main/java/app/mar/game/challenges/Question.java
  62. 6 2
      app/src/main/java/app/mar/game/challenges/Treasure.java
  63. 1 1
      app/src/main/java/app/mar/ui/MediaView.java
  64. 4 1
      app/src/main/java/app/mar/utils/AndroidResources.java
  65. 28 31
      app/src/main/res/layout/activity_media.xml
  66. 83 0
      app/src/main/res/layout/activity_test_video.xml
  67. 1 1
      app/src/main/res/layout/fragment_qcm.xml
  68. 17 7
      app/src/main/res/layout/fragment_qrcode.xml
  69. 1 1
      app/src/main/res/layout/fragment_question.xml
  70. 1 0
      app/src/main/res/values/strings.xml

+ 9 - 10
app/app.iml

@@ -70,13 +70,6 @@
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
@@ -84,6 +77,14 @@
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/applicationId" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/build-info" />
@@ -116,8 +117,8 @@
     <orderEntry type="jdk" jdkName="Android API 27 Platform" jdkType="Android SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-solver:1.0.2@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:transition-27.1.0" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:support-v4-27.1.1" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:transition-27.1.0" level="project" />
     <orderEntry type="library" name="Gradle: com.journeyapps:zxing-android-embedded-3.6.0" level="project" />
     <orderEntry type="library" name="Gradle: android.arch.lifecycle:common:1.1.0@jar" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:support-fragment-27.1.1" level="project" />
@@ -139,7 +140,5 @@
     <orderEntry type="library" name="Gradle: com.android.support:support-core-utils-27.1.1" level="project" />
     <orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime-1.1.0" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:gridlayout-v7-27.1.0" level="project" />
-    <orderEntry type="module" module-name="feature" />
-    <orderEntry type="module" module-name="base" />
   </component>
 </module>

+ 0 - 2
app/build.gradle

@@ -25,8 +25,6 @@ android {
 }
 
 dependencies {
-    implementation project(':feature')
-    implementation project(':base')
     implementation 'com.android.support.constraint:constraint-layout:1.0.2'
     implementation 'com.android.support:design:27.1.0'
     implementation 'com.android.support:gridlayout-v7:27.1.0'

+ 4 - 0
app/src/main/AndroidManifest.xml

@@ -59,6 +59,10 @@
         <activity
             android:name=".HostActivity"
             android:label="@string/title_activity_host"
+            android:theme="@style/AppTheme.NoActionBar" />
+        <activity
+            android:name=".TestVideoActivity"
+            android:label="@string/title_activity_test_video"
             android:theme="@style/AppTheme.NoActionBar"></activity>
     </application>
 

binární
app/src/main/assets/a.jpg


+ 0 - 61
app/src/main/assets/a_obj

@@ -1,61 +0,0 @@
-mtllib mtl_a_mtl
-g default
-v -2.000000 -0.771651 1.286538
-v 2.000000 -0.771651 1.286538
-v -2.000000 -0.728349 1.311538
-v 2.000000 -0.728349 1.311538
-v -2.000000 0.771651 -1.286538
-v 2.000000 0.771651 -1.286538
-v -2.000000 0.728349 -1.311538
-v 2.000000 0.728349 -1.311538
-vt 0.375000 0.000000
-vt 0.625000 0.000000
-vt 0.375000 0.250000
-vt 0.625000 0.250000
-vt 0.375000 0.500000
-vt 0.625000 0.500000
-vt 0.375000 0.750000
-vt 0.625000 0.750000
-vt 0.375000 1.000000
-vt 0.625000 1.000000
-vt 0.875000 0.000000
-vt 0.875000 0.250000
-vt 0.125000 0.000000
-vt 0.125000 0.250000
-vt -0.004496 0.998008
-vt -0.004496 0.001992
-vt 1.007949 0.001992
-vt 1.007949 0.998008
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-s off
-g pCube1
-usemtl initialShadingGroup
-f 1/1/1 2/2/2 4/4/3 3/3/4
-f 3/15/5 4/16/6 6/17/7 5/18/8
-f 5/5/9 6/6/10 8/8/11 7/7/12
-f 7/7/13 8/8/14 2/10/15 1/9/16
-f 2/2/17 8/11/18 6/12/19 4/4/20
-f 7/13/21 1/1/22 3/3/23 5/14/24

+ 0 - 26
app/src/main/assets/a_res

@@ -1,26 +0,0 @@
-{
-	"comment" : "Il faudrait trouver l'endroit que montre cette photo ....\n",
-	"name" : "a",
-	"position" : 
-	[
-		0.0,
-		0.0,
-		0.0
-	],
-	"rotation" : 
-	[
-		0.0,
-		0.0,
-		0.0
-	],
-	"scale" : 
-	[
-		1.0,
-		1.0,
-		1.0
-	],
-	"stage" : 0,
-	"title" : "Une photo ... ",
-	"type" : "Image",
-	"display" : true
-}

binární
app/src/main/assets/a_texture.jpg


binární
app/src/main/assets/b.jpg


+ 0 - 61
app/src/main/assets/b_obj

@@ -1,61 +0,0 @@
-mtllib mtl_b_mtl
-g default
-v -2.000000 -0.771651 1.286538
-v 2.000000 -0.771651 1.286538
-v -2.000000 -0.728349 1.311538
-v 2.000000 -0.728349 1.311538
-v -2.000000 0.771651 -1.286538
-v 2.000000 0.771651 -1.286538
-v -2.000000 0.728349 -1.311538
-v 2.000000 0.728349 -1.311538
-vt 0.375000 0.000000
-vt 0.625000 0.000000
-vt 0.375000 0.250000
-vt 0.625000 0.250000
-vt 0.375000 0.500000
-vt 0.625000 0.500000
-vt 0.375000 0.750000
-vt 0.625000 0.750000
-vt 0.375000 1.000000
-vt 0.625000 1.000000
-vt 0.875000 0.000000
-vt 0.875000 0.250000
-vt 0.125000 0.000000
-vt 0.125000 0.250000
-vt -0.004496 0.998008
-vt -0.004496 0.001992
-vt 1.007949 0.001992
-vt 1.007949 0.998008
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-s off
-g pCube1
-usemtl initialShadingGroup
-f 1/1/1 2/2/2 4/4/3 3/3/4
-f 3/15/5 4/16/6 6/17/7 5/18/8
-f 5/5/9 6/6/10 8/8/11 7/7/12
-f 7/7/13 8/8/14 2/10/15 1/9/16
-f 2/2/17 8/11/18 6/12/19 4/4/20
-f 7/13/21 1/1/22 3/3/23 5/14/24

+ 0 - 26
app/src/main/assets/b_res

@@ -1,26 +0,0 @@
-{
-	"comment" : "Il faudrait encore trouver l'endroit que montre cette photo ....",
-	"name" : "b",
-	"position" : 
-	[
-		0.0,
-		0.0,
-		0.0
-	],
-	"rotation" : 
-	[
-		0.0,
-		0.0,
-		0.0
-	],
-	"scale" : 
-	[
-		1.0,
-		1.0,
-		1.0
-	],
-	"stage" : 1,
-	"title" : "Une autre photo",
-	"type" : "Image",
-	"display" : true
-}

binární
app/src/main/assets/b_texture.jpg


binární
app/src/main/assets/c.jpg


+ 0 - 61
app/src/main/assets/c_obj

@@ -1,61 +0,0 @@
-mtllib mtl_c_mtl
-g default
-v -2.000000 -0.771651 1.286538
-v 2.000000 -0.771651 1.286538
-v -2.000000 -0.728349 1.311538
-v 2.000000 -0.728349 1.311538
-v -2.000000 0.771651 -1.286538
-v 2.000000 0.771651 -1.286538
-v -2.000000 0.728349 -1.311538
-v 2.000000 0.728349 -1.311538
-vt 0.375000 0.000000
-vt 0.625000 0.000000
-vt 0.375000 0.250000
-vt 0.625000 0.250000
-vt 0.375000 0.500000
-vt 0.625000 0.500000
-vt 0.375000 0.750000
-vt 0.625000 0.750000
-vt 0.375000 1.000000
-vt 0.625000 1.000000
-vt 0.875000 0.000000
-vt 0.875000 0.250000
-vt 0.125000 0.000000
-vt 0.125000 0.250000
-vt -0.004496 0.998008
-vt -0.004496 0.001992
-vt 1.007949 0.001992
-vt 1.007949 0.998008
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-s off
-g pCube1
-usemtl initialShadingGroup
-f 1/1/1 2/2/2 4/4/3 3/3/4
-f 3/15/5 4/16/6 6/17/7 5/18/8
-f 5/5/9 6/6/10 8/8/11 7/7/12
-f 7/7/13 8/8/14 2/10/15 1/9/16
-f 2/2/17 8/11/18 6/12/19 4/4/20
-f 7/13/21 1/1/22 3/3/23 5/14/24

+ 0 - 26
app/src/main/assets/c_res

@@ -1,26 +0,0 @@
-{
-	"comment" : "Faut encore que je le redise ?\nCa devient chiant l\u00e0 non ?",
-	"name" : "c",
-	"position" : 
-	[
-		0.0,
-		0.0,
-		0.0
-	],
-	"rotation" : 
-	[
-		0.0,
-		0.0,
-		0.0
-	],
-	"scale" : 
-	[
-		1.0,
-		1.0,
-		1.0
-	],
-	"stage" : 2,
-	"title" : "Putin uneautre photo",
-	"type" : "Image",
-	"display" : true
-}

binární
app/src/main/assets/c_texture.jpg


+ 0 - 12
app/src/main/assets/camera.mtl

@@ -1,12 +0,0 @@
-newmtl initialShadingGroup
-illum 4
-Kd 0.50 0.50 0.50
-Ka 0.00 0.00 0.00
-Tf 1.00 1.00 1.00
-Ni 1.00
-newmtl lambert2SG
-illum 4
-Kd 0.27 0.27 0.27
-Ka 0.00 0.00 0.00
-Tf 1.00 1.00 1.00
-Ni 1.00

binární
app/src/main/assets/d.jpg


+ 0 - 61
app/src/main/assets/d_obj

@@ -1,61 +0,0 @@
-mtllib mtl_d_mtl
-g default
-v -2.000000 -0.771651 1.286538
-v 2.000000 -0.771651 1.286538
-v -2.000000 -0.728349 1.311538
-v 2.000000 -0.728349 1.311538
-v -2.000000 0.771651 -1.286538
-v 2.000000 0.771651 -1.286538
-v -2.000000 0.728349 -1.311538
-v 2.000000 0.728349 -1.311538
-vt 0.375000 0.000000
-vt 0.625000 0.000000
-vt 0.375000 0.250000
-vt 0.625000 0.250000
-vt 0.375000 0.500000
-vt 0.625000 0.500000
-vt 0.375000 0.750000
-vt 0.625000 0.750000
-vt 0.375000 1.000000
-vt 0.625000 1.000000
-vt 0.875000 0.000000
-vt 0.875000 0.250000
-vt 0.125000 0.000000
-vt 0.125000 0.250000
-vt -0.004496 0.998008
-vt -0.004496 0.001992
-vt 1.007949 0.001992
-vt 1.007949 0.998008
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-s off
-g pCube1
-usemtl initialShadingGroup
-f 1/1/1 2/2/2 4/4/3 3/3/4
-f 3/15/5 4/16/6 6/17/7 5/18/8
-f 5/5/9 6/6/10 8/8/11 7/7/12
-f 7/7/13 8/8/14 2/10/15 1/9/16
-f 2/2/17 8/11/18 6/12/19 4/4/20
-f 7/13/21 1/1/22 3/3/23 5/14/24

+ 0 - 25
app/src/main/assets/d_res

@@ -1,25 +0,0 @@
-{
-	"comment" : "Tu vois ce qu'il te reste \u00e0 faire...",
-	"name" : "d",
-	"position" : 
-	[
-		0.0,
-		0.0,
-		0.0
-	],
-	"rotation" : 
-	[
-		0.0,
-		0.0,
-		0.0
-	],
-	"scale" : 
-	[
-		1.0,
-		1.0,
-		1.0
-	],
-	"stage" : 3,
-	"title" : "Devine ... une photo !",
-	"type" : "Image"
-}

binární
app/src/main/assets/d_texture.jpg


binární
app/src/main/assets/e.jpg


+ 0 - 61
app/src/main/assets/e_obj

@@ -1,61 +0,0 @@
-mtllib mtl_e_mtl
-g default
-v -2.000000 -0.771651 1.286538
-v 2.000000 -0.771651 1.286538
-v -2.000000 -0.728349 1.311538
-v 2.000000 -0.728349 1.311538
-v -2.000000 0.771651 -1.286538
-v 2.000000 0.771651 -1.286538
-v -2.000000 0.728349 -1.311538
-v 2.000000 0.728349 -1.311538
-vt 0.375000 0.000000
-vt 0.625000 0.000000
-vt 0.375000 0.250000
-vt 0.625000 0.250000
-vt 0.375000 0.500000
-vt 0.625000 0.500000
-vt 0.375000 0.750000
-vt 0.625000 0.750000
-vt 0.375000 1.000000
-vt 0.625000 1.000000
-vt 0.875000 0.000000
-vt 0.875000 0.250000
-vt 0.125000 0.000000
-vt 0.125000 0.250000
-vt -0.004496 0.998008
-vt -0.004496 0.001992
-vt 1.007949 0.001992
-vt 1.007949 0.998008
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 -0.500000 0.866025
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.866025 0.500000
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 0.500000 -0.866025
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 0.000000 -0.866025 -0.500000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-s off
-g pCube1
-usemtl initialShadingGroup
-f 1/1/1 2/2/2 4/4/3 3/3/4
-f 3/15/5 4/16/6 6/17/7 5/18/8
-f 5/5/9 6/6/10 8/8/11 7/7/12
-f 7/7/13 8/8/14 2/10/15 1/9/16
-f 2/2/17 8/11/18 6/12/19 4/4/20
-f 7/13/21 1/1/22 3/3/23 5/14/24

+ 0 - 25
app/src/main/assets/e_res

@@ -1,25 +0,0 @@
-{
-	"comment" : "No comments...",
-	"name" : "e",
-	"position" : 
-	[
-		0.0,
-		0.0,
-		0.0
-	],
-	"rotation" : 
-	[
-		0.0,
-		0.0,
-		0.0
-	],
-	"scale" : 
-	[
-		1.0,
-		1.0,
-		1.0
-	],
-	"stage" : 4,
-	"title" : "Pour changer ...",
-	"type" : "Image"
-}

binární
app/src/main/assets/e_texture.jpg


+ 0 - 693
app/src/main/assets/f_obj

@@ -1,693 +0,0 @@
-# This file uses centimeters as units for non-parametric coordinates.
-
-mtllib camera.mtl
-g default
-v -0.519305 1.372979 2.290038
-v 0.519305 1.372979 2.290038
-v -0.519305 2.865714 2.290038
-v 0.519305 2.865714 2.290038
-v -0.519305 2.865714 -1.492483
-v 0.519305 2.865714 -1.492483
-v -0.519305 1.372979 -1.492483
-v 0.519305 1.372979 -1.492483
-v -0.138836 2.881623 -0.297781
-v -0.138836 3.038964 -0.606582
-v -0.138836 3.284030 -0.851648
-v -0.138836 3.592831 -1.008990
-v -0.138836 3.935140 -1.063206
-v -0.138836 4.277448 -1.008990
-v -0.138836 4.586249 -0.851648
-v -0.138836 4.831315 -0.606582
-v -0.138836 4.988657 -0.297781
-v -0.138836 5.042872 0.044527
-v -0.138836 4.988657 0.386835
-v -0.138836 4.831315 0.695636
-v -0.138836 4.586249 0.940702
-v -0.138836 4.277448 1.098044
-v -0.138836 3.935140 1.152260
-v -0.138836 3.592831 1.098044
-v -0.138836 3.284031 0.940702
-v -0.138836 3.038965 0.695636
-v -0.138836 2.881623 0.386835
-v -0.138836 2.827407 0.044527
-v 0.219140 2.881623 -0.297781
-v 0.219140 3.038964 -0.606582
-v 0.219140 3.284030 -0.851648
-v 0.219140 3.592831 -1.008990
-v 0.219140 3.935140 -1.063206
-v 0.219140 4.277448 -1.008990
-v 0.219140 4.586249 -0.851648
-v 0.219140 4.831315 -0.606582
-v 0.219140 4.988657 -0.297781
-v 0.219140 5.042872 0.044527
-v 0.219140 4.988657 0.386835
-v 0.219140 4.831315 0.695636
-v 0.219140 4.586249 0.940702
-v 0.219140 4.277448 1.098044
-v 0.219140 3.935140 1.152260
-v 0.219140 3.592831 1.098044
-v 0.219140 3.284031 0.940702
-v 0.219140 3.038965 0.695636
-v 0.219140 2.881623 0.386835
-v 0.219140 2.827407 0.044527
-v -0.138836 3.935140 0.044527
-v 0.219140 3.935140 0.044527
-v 0.200276 4.424099 1.800410
-v 0.200276 4.307964 1.572482
-v 0.200276 4.127079 1.391597
-v 0.200276 3.899151 1.275462
-v 0.200276 3.646492 1.235445
-v 0.200276 3.393832 1.275462
-v 0.200276 3.165904 1.391598
-v 0.200276 2.985019 1.572482
-v 0.200276 2.868885 1.800410
-v 0.200276 2.828867 2.053070
-v 0.200276 2.868885 2.305729
-v 0.200276 2.985020 2.533657
-v 0.200276 3.165904 2.714541
-v 0.200276 3.393832 2.830677
-v 0.200276 3.646492 2.870694
-v 0.200276 3.899151 2.830677
-v 0.200276 4.127079 2.714541
-v 0.200276 4.307963 2.533657
-v 0.200276 4.424098 2.305729
-v 0.200276 4.464116 2.053070
-v -0.200276 4.424099 1.800410
-v -0.200276 4.307964 1.572482
-v -0.200276 4.127079 1.391597
-v -0.200276 3.899151 1.275462
-v -0.200276 3.646492 1.235445
-v -0.200276 3.393832 1.275462
-v -0.200276 3.165904 1.391598
-v -0.200276 2.985019 1.572482
-v -0.200276 2.868885 1.800410
-v -0.200276 2.828867 2.053070
-v -0.200276 2.868885 2.305729
-v -0.200276 2.985020 2.533657
-v -0.200276 3.165904 2.714541
-v -0.200276 3.393832 2.830677
-v -0.200276 3.646492 2.870694
-v -0.200276 3.899151 2.830677
-v -0.200276 4.127079 2.714541
-v -0.200276 4.307963 2.533657
-v -0.200276 4.424098 2.305729
-v -0.200276 4.464116 2.053070
-v 0.200276 3.646492 2.053070
-v -0.200276 3.646492 2.053070
-v -1.103869 3.236121 -2.411704
-v -1.103870 1.028382 -2.411704
-v 1.103870 1.028381 -2.411704
-v 1.103870 3.236121 -2.411704
-v -0.000000 2.132251 -0.850597
-v 0.508883 1.973428 1.215074
-v 0.880448 1.973428 1.215074
-v 0.508883 1.973428 2.921971
-v 0.880448 1.973428 2.921971
-v 0.508883 2.344992 2.921971
-v 0.880448 2.344992 2.921971
-v 0.508883 2.344992 1.215074
-v 0.880448 2.344992 1.215074
-vt 0.375000 0.000000
-vt 0.625000 0.000000
-vt 0.375000 0.250000
-vt 0.625000 0.250000
-vt 0.375000 0.500000
-vt 0.625000 0.500000
-vt 0.375000 0.750000
-vt 0.625000 0.750000
-vt 0.375000 1.000000
-vt 0.625000 1.000000
-vt 0.875000 0.000000
-vt 0.875000 0.250000
-vt 0.125000 0.000000
-vt 0.125000 0.250000
-vt 0.375000 0.312500
-vt 0.387500 0.312500
-vt 0.387500 0.688440
-vt 0.375000 0.688440
-vt 0.400000 0.312500
-vt 0.400000 0.688440
-vt 0.412500 0.312500
-vt 0.412500 0.688440
-vt 0.425000 0.312500
-vt 0.425000 0.688440
-vt 0.437500 0.312500
-vt 0.437500 0.688440
-vt 0.450000 0.312500
-vt 0.450000 0.688440
-vt 0.462500 0.312500
-vt 0.462500 0.688440
-vt 0.475000 0.312500
-vt 0.475000 0.688440
-vt 0.487500 0.312500
-vt 0.487500 0.688440
-vt 0.500000 0.312500
-vt 0.500000 0.688440
-vt 0.512500 0.312500
-vt 0.512500 0.688440
-vt 0.525000 0.312500
-vt 0.525000 0.688440
-vt 0.537500 0.312500
-vt 0.537500 0.688440
-vt 0.550000 0.312500
-vt 0.550000 0.688440
-vt 0.562500 0.312500
-vt 0.562500 0.688440
-vt 0.575000 0.312500
-vt 0.575000 0.688440
-vt 0.587500 0.312500
-vt 0.587500 0.688440
-vt 0.600000 0.312500
-vt 0.600000 0.688440
-vt 0.612500 0.312500
-vt 0.612500 0.688440
-vt 0.625000 0.312500
-vt 0.625000 0.688440
-vt 0.626409 0.064408
-vt 0.648603 0.107966
-vt 0.500000 0.150000
-vt 0.591842 0.029841
-vt 0.548284 0.007647
-vt 0.500000 -0.000000
-vt 0.451716 0.007647
-vt 0.408159 0.029841
-vt 0.373591 0.064409
-vt 0.351397 0.107966
-vt 0.343750 0.156250
-vt 0.351397 0.204534
-vt 0.373591 0.248091
-vt 0.408159 0.282659
-vt 0.451716 0.304853
-vt 0.500000 0.312500
-vt 0.548284 0.304853
-vt 0.591841 0.282659
-vt 0.626409 0.248091
-vt 0.648603 0.204534
-vt 0.656250 0.156250
-vt 0.648603 0.892034
-vt 0.626409 0.935591
-vt 0.500000 0.837500
-vt 0.591841 0.970159
-vt 0.548284 0.992353
-vt 0.500000 1.000000
-vt 0.451716 0.992353
-vt 0.408159 0.970159
-vt 0.373591 0.935591
-vt 0.351397 0.892034
-vt 0.343750 0.843750
-vt 0.351397 0.795466
-vt 0.373591 0.751909
-vt 0.408159 0.717341
-vt 0.451716 0.695147
-vt 0.500000 0.687500
-vt 0.548284 0.695147
-vt 0.591842 0.717341
-vt 0.626409 0.751908
-vt 0.648603 0.795466
-vt 0.656250 0.843750
-vt 0.375000 0.312500
-vt 0.387500 0.312500
-vt 0.387500 0.688440
-vt 0.375000 0.688440
-vt 0.400000 0.312500
-vt 0.400000 0.688440
-vt 0.412500 0.312500
-vt 0.412500 0.688440
-vt 0.425000 0.312500
-vt 0.425000 0.688440
-vt 0.437500 0.312500
-vt 0.437500 0.688440
-vt 0.450000 0.312500
-vt 0.450000 0.688440
-vt 0.462500 0.312500
-vt 0.462500 0.688440
-vt 0.475000 0.312500
-vt 0.475000 0.688440
-vt 0.487500 0.312500
-vt 0.487500 0.688440
-vt 0.500000 0.312500
-vt 0.500000 0.688440
-vt 0.512500 0.312500
-vt 0.512500 0.688440
-vt 0.525000 0.312500
-vt 0.525000 0.688440
-vt 0.537500 0.312500
-vt 0.537500 0.688440
-vt 0.550000 0.312500
-vt 0.550000 0.688440
-vt 0.562500 0.312500
-vt 0.562500 0.688440
-vt 0.575000 0.312500
-vt 0.575000 0.688440
-vt 0.587500 0.312500
-vt 0.587500 0.688440
-vt 0.600000 0.312500
-vt 0.600000 0.688440
-vt 0.612500 0.312500
-vt 0.612500 0.688440
-vt 0.625000 0.312500
-vt 0.625000 0.688440
-vt 0.626409 0.064408
-vt 0.648603 0.107966
-vt 0.500000 0.150000
-vt 0.591842 0.029841
-vt 0.548284 0.007647
-vt 0.500000 -0.000000
-vt 0.451716 0.007647
-vt 0.408159 0.029841
-vt 0.373591 0.064409
-vt 0.351397 0.107966
-vt 0.343750 0.156250
-vt 0.351397 0.204534
-vt 0.373591 0.248091
-vt 0.408159 0.282659
-vt 0.451716 0.304853
-vt 0.500000 0.312500
-vt 0.548284 0.304853
-vt 0.591841 0.282659
-vt 0.626409 0.248091
-vt 0.648603 0.204534
-vt 0.656250 0.156250
-vt 0.648603 0.892034
-vt 0.626409 0.935591
-vt 0.500000 0.837500
-vt 0.591841 0.970159
-vt 0.548284 0.992353
-vt 0.500000 1.000000
-vt 0.451716 0.992353
-vt 0.408159 0.970159
-vt 0.373591 0.935591
-vt 0.351397 0.892034
-vt 0.343750 0.843750
-vt 0.351397 0.795466
-vt 0.373591 0.751909
-vt 0.408159 0.717341
-vt 0.451716 0.695147
-vt 0.500000 0.687500
-vt 0.548284 0.695147
-vt 0.591842 0.717341
-vt 0.626409 0.751908
-vt 0.648603 0.795466
-vt 0.656250 0.843750
-vt 0.500000 0.000000
-vt 0.750000 0.250000
-vt 0.500000 0.500000
-vt 0.250000 0.250000
-vt 0.250000 0.500000
-vt 0.375000 0.500000
-vt 0.500000 1.000000
-vt 0.500000 0.500000
-vt 0.625000 0.500000
-vt 0.750000 0.500000
-vt 0.375000 0.000000
-vt 0.625000 0.000000
-vt 0.625000 0.250000
-vt 0.375000 0.250000
-vt 0.625000 0.500000
-vt 0.375000 0.500000
-vt 0.625000 0.750000
-vt 0.375000 0.750000
-vt 0.625000 1.000000
-vt 0.375000 1.000000
-vt 0.875000 0.000000
-vt 0.875000 0.250000
-vt 0.125000 0.000000
-vt 0.125000 0.250000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn 0.000000 -0.951057 -0.309016
-vn 0.000000 -0.809017 -0.587785
-vn 0.000000 -0.809017 -0.587785
-vn 0.000000 -0.951057 -0.309016
-vn 0.000000 -0.587785 -0.809017
-vn 0.000000 -0.587785 -0.809017
-vn 0.000000 -0.309017 -0.951057
-vn 0.000000 -0.309017 -0.951057
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.309017 -0.951056
-vn 0.000000 0.309017 -0.951056
-vn 0.000000 0.587786 -0.809017
-vn 0.000000 0.587786 -0.809017
-vn 0.000000 0.809017 -0.587785
-vn 0.000000 0.809017 -0.587785
-vn 0.000000 0.951057 -0.309017
-vn 0.000000 0.951057 -0.309017
-vn 0.000000 1.000000 0.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 0.951057 0.309017
-vn 0.000000 0.951057 0.309017
-vn 0.000000 0.809017 0.587785
-vn 0.000000 0.809017 0.587785
-vn 0.000000 0.587785 0.809017
-vn 0.000000 0.587785 0.809017
-vn 0.000000 0.309017 0.951057
-vn 0.000000 0.309017 0.951057
-vn 0.000000 -0.000000 1.000000
-vn 0.000000 -0.000000 1.000000
-vn 0.000000 -0.309017 0.951057
-vn 0.000000 -0.309017 0.951057
-vn 0.000000 -0.587785 0.809017
-vn 0.000000 -0.587785 0.809017
-vn 0.000000 -0.809017 0.587785
-vn 0.000000 -0.809017 0.587785
-vn 0.000000 -0.951057 0.309017
-vn 0.000000 -0.951057 0.309017
-vn 0.000000 -1.000000 0.000001
-vn 0.000000 -1.000000 0.000001
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 -0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 -0.000000 0.000000
-vn -1.000000 -0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 0.000000 0.951057 -0.309016
-vn 0.000000 0.809017 -0.587786
-vn 0.000000 0.809017 -0.587786
-vn 0.000000 0.951057 -0.309016
-vn 0.000000 0.587785 -0.809017
-vn 0.000000 0.587785 -0.809017
-vn 0.000000 0.309017 -0.951057
-vn 0.000000 0.309017 -0.951057
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 -0.309017 -0.951056
-vn 0.000000 -0.309017 -0.951056
-vn 0.000000 -0.587785 -0.809017
-vn 0.000000 -0.587785 -0.809017
-vn 0.000000 -0.809017 -0.587785
-vn 0.000000 -0.809017 -0.587785
-vn 0.000000 -0.951057 -0.309017
-vn 0.000000 -0.951057 -0.309017
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -0.951056 0.309018
-vn 0.000000 -0.951056 0.309018
-vn 0.000000 -0.809017 0.587786
-vn 0.000000 -0.809017 0.587786
-vn 0.000000 -0.587786 0.809017
-vn 0.000000 -0.587786 0.809017
-vn 0.000000 -0.309017 0.951056
-vn 0.000000 -0.309017 0.951056
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.309017 0.951056
-vn 0.000000 0.309017 0.951056
-vn 0.000000 0.587785 0.809017
-vn 0.000000 0.587785 0.809017
-vn 0.000000 0.809017 0.587786
-vn 0.000000 0.809017 0.587786
-vn 0.000000 0.951057 0.309017
-vn 0.000000 0.951057 0.309017
-vn 0.000000 1.000000 0.000001
-vn 0.000000 1.000000 0.000001
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 -0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn -0.816497 0.000000 0.577350
-vn -0.816497 0.000000 0.577350
-vn -0.816497 0.000000 0.577350
-vn -0.000000 -0.816497 0.577350
-vn -0.000000 -0.816497 0.577350
-vn -0.000000 -0.816497 0.577350
-vn 0.816497 0.000000 0.577350
-vn 0.816497 0.000000 0.577350
-vn 0.816497 0.000000 0.577350
-vn 0.000000 0.816497 0.577350
-vn 0.000000 0.816497 0.577350
-vn 0.000000 0.816497 0.577350
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-s off
-g pCube3
-usemtl lambert2SG
-f 1/1/1 2/2/2 4/4/3 3/3/4
-f 3/3/5 4/4/6 6/6/7 5/5/8
-f 5/5/9 6/6/10 8/8/11 7/7/12
-f 7/7/13 8/8/14 2/10/15 1/9/16
-f 2/2/17 8/11/18 6/12/19 4/4/20
-f 7/13/21 1/1/22 3/3/23 5/14/24
-s 1
-usemtl initialShadingGroup
-f 9/15/25 10/16/26 30/17/27 29/18/28
-f 10/16/26 11/19/29 31/20/30 30/17/27
-f 11/19/29 12/21/31 32/22/32 31/20/30
-f 12/21/31 13/23/33 33/24/34 32/22/32
-f 13/23/33 14/25/35 34/26/36 33/24/34
-f 14/25/35 15/27/37 35/28/38 34/26/36
-f 15/27/37 16/29/39 36/30/40 35/28/38
-f 16/29/39 17/31/41 37/32/42 36/30/40
-f 17/31/41 18/33/43 38/34/44 37/32/42
-f 18/33/43 19/35/45 39/36/46 38/34/44
-f 19/35/45 20/37/47 40/38/48 39/36/46
-f 20/37/47 21/39/49 41/40/50 40/38/48
-f 21/39/49 22/41/51 42/42/52 41/40/50
-f 22/41/51 23/43/53 43/44/54 42/42/52
-f 23/43/53 24/45/55 44/46/56 43/44/54
-f 24/45/55 25/47/57 45/48/58 44/46/56
-f 25/47/57 26/49/59 46/50/60 45/48/58
-f 26/49/59 27/51/61 47/52/62 46/50/60
-f 27/51/61 28/53/63 48/54/64 47/52/62
-f 28/53/63 9/55/25 29/56/28 48/54/64
-s 2
-f 10/57/65 9/58/66 49/59/67
-f 11/60/68 10/57/65 49/59/67
-f 12/61/69 11/60/68 49/59/67
-f 13/62/70 12/61/69 49/59/67
-f 14/63/71 13/62/70 49/59/67
-f 15/64/72 14/63/71 49/59/67
-f 16/65/73 15/64/72 49/59/67
-f 17/66/74 16/65/73 49/59/67
-f 18/67/75 17/66/74 49/59/67
-f 19/68/76 18/67/75 49/59/67
-f 20/69/77 19/68/76 49/59/67
-f 21/70/78 20/69/77 49/59/67
-f 22/71/79 21/70/78 49/59/67
-f 23/72/80 22/71/79 49/59/67
-f 24/73/81 23/72/80 49/59/67
-f 25/74/82 24/73/81 49/59/67
-f 26/75/83 25/74/82 49/59/67
-f 27/76/84 26/75/83 49/59/67
-f 28/77/85 27/76/84 49/59/67
-f 9/58/66 28/77/85 49/59/67
-s 3
-f 29/78/86 30/79/87 50/80/88
-f 30/79/87 31/81/89 50/80/88
-f 31/81/89 32/82/90 50/80/88
-f 32/82/90 33/83/91 50/80/88
-f 33/83/91 34/84/92 50/80/88
-f 34/84/92 35/85/93 50/80/88
-f 35/85/93 36/86/94 50/80/88
-f 36/86/94 37/87/95 50/80/88
-f 37/87/95 38/88/96 50/80/88
-f 38/88/96 39/89/97 50/80/88
-f 39/89/97 40/90/98 50/80/88
-f 40/90/98 41/91/99 50/80/88
-f 41/91/99 42/92/100 50/80/88
-f 42/92/100 43/93/101 50/80/88
-f 43/93/101 44/94/102 50/80/88
-f 44/94/102 45/95/103 50/80/88
-f 45/95/103 46/96/104 50/80/88
-f 46/96/104 47/97/105 50/80/88
-f 47/97/105 48/98/106 50/80/88
-f 48/98/106 29/78/86 50/80/88
-s 4
-f 51/99/107 52/100/108 72/101/109 71/102/110
-f 52/100/108 53/103/111 73/104/112 72/101/109
-f 53/103/111 54/105/113 74/106/114 73/104/112
-f 54/105/113 55/107/115 75/108/116 74/106/114
-f 55/107/115 56/109/117 76/110/118 75/108/116
-f 56/109/117 57/111/119 77/112/120 76/110/118
-f 57/111/119 58/113/121 78/114/122 77/112/120
-f 58/113/121 59/115/123 79/116/124 78/114/122
-f 59/115/123 60/117/125 80/118/126 79/116/124
-f 60/117/125 61/119/127 81/120/128 80/118/126
-f 61/119/127 62/121/129 82/122/130 81/120/128
-f 62/121/129 63/123/131 83/124/132 82/122/130
-f 63/123/131 64/125/133 84/126/134 83/124/132
-f 64/125/133 65/127/135 85/128/136 84/126/134
-f 65/127/135 66/129/137 86/130/138 85/128/136
-f 66/129/137 67/131/139 87/132/140 86/130/138
-f 67/131/139 68/133/141 88/134/142 87/132/140
-f 68/133/141 69/135/143 89/136/144 88/134/142
-f 69/135/143 70/137/145 90/138/146 89/136/144
-f 70/137/145 51/139/107 71/140/110 90/138/146
-s 5
-f 52/141/147 51/142/148 91/143/149
-f 53/144/150 52/141/147 91/143/149
-f 54/145/151 53/144/150 91/143/149
-f 55/146/152 54/145/151 91/143/149
-f 56/147/153 55/146/152 91/143/149
-f 57/148/154 56/147/153 91/143/149
-f 58/149/155 57/148/154 91/143/149
-f 59/150/156 58/149/155 91/143/149
-f 60/151/157 59/150/156 91/143/149
-f 61/152/158 60/151/157 91/143/149
-f 62/153/159 61/152/158 91/143/149
-f 63/154/160 62/153/159 91/143/149
-f 64/155/161 63/154/160 91/143/149
-f 65/156/162 64/155/161 91/143/149
-f 66/157/163 65/156/162 91/143/149
-f 67/158/164 66/157/163 91/143/149
-f 68/159/165 67/158/164 91/143/149
-f 69/160/166 68/159/165 91/143/149
-f 70/161/167 69/160/166 91/143/149
-f 51/142/148 70/161/167 91/143/149
-s 6
-f 71/162/168 72/163/169 92/164/170
-f 72/163/169 73/165/171 92/164/170
-f 73/165/171 74/166/172 92/164/170
-f 74/166/172 75/167/173 92/164/170
-f 75/167/173 76/168/174 92/164/170
-f 76/168/174 77/169/175 92/164/170
-f 77/169/175 78/170/176 92/164/170
-f 78/170/176 79/171/177 92/164/170
-f 79/171/177 80/172/178 92/164/170
-f 80/172/178 81/173/179 92/164/170
-f 81/173/179 82/174/180 92/164/170
-f 82/174/180 83/175/181 92/164/170
-f 83/175/181 84/176/182 92/164/170
-f 84/176/182 85/177/183 92/164/170
-f 85/177/183 86/178/184 92/164/170
-f 86/178/184 87/179/185 92/164/170
-f 87/179/185 88/180/186 92/164/170
-f 88/180/186 89/181/187 92/164/170
-f 89/181/187 90/182/188 92/164/170
-f 90/182/188 71/162/168 92/164/170
-s off
-usemtl lambert2SG
-f 93/183/189 96/184/190 95/185/191 94/186/192
-f 93/187/193 94/188/194 97/189/195
-f 94/188/196 95/190/197 97/189/198
-f 95/190/199 96/191/200 97/189/201
-f 96/191/202 93/192/203 97/189/204
-usemtl initialShadingGroup
-f 98/193/205 99/194/206 101/195/207 100/196/208
-f 100/196/209 101/195/210 103/197/211 102/198/212
-f 102/198/213 103/197/214 105/199/215 104/200/216
-f 104/200/217 105/199/218 99/201/219 98/202/220
-f 99/194/221 105/203/222 103/204/223 101/195/224
-f 104/205/225 98/193/226 100/196/227 102/206/228

+ 0 - 25
app/src/main/assets/f_res

@@ -1,25 +0,0 @@
-{
-	"comment" : "Bon t'a gagn\u00e9 ",
-	"name" : "f",
-	"position" : 
-	[
-		0.0,
-		0.0,
-		0.0
-	],
-	"rotation" : 
-	[
-		0.0,
-		0.0,
-		0.0
-	],
-	"scale" : 
-	[
-		1.0,
-		1.0,
-		1.0
-	],
-	"stage" : 5,
-	"title" : "Gagn\u00e9 ",
-	"type" : "Video"
-}

binární
app/src/main/assets/f_video


binární
app/src/main/assets/font.ttf


+ 75 - 169
app/src/main/assets/game_medium

@@ -1,177 +1,83 @@
 {
-    "password" : "123456",
+    "password" : "12345678",
     "max_time" : 30,
-	"stages" : [
-		{
-            "name" : "QrCode",
-            "challenges" : [],
-            "resources" : ["a"]
-        },
-		{
-			"name" : "QrCode",
-			"challenges" :
-				[
+	"stages" : [{
+	"name" : "Intro",
+	"challenges" : [],
+	"resources" : ["intro"],
+	"event_start" : {
+		"method" : "print",
+		"args" : ["Salut, ça va ?"]
+	}
+},
+{
+	"name" : "QrCode",
+	"challenges" :
+		[
+			{
+				"type" : "QRCodeGeoTreasure",
+				"name" : "A trouver",
+				"bad_message" : "Essaye encore",
+				"qr_value" : "1",
+				"resource" : "creche",
+				"indices" : [
 					{
-						"type" : "QRCodeGeoTreasure",
-						"name" : "A trouver",
-						"bad_message" : "Essaye encore",
-						"qr_value" : "1",
-						"resource" : "b",
-						"indices" : [
-						    {
-						        "type" : "geo",
-						        "penality": 1
-						    },
-						    {
-						        "type" : "text",
-						        "text" : "Entre le 0 et le 2",
-						        "penality": 1
-						    },
-						    {
-						        "type" : "text",
-						        "text" : "sqrt(x) = x",
-                                 "penality": 5
-						    }
-						],
-						"area" : {
-                            "coordinates" :
-                            [
-                                [
-                                    0.14911472797393799,
-                                    45.629791259765625
-                                ],
-                                [
-                                    0.15027344226837158,
-                                    45.62957763671875
-                                ],
-                                [
-                                    0.1496511697769165,
-                                    45.628990173339844
-                                ],
-                                [
-                                    0.14827251434326172,
-                                    45.628894805908203
-                                ],
-                                [
-                                    0.14798820018768311,
-                                    45.629344940185547
-                                ],
-                                [
-                                    0.14833688735961914,
-                                    45.629764556884766
-                                ]
-                            ],
-                            "name" : "a",
-                            "point" :
-                                {
-                                    "angle" : 180.0,
-                                    "coordinates" :
-                                    [
-                                        0.14913618564605713,
-                                        45.629505157470703
-                                    ],
-                                    "field" : 90.0,
-                                    "radius" : 100.0,
-                                    "useAngle" : false
-                                }
-                        },
-                        "charIndex" : 0
+						"type" : "geo",
+						"penality": 1
 					},
-                    {
-                         "type" : "QCM",
-                         "name" : "MontagneEstBelle",
-                         "question" : "Qui a écrit \"Que la montagne est belle\" ?",
-                         "answer" : "Jean Ferrat",
-                         "choices" : ["Jacques Chirac", "Jean Ferrat", "Patrick Timsit", "BHL"],
-                         "good_message" : "Bien joué !",
-                         "bad_message" : "T'es nul !",
-						"indices" : [
-						    {
-						        "type" : "text",
-						        "text" : "Un chanteur",
-                                "penality": 4
-						    },
-                            {
-                                "type" : "text",
-                                "text" : "Un Communiste",
-                                  "penality": 4
-                            },
-                            {
-                                "type" : "text",
-                                "text" : "Un Communiste",
-                                  "penality": 4
-                            },
-                            {
-                                "type" : "text",
-                                "text" : "Un Communiste",
-                                  "penality": 4
-                            },
-                            {
-                                "type" : "text",
-                                "text" : "Un Communiste",
-                                  "penality": 4
-                            }
-						],
-                        "charIndex" : 1
-                    }
-				],
-			"resources" : ["b"]
-		},
-		{
-			"name" : "Le Premier",
-			"challenges" :
-				[
-                 {
-                    "type" : "QCM",
-                    "name" : "Joconde",
-                    "question" : "Qui a peint la Joconde ?",
-                    "answer" : "Léonard De Vinci",
-                    "choices" : ["Léonard De Vinci", "Jean Ferrat", "Patrick Timsit", "BHL"],
-                    "good_message" : "Bien joué !",
-                    "bad_message" : "T'es nul !",
-                     "indices" : [
-                         {
-                             "type" : "text",
-                             "text" : "Un italien",
-                                "penality": 3
-                         },
-                         {
-                             "type" : "text",
-                             "text" : "Un vieu !",
-                                 "penality": 2
-                         }
-                     ],
-                     "charIndex" : 2
-                 },
-                 {
-                       "type" : "Question",
-                       "name" : "Question A tous",
-                       "question" : "Quelle est la réponse à la vie l'univers et le reste ?",
-                       "answer" : "42",
-                       "good_message" : "Bien joué !",
-                       "bad_message" : "T'es nul !",
-                       "indices" : [
-                           {
-                               "type" : "text",
-                               "text" : "Dans H2G2",
-                                  "penality": 3
-                           },
-                           {
-                               "type" : "text",
-                               "text" : "6 x 7 = ?",
-                                "penality": 2
-                           }
-                       ],
-                        "charIndex" : 3
-                 }
+					{
+						"type" : "text",
+						"text" : "Entre le 0 et le 2",
+						"penality": 1
+					},
+					{
+						"type" : "text",
+						"text" : "sqrt(x) = x",
+						 "penality": 5
+					}
 				],
-			"resources" : ["c"]
-		},
-		{
-            "name" : "QrCode",
-            "challenges" : []
-        }
-	],
+				"area" : {
+					"coordinates": [
+						[
+						  0.14973163604736328,
+						  45.62980068341694
+						],
+						[
+						  0.14937490224838257,
+						  45.62957185409808
+						],
+						[
+						  0.14950096607208252,
+						  45.6294705686915
+						],
+						[
+						  0.14989793300628662,
+						  45.62966376106791
+						],
+						[
+						  0.14973163604736328,
+						  45.62980068341694
+						]
+					  ],
+					"name" : "a",
+					"point" :
+						{
+							"angle" : 180.0,
+							"coordinates" :
+							[
+							  0.14959752559661865,
+							  45.62963937760083
+							],
+							"field" : 90.0,
+							"radius" : 100.0,
+							"useAngle" : false
+						}
+				}
+			}
+		],
+	"resources" : ["fin"],
+	"charIndex" : 6
+}	],
 	"credits" : 
 	{
 		"text" : "Par Fran\u00e7ois Gautrais !",

+ 0 - 693
app/src/main/assets/intro_obj

@@ -1,693 +0,0 @@
-# This file uses centimeters as units for non-parametric coordinates.
-
-mtllib camera.mtl
-g default
-v -0.519305 1.372979 2.290038
-v 0.519305 1.372979 2.290038
-v -0.519305 2.865714 2.290038
-v 0.519305 2.865714 2.290038
-v -0.519305 2.865714 -1.492483
-v 0.519305 2.865714 -1.492483
-v -0.519305 1.372979 -1.492483
-v 0.519305 1.372979 -1.492483
-v -0.138836 2.881623 -0.297781
-v -0.138836 3.038964 -0.606582
-v -0.138836 3.284030 -0.851648
-v -0.138836 3.592831 -1.008990
-v -0.138836 3.935140 -1.063206
-v -0.138836 4.277448 -1.008990
-v -0.138836 4.586249 -0.851648
-v -0.138836 4.831315 -0.606582
-v -0.138836 4.988657 -0.297781
-v -0.138836 5.042872 0.044527
-v -0.138836 4.988657 0.386835
-v -0.138836 4.831315 0.695636
-v -0.138836 4.586249 0.940702
-v -0.138836 4.277448 1.098044
-v -0.138836 3.935140 1.152260
-v -0.138836 3.592831 1.098044
-v -0.138836 3.284031 0.940702
-v -0.138836 3.038965 0.695636
-v -0.138836 2.881623 0.386835
-v -0.138836 2.827407 0.044527
-v 0.219140 2.881623 -0.297781
-v 0.219140 3.038964 -0.606582
-v 0.219140 3.284030 -0.851648
-v 0.219140 3.592831 -1.008990
-v 0.219140 3.935140 -1.063206
-v 0.219140 4.277448 -1.008990
-v 0.219140 4.586249 -0.851648
-v 0.219140 4.831315 -0.606582
-v 0.219140 4.988657 -0.297781
-v 0.219140 5.042872 0.044527
-v 0.219140 4.988657 0.386835
-v 0.219140 4.831315 0.695636
-v 0.219140 4.586249 0.940702
-v 0.219140 4.277448 1.098044
-v 0.219140 3.935140 1.152260
-v 0.219140 3.592831 1.098044
-v 0.219140 3.284031 0.940702
-v 0.219140 3.038965 0.695636
-v 0.219140 2.881623 0.386835
-v 0.219140 2.827407 0.044527
-v -0.138836 3.935140 0.044527
-v 0.219140 3.935140 0.044527
-v 0.200276 4.424099 1.800410
-v 0.200276 4.307964 1.572482
-v 0.200276 4.127079 1.391597
-v 0.200276 3.899151 1.275462
-v 0.200276 3.646492 1.235445
-v 0.200276 3.393832 1.275462
-v 0.200276 3.165904 1.391598
-v 0.200276 2.985019 1.572482
-v 0.200276 2.868885 1.800410
-v 0.200276 2.828867 2.053070
-v 0.200276 2.868885 2.305729
-v 0.200276 2.985020 2.533657
-v 0.200276 3.165904 2.714541
-v 0.200276 3.393832 2.830677
-v 0.200276 3.646492 2.870694
-v 0.200276 3.899151 2.830677
-v 0.200276 4.127079 2.714541
-v 0.200276 4.307963 2.533657
-v 0.200276 4.424098 2.305729
-v 0.200276 4.464116 2.053070
-v -0.200276 4.424099 1.800410
-v -0.200276 4.307964 1.572482
-v -0.200276 4.127079 1.391597
-v -0.200276 3.899151 1.275462
-v -0.200276 3.646492 1.235445
-v -0.200276 3.393832 1.275462
-v -0.200276 3.165904 1.391598
-v -0.200276 2.985019 1.572482
-v -0.200276 2.868885 1.800410
-v -0.200276 2.828867 2.053070
-v -0.200276 2.868885 2.305729
-v -0.200276 2.985020 2.533657
-v -0.200276 3.165904 2.714541
-v -0.200276 3.393832 2.830677
-v -0.200276 3.646492 2.870694
-v -0.200276 3.899151 2.830677
-v -0.200276 4.127079 2.714541
-v -0.200276 4.307963 2.533657
-v -0.200276 4.424098 2.305729
-v -0.200276 4.464116 2.053070
-v 0.200276 3.646492 2.053070
-v -0.200276 3.646492 2.053070
-v -1.103869 3.236121 -2.411704
-v -1.103870 1.028382 -2.411704
-v 1.103870 1.028381 -2.411704
-v 1.103870 3.236121 -2.411704
-v -0.000000 2.132251 -0.850597
-v 0.508883 1.973428 1.215074
-v 0.880448 1.973428 1.215074
-v 0.508883 1.973428 2.921971
-v 0.880448 1.973428 2.921971
-v 0.508883 2.344992 2.921971
-v 0.880448 2.344992 2.921971
-v 0.508883 2.344992 1.215074
-v 0.880448 2.344992 1.215074
-vt 0.375000 0.000000
-vt 0.625000 0.000000
-vt 0.375000 0.250000
-vt 0.625000 0.250000
-vt 0.375000 0.500000
-vt 0.625000 0.500000
-vt 0.375000 0.750000
-vt 0.625000 0.750000
-vt 0.375000 1.000000
-vt 0.625000 1.000000
-vt 0.875000 0.000000
-vt 0.875000 0.250000
-vt 0.125000 0.000000
-vt 0.125000 0.250000
-vt 0.375000 0.312500
-vt 0.387500 0.312500
-vt 0.387500 0.688440
-vt 0.375000 0.688440
-vt 0.400000 0.312500
-vt 0.400000 0.688440
-vt 0.412500 0.312500
-vt 0.412500 0.688440
-vt 0.425000 0.312500
-vt 0.425000 0.688440
-vt 0.437500 0.312500
-vt 0.437500 0.688440
-vt 0.450000 0.312500
-vt 0.450000 0.688440
-vt 0.462500 0.312500
-vt 0.462500 0.688440
-vt 0.475000 0.312500
-vt 0.475000 0.688440
-vt 0.487500 0.312500
-vt 0.487500 0.688440
-vt 0.500000 0.312500
-vt 0.500000 0.688440
-vt 0.512500 0.312500
-vt 0.512500 0.688440
-vt 0.525000 0.312500
-vt 0.525000 0.688440
-vt 0.537500 0.312500
-vt 0.537500 0.688440
-vt 0.550000 0.312500
-vt 0.550000 0.688440
-vt 0.562500 0.312500
-vt 0.562500 0.688440
-vt 0.575000 0.312500
-vt 0.575000 0.688440
-vt 0.587500 0.312500
-vt 0.587500 0.688440
-vt 0.600000 0.312500
-vt 0.600000 0.688440
-vt 0.612500 0.312500
-vt 0.612500 0.688440
-vt 0.625000 0.312500
-vt 0.625000 0.688440
-vt 0.626409 0.064408
-vt 0.648603 0.107966
-vt 0.500000 0.150000
-vt 0.591842 0.029841
-vt 0.548284 0.007647
-vt 0.500000 -0.000000
-vt 0.451716 0.007647
-vt 0.408159 0.029841
-vt 0.373591 0.064409
-vt 0.351397 0.107966
-vt 0.343750 0.156250
-vt 0.351397 0.204534
-vt 0.373591 0.248091
-vt 0.408159 0.282659
-vt 0.451716 0.304853
-vt 0.500000 0.312500
-vt 0.548284 0.304853
-vt 0.591841 0.282659
-vt 0.626409 0.248091
-vt 0.648603 0.204534
-vt 0.656250 0.156250
-vt 0.648603 0.892034
-vt 0.626409 0.935591
-vt 0.500000 0.837500
-vt 0.591841 0.970159
-vt 0.548284 0.992353
-vt 0.500000 1.000000
-vt 0.451716 0.992353
-vt 0.408159 0.970159
-vt 0.373591 0.935591
-vt 0.351397 0.892034
-vt 0.343750 0.843750
-vt 0.351397 0.795466
-vt 0.373591 0.751909
-vt 0.408159 0.717341
-vt 0.451716 0.695147
-vt 0.500000 0.687500
-vt 0.548284 0.695147
-vt 0.591842 0.717341
-vt 0.626409 0.751908
-vt 0.648603 0.795466
-vt 0.656250 0.843750
-vt 0.375000 0.312500
-vt 0.387500 0.312500
-vt 0.387500 0.688440
-vt 0.375000 0.688440
-vt 0.400000 0.312500
-vt 0.400000 0.688440
-vt 0.412500 0.312500
-vt 0.412500 0.688440
-vt 0.425000 0.312500
-vt 0.425000 0.688440
-vt 0.437500 0.312500
-vt 0.437500 0.688440
-vt 0.450000 0.312500
-vt 0.450000 0.688440
-vt 0.462500 0.312500
-vt 0.462500 0.688440
-vt 0.475000 0.312500
-vt 0.475000 0.688440
-vt 0.487500 0.312500
-vt 0.487500 0.688440
-vt 0.500000 0.312500
-vt 0.500000 0.688440
-vt 0.512500 0.312500
-vt 0.512500 0.688440
-vt 0.525000 0.312500
-vt 0.525000 0.688440
-vt 0.537500 0.312500
-vt 0.537500 0.688440
-vt 0.550000 0.312500
-vt 0.550000 0.688440
-vt 0.562500 0.312500
-vt 0.562500 0.688440
-vt 0.575000 0.312500
-vt 0.575000 0.688440
-vt 0.587500 0.312500
-vt 0.587500 0.688440
-vt 0.600000 0.312500
-vt 0.600000 0.688440
-vt 0.612500 0.312500
-vt 0.612500 0.688440
-vt 0.625000 0.312500
-vt 0.625000 0.688440
-vt 0.626409 0.064408
-vt 0.648603 0.107966
-vt 0.500000 0.150000
-vt 0.591842 0.029841
-vt 0.548284 0.007647
-vt 0.500000 -0.000000
-vt 0.451716 0.007647
-vt 0.408159 0.029841
-vt 0.373591 0.064409
-vt 0.351397 0.107966
-vt 0.343750 0.156250
-vt 0.351397 0.204534
-vt 0.373591 0.248091
-vt 0.408159 0.282659
-vt 0.451716 0.304853
-vt 0.500000 0.312500
-vt 0.548284 0.304853
-vt 0.591841 0.282659
-vt 0.626409 0.248091
-vt 0.648603 0.204534
-vt 0.656250 0.156250
-vt 0.648603 0.892034
-vt 0.626409 0.935591
-vt 0.500000 0.837500
-vt 0.591841 0.970159
-vt 0.548284 0.992353
-vt 0.500000 1.000000
-vt 0.451716 0.992353
-vt 0.408159 0.970159
-vt 0.373591 0.935591
-vt 0.351397 0.892034
-vt 0.343750 0.843750
-vt 0.351397 0.795466
-vt 0.373591 0.751909
-vt 0.408159 0.717341
-vt 0.451716 0.695147
-vt 0.500000 0.687500
-vt 0.548284 0.695147
-vt 0.591842 0.717341
-vt 0.626409 0.751908
-vt 0.648603 0.795466
-vt 0.656250 0.843750
-vt 0.500000 0.000000
-vt 0.750000 0.250000
-vt 0.500000 0.500000
-vt 0.250000 0.250000
-vt 0.250000 0.500000
-vt 0.375000 0.500000
-vt 0.500000 1.000000
-vt 0.500000 0.500000
-vt 0.625000 0.500000
-vt 0.750000 0.500000
-vt 0.375000 0.000000
-vt 0.625000 0.000000
-vt 0.625000 0.250000
-vt 0.375000 0.250000
-vt 0.625000 0.500000
-vt 0.375000 0.500000
-vt 0.625000 0.750000
-vt 0.375000 0.750000
-vt 0.625000 1.000000
-vt 0.375000 1.000000
-vt 0.875000 0.000000
-vt 0.875000 0.250000
-vt 0.125000 0.000000
-vt 0.125000 0.250000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn 0.000000 -0.951057 -0.309016
-vn 0.000000 -0.809017 -0.587785
-vn 0.000000 -0.809017 -0.587785
-vn 0.000000 -0.951057 -0.309016
-vn 0.000000 -0.587785 -0.809017
-vn 0.000000 -0.587785 -0.809017
-vn 0.000000 -0.309017 -0.951057
-vn 0.000000 -0.309017 -0.951057
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.309017 -0.951056
-vn 0.000000 0.309017 -0.951056
-vn 0.000000 0.587786 -0.809017
-vn 0.000000 0.587786 -0.809017
-vn 0.000000 0.809017 -0.587785
-vn 0.000000 0.809017 -0.587785
-vn 0.000000 0.951057 -0.309017
-vn 0.000000 0.951057 -0.309017
-vn 0.000000 1.000000 0.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 0.951057 0.309017
-vn 0.000000 0.951057 0.309017
-vn 0.000000 0.809017 0.587785
-vn 0.000000 0.809017 0.587785
-vn 0.000000 0.587785 0.809017
-vn 0.000000 0.587785 0.809017
-vn 0.000000 0.309017 0.951057
-vn 0.000000 0.309017 0.951057
-vn 0.000000 -0.000000 1.000000
-vn 0.000000 -0.000000 1.000000
-vn 0.000000 -0.309017 0.951057
-vn 0.000000 -0.309017 0.951057
-vn 0.000000 -0.587785 0.809017
-vn 0.000000 -0.587785 0.809017
-vn 0.000000 -0.809017 0.587785
-vn 0.000000 -0.809017 0.587785
-vn 0.000000 -0.951057 0.309017
-vn 0.000000 -0.951057 0.309017
-vn 0.000000 -1.000000 0.000001
-vn 0.000000 -1.000000 0.000001
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 -0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 -0.000000 0.000000
-vn -1.000000 -0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 0.000000 0.951057 -0.309016
-vn 0.000000 0.809017 -0.587786
-vn 0.000000 0.809017 -0.587786
-vn 0.000000 0.951057 -0.309016
-vn 0.000000 0.587785 -0.809017
-vn 0.000000 0.587785 -0.809017
-vn 0.000000 0.309017 -0.951057
-vn 0.000000 0.309017 -0.951057
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 -0.309017 -0.951056
-vn 0.000000 -0.309017 -0.951056
-vn 0.000000 -0.587785 -0.809017
-vn 0.000000 -0.587785 -0.809017
-vn 0.000000 -0.809017 -0.587785
-vn 0.000000 -0.809017 -0.587785
-vn 0.000000 -0.951057 -0.309017
-vn 0.000000 -0.951057 -0.309017
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -0.951056 0.309018
-vn 0.000000 -0.951056 0.309018
-vn 0.000000 -0.809017 0.587786
-vn 0.000000 -0.809017 0.587786
-vn 0.000000 -0.587786 0.809017
-vn 0.000000 -0.587786 0.809017
-vn 0.000000 -0.309017 0.951056
-vn 0.000000 -0.309017 0.951056
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.309017 0.951056
-vn 0.000000 0.309017 0.951056
-vn 0.000000 0.587785 0.809017
-vn 0.000000 0.587785 0.809017
-vn 0.000000 0.809017 0.587786
-vn 0.000000 0.809017 0.587786
-vn 0.000000 0.951057 0.309017
-vn 0.000000 0.951057 0.309017
-vn 0.000000 1.000000 0.000001
-vn 0.000000 1.000000 0.000001
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 -0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 -0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn -0.816497 0.000000 0.577350
-vn -0.816497 0.000000 0.577350
-vn -0.816497 0.000000 0.577350
-vn -0.000000 -0.816497 0.577350
-vn -0.000000 -0.816497 0.577350
-vn -0.000000 -0.816497 0.577350
-vn 0.816497 0.000000 0.577350
-vn 0.816497 0.000000 0.577350
-vn 0.816497 0.000000 0.577350
-vn 0.000000 0.816497 0.577350
-vn 0.000000 0.816497 0.577350
-vn 0.000000 0.816497 0.577350
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 0.000000 1.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 1.000000 0.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.000000 -1.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn 1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-vn -1.000000 0.000000 0.000000
-s off
-g pCube3
-usemtl lambert2SG
-f 1/1/1 2/2/2 4/4/3 3/3/4
-f 3/3/5 4/4/6 6/6/7 5/5/8
-f 5/5/9 6/6/10 8/8/11 7/7/12
-f 7/7/13 8/8/14 2/10/15 1/9/16
-f 2/2/17 8/11/18 6/12/19 4/4/20
-f 7/13/21 1/1/22 3/3/23 5/14/24
-s 1
-usemtl initialShadingGroup
-f 9/15/25 10/16/26 30/17/27 29/18/28
-f 10/16/26 11/19/29 31/20/30 30/17/27
-f 11/19/29 12/21/31 32/22/32 31/20/30
-f 12/21/31 13/23/33 33/24/34 32/22/32
-f 13/23/33 14/25/35 34/26/36 33/24/34
-f 14/25/35 15/27/37 35/28/38 34/26/36
-f 15/27/37 16/29/39 36/30/40 35/28/38
-f 16/29/39 17/31/41 37/32/42 36/30/40
-f 17/31/41 18/33/43 38/34/44 37/32/42
-f 18/33/43 19/35/45 39/36/46 38/34/44
-f 19/35/45 20/37/47 40/38/48 39/36/46
-f 20/37/47 21/39/49 41/40/50 40/38/48
-f 21/39/49 22/41/51 42/42/52 41/40/50
-f 22/41/51 23/43/53 43/44/54 42/42/52
-f 23/43/53 24/45/55 44/46/56 43/44/54
-f 24/45/55 25/47/57 45/48/58 44/46/56
-f 25/47/57 26/49/59 46/50/60 45/48/58
-f 26/49/59 27/51/61 47/52/62 46/50/60
-f 27/51/61 28/53/63 48/54/64 47/52/62
-f 28/53/63 9/55/25 29/56/28 48/54/64
-s 2
-f 10/57/65 9/58/66 49/59/67
-f 11/60/68 10/57/65 49/59/67
-f 12/61/69 11/60/68 49/59/67
-f 13/62/70 12/61/69 49/59/67
-f 14/63/71 13/62/70 49/59/67
-f 15/64/72 14/63/71 49/59/67
-f 16/65/73 15/64/72 49/59/67
-f 17/66/74 16/65/73 49/59/67
-f 18/67/75 17/66/74 49/59/67
-f 19/68/76 18/67/75 49/59/67
-f 20/69/77 19/68/76 49/59/67
-f 21/70/78 20/69/77 49/59/67
-f 22/71/79 21/70/78 49/59/67
-f 23/72/80 22/71/79 49/59/67
-f 24/73/81 23/72/80 49/59/67
-f 25/74/82 24/73/81 49/59/67
-f 26/75/83 25/74/82 49/59/67
-f 27/76/84 26/75/83 49/59/67
-f 28/77/85 27/76/84 49/59/67
-f 9/58/66 28/77/85 49/59/67
-s 3
-f 29/78/86 30/79/87 50/80/88
-f 30/79/87 31/81/89 50/80/88
-f 31/81/89 32/82/90 50/80/88
-f 32/82/90 33/83/91 50/80/88
-f 33/83/91 34/84/92 50/80/88
-f 34/84/92 35/85/93 50/80/88
-f 35/85/93 36/86/94 50/80/88
-f 36/86/94 37/87/95 50/80/88
-f 37/87/95 38/88/96 50/80/88
-f 38/88/96 39/89/97 50/80/88
-f 39/89/97 40/90/98 50/80/88
-f 40/90/98 41/91/99 50/80/88
-f 41/91/99 42/92/100 50/80/88
-f 42/92/100 43/93/101 50/80/88
-f 43/93/101 44/94/102 50/80/88
-f 44/94/102 45/95/103 50/80/88
-f 45/95/103 46/96/104 50/80/88
-f 46/96/104 47/97/105 50/80/88
-f 47/97/105 48/98/106 50/80/88
-f 48/98/106 29/78/86 50/80/88
-s 4
-f 51/99/107 52/100/108 72/101/109 71/102/110
-f 52/100/108 53/103/111 73/104/112 72/101/109
-f 53/103/111 54/105/113 74/106/114 73/104/112
-f 54/105/113 55/107/115 75/108/116 74/106/114
-f 55/107/115 56/109/117 76/110/118 75/108/116
-f 56/109/117 57/111/119 77/112/120 76/110/118
-f 57/111/119 58/113/121 78/114/122 77/112/120
-f 58/113/121 59/115/123 79/116/124 78/114/122
-f 59/115/123 60/117/125 80/118/126 79/116/124
-f 60/117/125 61/119/127 81/120/128 80/118/126
-f 61/119/127 62/121/129 82/122/130 81/120/128
-f 62/121/129 63/123/131 83/124/132 82/122/130
-f 63/123/131 64/125/133 84/126/134 83/124/132
-f 64/125/133 65/127/135 85/128/136 84/126/134
-f 65/127/135 66/129/137 86/130/138 85/128/136
-f 66/129/137 67/131/139 87/132/140 86/130/138
-f 67/131/139 68/133/141 88/134/142 87/132/140
-f 68/133/141 69/135/143 89/136/144 88/134/142
-f 69/135/143 70/137/145 90/138/146 89/136/144
-f 70/137/145 51/139/107 71/140/110 90/138/146
-s 5
-f 52/141/147 51/142/148 91/143/149
-f 53/144/150 52/141/147 91/143/149
-f 54/145/151 53/144/150 91/143/149
-f 55/146/152 54/145/151 91/143/149
-f 56/147/153 55/146/152 91/143/149
-f 57/148/154 56/147/153 91/143/149
-f 58/149/155 57/148/154 91/143/149
-f 59/150/156 58/149/155 91/143/149
-f 60/151/157 59/150/156 91/143/149
-f 61/152/158 60/151/157 91/143/149
-f 62/153/159 61/152/158 91/143/149
-f 63/154/160 62/153/159 91/143/149
-f 64/155/161 63/154/160 91/143/149
-f 65/156/162 64/155/161 91/143/149
-f 66/157/163 65/156/162 91/143/149
-f 67/158/164 66/157/163 91/143/149
-f 68/159/165 67/158/164 91/143/149
-f 69/160/166 68/159/165 91/143/149
-f 70/161/167 69/160/166 91/143/149
-f 51/142/148 70/161/167 91/143/149
-s 6
-f 71/162/168 72/163/169 92/164/170
-f 72/163/169 73/165/171 92/164/170
-f 73/165/171 74/166/172 92/164/170
-f 74/166/172 75/167/173 92/164/170
-f 75/167/173 76/168/174 92/164/170
-f 76/168/174 77/169/175 92/164/170
-f 77/169/175 78/170/176 92/164/170
-f 78/170/176 79/171/177 92/164/170
-f 79/171/177 80/172/178 92/164/170
-f 80/172/178 81/173/179 92/164/170
-f 81/173/179 82/174/180 92/164/170
-f 82/174/180 83/175/181 92/164/170
-f 83/175/181 84/176/182 92/164/170
-f 84/176/182 85/177/183 92/164/170
-f 85/177/183 86/178/184 92/164/170
-f 86/178/184 87/179/185 92/164/170
-f 87/179/185 88/180/186 92/164/170
-f 88/180/186 89/181/187 92/164/170
-f 89/181/187 90/182/188 92/164/170
-f 90/182/188 71/162/168 92/164/170
-s off
-usemtl lambert2SG
-f 93/183/189 96/184/190 95/185/191 94/186/192
-f 93/187/193 94/188/194 97/189/195
-f 94/188/196 95/190/197 97/189/198
-f 95/190/199 96/191/200 97/189/201
-f 96/191/202 93/192/203 97/189/204
-usemtl initialShadingGroup
-f 98/193/205 99/194/206 101/195/207 100/196/208
-f 100/196/209 101/195/210 103/197/211 102/198/212
-f 102/198/213 103/197/214 105/199/215 104/200/216
-f 104/200/217 105/199/218 99/201/219 98/202/220
-f 99/194/221 105/203/222 103/204/223 101/195/224
-f 104/205/225 98/193/226 100/196/227 102/206/228

+ 0 - 25
app/src/main/assets/intro_res

@@ -1,25 +0,0 @@
-{
-	"comment" : "Venez prouver vos talents",
-	"name" : "intro",
-	"position" : 
-	[
-		0.0,
-		0.0,
-		0.0
-	],
-	"rotation" : 
-	[
-		0.0,
-		0.0,
-		0.0
-	],
-	"scale" : 
-	[
-		1.0,
-		1.0,
-		1.0
-	],
-	"stage" : 0,
-	"title" : "Le test d'aventuriers",
-	"type" : "Video"
-}

binární
app/src/main/assets/intro_video


binární
app/src/main/assets/map


+ 0 - 7
app/src/main/assets/mtl_a_mtl

@@ -1,7 +0,0 @@
-newmtl initialShadingGroup
-illum 4
-Kd 0.00 0.00 0.00
-Ka 0.00 0.00 0.00
-Tf 1.00 1.00 1.00
-map_Kd a_texture.jpg
-Ni 1.00

+ 0 - 7
app/src/main/assets/mtl_b_mtl

@@ -1,7 +0,0 @@
-newmtl initialShadingGroup
-illum 4
-Kd 0.00 0.00 0.00
-Ka 0.00 0.00 0.00
-Tf 1.00 1.00 1.00
-map_Kd b_texture.jpg
-Ni 1.00

+ 0 - 7
app/src/main/assets/mtl_c_mtl

@@ -1,7 +0,0 @@
-newmtl initialShadingGroup
-illum 4
-Kd 0.00 0.00 0.00
-Ka 0.00 0.00 0.00
-Tf 1.00 1.00 1.00
-map_Kd c_texture.jpg
-Ni 1.00

+ 0 - 7
app/src/main/assets/mtl_d_mtl

@@ -1,7 +0,0 @@
-newmtl initialShadingGroup
-illum 4
-Kd 0.00 0.00 0.00
-Ka 0.00 0.00 0.00
-Tf 1.00 1.00 1.00
-map_Kd d_texture.jpg
-Ni 1.00

+ 0 - 7
app/src/main/assets/mtl_e_mtl

@@ -1,7 +0,0 @@
-newmtl initialShadingGroup
-illum 4
-Kd 0.00 0.00 0.00
-Ka 0.00 0.00 0.00
-Tf 1.00 1.00 1.00
-map_Kd e_texture.jpg
-Ni 1.00

+ 1 - 1
app/src/main/java/app/mar/activities/ARActivity.java

@@ -390,7 +390,7 @@ public class ARActivity extends RendererActivity
         mGame.newSensorManager(this);
         loadUI();
 
-        Challenge c = mGame.getCurrentChallenge();
+        Challenge c = mGame.getCurrentChallenge(null);
         if(c!=null)
         {
             if(c instanceof ARTreasure)

+ 6 - 1
app/src/main/java/app/mar/activities/ChallengeDriver.java

@@ -4,10 +4,11 @@ import android.net.Uri;
 import android.view.View;
 
 import app.mar.game.Area;
+import app.mar.game.Game;
 import app.mar.game.challenges.Challenge;
 
 public interface ChallengeDriver extends ChallengeFragment.OnFragmentInteractionListener {
-    public void challengeValidate(Challenge c);
+    public void challengeValidate(Challenge c, Game g, ChallengeDriver cd);
     public Challenge currentChallenge();
     public void setFragment(Class c);
     public void onFragmentInteraction(Uri uri);
@@ -18,9 +19,13 @@ public interface ChallengeDriver extends ChallengeFragment.OnFragmentInteraction
     public void   resumeLocalisation();
     public void   pauseLocalisation();
     public double getDistanceWith(Area a);
+    public double getAccuracy();
 
 
     public void setVisibilityView(int res, int state);
     public void setVisibilityView(int[] res, int state);
 
+    public void setFinished();
+    public void setFailed();
+
 }

+ 84 - 7
app/src/main/java/app/mar/activities/ChallengeFragment.java

@@ -3,31 +3,40 @@ package app.mar.activities;
 import android.app.Activity;
 import android.app.Fragment;
 import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
+import android.util.Log;
 import android.util.TypedValue;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import java.util.ArrayList;
 import java.util.Timer;
 import java.util.TimerTask;
 
 import app.mar.game.Area;
+import app.mar.game.Resource;
+import app.mar.game.ResourceManager;
 import app.mar.game.challenges.Challenge;
 import app.mar.game.challenges.GeoIndice;
 import app.mar.game.challenges.IGeoTreasure;
 import app.mar.game.challenges.Indice;
 import app.mar.game.challenges.TextIndice;
 import app.mar.utils.L;
+import app.mar.utils.files.FileManager;
+import uk.co.senab.photoview.PhotoViewAttacher;
 
 public abstract class ChallengeFragment extends Fragment {
     public abstract boolean check();
-    protected abstract void onInitChallenge(Challenge c);
     protected abstract  void onResetUi();
 
 
@@ -36,6 +45,8 @@ public abstract class ChallengeFragment extends Fragment {
     protected TextView      mUIGeoIndice;
     protected LinearLayout  mUIGlobalIndice;
     protected Challenge     mChallenge;
+    protected ImageView     mImage;
+    private PhotoViewAttacher mAttacher;
 
     protected Timer         mTimer;
 
@@ -46,6 +57,42 @@ public abstract class ChallengeFragment extends Fragment {
     };
 
 
+    protected void onInitChallenge(Challenge c)
+    {
+        if(c!=null) setImageResource(c.getResourceName());
+    }
+
+    public boolean onBackPressed()
+    {
+        stopGeoUpdateTimer();
+        return true;
+    }
+
+    protected void setImageResource(String res)
+    {
+        Resource r = ResourceManager.getInstance().get(res);
+
+        if(r!=null && r.isImage() )
+        {
+            String name = r.getName();
+            Bitmap bmp=null;
+            try {
+                bmp = FileManager.openImage(getActivity(), name);
+            } catch (Exception e) {
+                e.printStackTrace();
+                Toast.makeText(getActivity(), "Impossible de charger '"+name+"'", Toast.LENGTH_LONG).show();
+            }
+
+            mImage.setImageBitmap(bmp);
+            mAttacher = new PhotoViewAttacher(mImage);
+            mAttacher.setMaximumScale(20);
+        }
+        else
+        {
+
+        }
+    }
+
     public void resetUi()
     {
         if(mUIGeoIndice!=null)
@@ -80,6 +127,8 @@ public abstract class ChallengeFragment extends Fragment {
             }else if(ind instanceof TextIndice && mUITextIndices!=null)
             {
                 TextView tv = new TextView(getActivity());
+
+                tv.setTextColor(Color.WHITE);
                 tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
                 tv.setText("  Indice "+(indInd+1)+" : "+((TextIndice) ind).getText());
                 mUITextIndices.addView(tv);
@@ -141,15 +190,20 @@ public abstract class ChallengeFragment extends Fragment {
         mUITextIndices= (LinearLayout) v.findViewById(R.id.ll_textIndices);
         mUIGeoIndice= (TextView) v.findViewById(R.id.tv_geoIndice);
         mUIGlobalIndice = (LinearLayout) v.findViewById(R.id.ll_rootIndices);
+        mImage = (ImageView) v.findViewById(R.id.iv_img);
         return v;
     }
 
 
     public void initChallenge(Challenge c)
     {
+        if(c==null)
+        {
+            getDriver().setFinished();
+        }
         mChallenge=c;
         resetUi();
-        if(!mChallenge.hasNextIndice())
+        if(mChallenge!=null && !mChallenge.hasNextIndice())
         {
             getDriver().setVisibilityView(R.id.btn_indice, View.INVISIBLE);
         }
@@ -161,10 +215,14 @@ public abstract class ChallengeFragment extends Fragment {
         Activity act = getActivity();
         if(act instanceof ChallengeDriver)
             return (ChallengeDriver)act;
+        else if(act==null)
+            return null;
         throw new RuntimeException("Error Activty hosting this Fragment ("+getClass()+") is not a ChallengeDriver");
     }
 
 
+
+
     protected void ready()
     {
         getDriver().onReady();
@@ -185,7 +243,7 @@ public abstract class ChallengeFragment extends Fragment {
 
     public void onResume() {
         super.onResume();
-        updateIndices();
+        if(mChallenge!=null) updateIndices();
     }
 
     public void onPause() {
@@ -245,9 +303,26 @@ public abstract class ChallengeFragment extends Fragment {
         gt=(IGeoTreasure) mChallenge;
 
         Area a = gt.getArea();
-        int d= (int)getDriver().getDistanceWith(a);
-        if(d>=0) mUIGeoIndice.setText("Distance "+d+" m");
-        else mUIGeoIndice.setText("Géolocalisation ...");
+
+        ChallengeDriver cd = getDriver();
+
+        if(cd==null)
+        {
+            stopGeoUpdateTimer();
+        }else
+        {
+            int d=(int) cd.getDistanceWith(a);
+            int accuracy = -1;
+            try{
+                accuracy = (int) cd.getAccuracy();
+            }catch(Exception e)
+            {
+            }
+            if(d>=0 && accuracy>=0) mUIGeoIndice.setText("Distance "+d+" m  (+/- "+accuracy+" m)");
+            else mUIGeoIndice.setText("Géolocalisation en cours ...");
+
+        }
+
     }
 
     protected void stopGeoUpdateTimer()
@@ -269,7 +344,9 @@ public abstract class ChallengeFragment extends Fragment {
 
     private void timerCallback()
     {
-        getActivity().runOnUiThread(mTimerTick);
+        Activity a = getActivity();
+        if(a!=null) a.runOnUiThread(mTimerTick);
+        else stopGeoUpdateTimer();
     }
 
 

+ 0 - 1
app/src/main/java/app/mar/activities/CreditsActivity.java

@@ -50,6 +50,5 @@ public class CreditsActivity extends AppCompatActivity {
             mText.setText(Html.fromHtml(CREDITS, Html.FROM_HTML_MODE_COMPACT));
         }
 
-        FontChangeCrawler.setFont(this);
     }
 }

+ 104 - 22
app/src/main/java/app/mar/activities/HostActivity.java

@@ -6,6 +6,7 @@ import android.app.FragmentTransaction;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.View;
 import android.widget.Button;
 import android.widget.TextView;
@@ -36,6 +37,13 @@ public class HostActivity extends Activity implements ChallengeDriver{
     protected QRCodeFragment mQRCodeFragment;
     protected QuestionFragment mQuestionFragment;
     protected ChallengeFragment mCurrentFragment;
+    protected boolean isFirstRessrouceViewed=true;
+
+    private static int sViewerDepth=0;
+
+    public static void decViewerDepth() {  sViewerDepth--;   }
+    public static void incViewerDepth() {  sViewerDepth++;   }
+    private static final int ACTIVITY_RESULT_RESOURCE_VIEWER = 1;
 
     private Runnable mTimerTick = new Runnable() {
         public void run() {
@@ -80,6 +88,9 @@ public class HostActivity extends Activity implements ChallengeDriver{
 
         updateCode();
 
+        if(mGame.isFirstChallenge()) {
+            mGame.getCurrentStage().execStartEvent(this, mGame);
+        }
         startChallenge();
 
     }
@@ -114,7 +125,7 @@ public class HostActivity extends Activity implements ChallengeDriver{
 
     @Override
     public void onReady() {
-        Challenge chall = mGame.getCurrentChallenge();
+        Challenge chall = mGame.getCurrentChallenge(this);
         mCurrentFragment.initChallenge(chall);
     }
 
@@ -125,6 +136,11 @@ public class HostActivity extends Activity implements ChallengeDriver{
         return a.getDistance(mGame.getPlayer());
     }
 
+    @Override
+    public double getAccuracy() {
+        return mGame.getPlayer().getSensorsManager().getPosition().getAccuracy();
+    }
+
 
     @Override
     public void onFragmentInteraction(Uri uri) {
@@ -139,6 +155,7 @@ public class HostActivity extends Activity implements ChallengeDriver{
 
     private void updateCode()
     {
+        Log.e("--------", "Bomb: "+mGame.getBomb().getPasswordKnown());
         mUICode.setText(mGame.getBomb().getPasswordKnown());
     }
 
@@ -148,12 +165,11 @@ public class HostActivity extends Activity implements ChallengeDriver{
         {
             if(mCurrentFragment.check())
             {
-                challengeValidate(mCurrentFragment.getChallenge());
+                challengeValidate(mCurrentFragment.getChallenge(),  mGame, this);
             }
         }
     }
 
-
     public void onClickVideos(View v)
     {
         Intent intent = new Intent(this, ResourceListActivity.class);
@@ -181,55 +197,108 @@ public class HostActivity extends Activity implements ChallengeDriver{
 
     public void onExplose()
     {
-
+        setFailed();
     }
 
-
     public void setVisibilityView(int res, int state)
     {
         View v = findViewById(res);
         if(v!=null) v.setVisibility(state);
     }
 
-
     public void setVisibilityView(int[] res, int state)
     {
         for(int i=0; i<res.length; i++)
             setVisibilityView(res[i], state);
     }
 
-
     public void nextChallenge() {
         Stage s = mGame.getCurrentStage();
-        Challenge c = s.nextChallenge();
+
+        //on lance levenemnt de fin du challenge precedent
+        if(mGame.getCurrentChallenge(this)!=null && !mGame.isFirstChallenge())
+            mGame.getCurrentChallenge(this).execEndEvent(this, mGame);
+
+        Challenge c = s.nextChallenge(this, mGame);
         if(c!=null)
         {
             startChallenge();
+            Log.i("----", "Continue challenge in stage");
         }else //new stage
         {
-            if(mGame.nextStage()!=null)
+            Log.i("----", "New Stage !");
+            mGame.getBomb().addKnownCharacter(s.getCharIndex());
+            updateCode();
+            if(mGame.nextStage(this)!=null) { // il reste au moins une étape
                 startChallenge();
+            }
+            else //c'est fini
+            {
+                startResourceFound();
+                //setFinished();
+            }
+
+        }
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == ACTIVITY_RESULT_RESOURCE_VIEWER) {
+            startResourceFound();
         }
     }
 
-    public void startResourceFound()
+    private boolean startResourceFound()
     {
-        Resource r = null;
-        while( (r=mGame.popLastResource())!=null )
+        if(isFirstRessrouceViewed && !mGame.isFirstChallenge())
+        {
+            isFirstRessrouceViewed=false;
+            if( mGame.getCurrentChallenge(this)!=null)
+                mGame.getCurrentChallenge(this).execStartEvent(this, mGame);
+        }
+        Resource r = mGame.popLastResource();
+
+        if(r!=null )
         {
             Intent intent = AndroidResources.getViewerIntent(this, r);
-            startActivity(intent);
+            incViewerDepth();
+            startActivityForResult(intent, ACTIVITY_RESULT_RESOURCE_VIEWER);
+            return true;
+        }else //plus de ressources a montrer
+        {
+            Challenge c = mGame.getCurrentChallenge(this);
+            if(c!=null) c.execStartEvent(this, mGame);
+            isFirstRessrouceViewed=true;
+            return false;
         }
+
+
     }
 
     @Override
-    public void challengeValidate(Challenge c) {
-        c.setDone();
+    public void challengeValidate(Challenge c, Game g, ChallengeDriver dri) {
+        c.setDone(dri, g);
+        mGame.getBomb().addKnownCharacter(c.getCharIndex());
+        updateCode();
         nextChallenge();
     }
 
     public Challenge currentChallenge() {
-        return mGame.getCurrentChallenge();
+        return mGame.getCurrentChallenge(this);
+    }
+
+    public void setFinished()
+    {
+        Intent intent = new Intent(this, CreditsActivity.class);
+        startActivity(intent);
+        finish();
+    }
+
+    public void setFailed()
+    {
+        Intent intent = new Intent(this, CreditsActivity.class);
+        startActivity(intent);
+        finish();
     }
 
     private boolean startChallenge()
@@ -242,16 +311,24 @@ public class HostActivity extends Activity implements ChallengeDriver{
             v.setVisibility(View.VISIBLE);
         }
 
-        Challenge c = mGame.getCurrentChallenge();
+        startResourceFound();
+
+        Challenge c = mGame.getCurrentChallenge(this);
+
+        if(c==null) //fin du stage
+        {
+            mGame.nextStage(this);
+        }
+
         if(c!=null) {
-            c.exec(this);
+            c.exec(mGame,this);
             b=true;
         }
-        startResourceFound();
+
+        nextChallenge();
         return b;
     }
 
-
     @Override
     public void startLocalisation() {
         mGame.newSensorManager(this);
@@ -267,5 +344,10 @@ public class HostActivity extends Activity implements ChallengeDriver{
         mGame.onPause(this);
     }
 
-
-}
+    @Override
+    public void onBackPressed()
+    {
+        if(mCurrentFragment==null || mCurrentFragment.onBackPressed())
+            super.onBackPressed();
+    }
+}

+ 13 - 5
app/src/main/java/app/mar/activities/MediaViewerAcitvity.java

@@ -1,5 +1,7 @@
 package app.mar.activities;
 
+import android.app.Activity;
+import android.content.Intent;
 import android.media.MediaPlayer;
 import android.os.Handler;
 import android.support.v7.app.AppCompatActivity;
@@ -54,7 +56,7 @@ public class MediaViewerAcitvity extends AppCompatActivity implements MediaPlaye
         mImageView.setImageResource(R.drawable.audio);
 
         mFrameLayout.addView(mMediaView);
-        mFrameLayout.addView(mImageView);
+        //mFrameLayout.addView(mImageView);
 
 
         if(getIntent().hasExtra("resource"))
@@ -67,18 +69,15 @@ public class MediaViewerAcitvity extends AppCompatActivity implements MediaPlaye
             String path=mResource.getName();
             if(mResource.isAudio())
             {
-                path+="_audio";
                 mImageView.setVisibility(View.VISIBLE);
             }
             else
             {
-                path+="_video";
                 mImageView.setVisibility(View.GONE);
             }
 
             mMediaView.play(path);
         }
-        FontChangeCrawler.setFont(this);
 
 
     }
@@ -111,9 +110,18 @@ public class MediaViewerAcitvity extends AppCompatActivity implements MediaPlaye
         }
     }
 
-    public void onInfos(View v)
+    public void onOk(View v)
     {
+        HostActivity.decViewerDepth();
+        setResult(RESULT_OK, new Intent());
+        finish();
+    }
 
+    @Override
+    public void onBackPressed() {
+        HostActivity.decViewerDepth();
+        setResult(RESULT_OK, new Intent());
+        super.onBackPressed();
     }
 
     @Override

+ 7 - 0
app/src/main/java/app/mar/activities/MenuActivity.java

@@ -13,6 +13,7 @@ import android.widget.Button;
 import android.widget.RelativeLayout;
 import android.widget.Toast;
 
+import app.mar.game.Resource;
 import app.mar.ui.RotateButton;
 import app.mar.utils.AndroidResources;
 import app.mar.game.Game;
@@ -126,6 +127,12 @@ public  class  MenuActivity extends Activity implements View.OnClickListener {
 
         Intent intent = new Intent(this, HostActivity.class);
         startActivity(intent);
+        finish();
+
+        ////////////////////////////////////////////////////////////////////
+
+
+
 
         /// a dela
 

+ 2 - 0
app/src/main/java/app/mar/activities/PermissionActivity.java

@@ -39,6 +39,7 @@ public class PermissionActivity extends AppCompatActivity {
         setContentView(R.layout.activity_permission);
         ArrayList<String> al = new ArrayList<String>();
 
+        
 
         FileManager.init(this);
         mText = (TextView) findViewById(R.id.disclamer);
@@ -101,6 +102,7 @@ public class PermissionActivity extends AppCompatActivity {
         {
             Intent intent = new Intent(this, MenuActivity.class);
             startActivity(intent);
+            finish();
         }
     }
 

+ 4 - 0
app/src/main/java/app/mar/activities/QCMFragment.java

@@ -92,6 +92,9 @@ public class QCMFragment extends ChallengeFragment {
     @Override
     public void onInitChallenge(Challenge c) {
         mUIGoupQCM.removeAllViews();
+
+
+        super.onInitChallenge(c);
         if (c instanceof QCM) {
             mQCM = (QCM) c;
 
@@ -105,6 +108,7 @@ public class QCMFragment extends ChallengeFragment {
                 rprms.gravity = 1;
                 mUIGoupQCM.addView(radioButton, rprms);
             }
+
         } else {
             Toast.makeText(getActivity(), "Error l'entrée n'est pas une question ! ", Toast.LENGTH_LONG).show();
         }

+ 107 - 3
app/src/main/java/app/mar/activities/QRCodeFragment.java

@@ -2,13 +2,18 @@ package app.mar.activities;
 
 import android.app.Activity;
 import android.content.pm.PackageManager;
+import android.graphics.Color;
 import android.os.Bundle;
 import android.app.Fragment;
+import android.util.Log;
+import android.util.TypedValue;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.TextView;
 import android.widget.Toast;
 
 import com.google.zxing.ResultPoint;
@@ -20,10 +25,15 @@ import com.journeyapps.barcodescanner.DecoratedBarcodeView;
 
 import java.util.List;
 
+import app.mar.game.Area;
 import app.mar.game.Game;
 import app.mar.game.challenges.Challenge;
+import app.mar.game.challenges.GeoIndice;
+import app.mar.game.challenges.IGeoTreasure;
+import app.mar.game.challenges.Indice;
 import app.mar.game.challenges.QRCodeGeoTreasure;
 import app.mar.game.challenges.QRCodeTreasure;
+import app.mar.game.challenges.TextIndice;
 
 
 /**
@@ -35,16 +45,28 @@ import app.mar.game.challenges.QRCodeTreasure;
  * create an instance of this fragment.
  */
 public class QRCodeFragment extends ChallengeFragment  implements
-        DecoratedBarcodeView.TorchListener, BarcodeCallback {
+        DecoratedBarcodeView.TorchListener, BarcodeCallback, View.OnClickListener{
     private CaptureManager capture;
     private DecoratedBarcodeView barcodeScannerView;
     private Button switchFlashlightButton;
+    private Button goToScan;
     private BeepManager beepManager;
+    private View vPresRoot;
+    private View vScanRoot;
     private Game mGame;
     public static final int REQUEST_CODE = 2001;
     private QRCodeTreasure mQr;
     private OnFragmentInteractionListener mListener;
 
+    protected static final int STATE_PRESENTATION=0;
+    protected static final int STATE_RA=1;
+    protected int state=STATE_PRESENTATION;
+
+
+    protected LinearLayout mUITextIndices2;
+    protected TextView      mUIGeoIndice2;
+    protected LinearLayout  mUIGlobalIndice2;
+
     public QRCodeFragment() {
         // Required empty public constructor
     }
@@ -71,6 +93,8 @@ public class QRCodeFragment extends ChallengeFragment  implements
 
     @Override
     protected void onInitChallenge(Challenge c) {
+        super.onInitChallenge(c);
+
         if(c instanceof QRCodeTreasure) {
             mQr = (QRCodeTreasure) c;
         }else
@@ -83,11 +107,23 @@ public class QRCodeFragment extends ChallengeFragment  implements
         }
 
         getDriver().setVisibilityView(R.id.btn_valid, View.INVISIBLE);
+
     }
 
     @Override
     protected void onResetUi() {
-
+        state=STATE_PRESENTATION;
+        if(mUIGeoIndice2!=null)
+        {
+            mUIGeoIndice2.setVisibility(View.GONE);
+        }
+        if(mUITextIndices2!=null)
+        {
+            mUITextIndices2.removeAllViews();
+        }
+        if(mUIGlobalIndice2!=null) {
+            mUIGlobalIndice2.setVisibility(View.GONE);
+        }
     }
 
     @Override
@@ -100,7 +136,15 @@ public class QRCodeFragment extends ChallengeFragment  implements
         beepManager=new BeepManager(getActivity());
 
         switchFlashlightButton = (Button)v.findViewById(R.id.switch_flashlight);
+        goToScan = (Button)v.findViewById(R.id.btn_scan);
+        goToScan.setOnClickListener(this);
+        vPresRoot=v.findViewById(R.id.presentation);
+        vScanRoot=v.findViewById(R.id.root_qr);
+
 
+        mUITextIndices2= (LinearLayout) v.findViewById(R.id.ll_textIndices2);
+        mUIGeoIndice2= (TextView) v.findViewById(R.id.tv_geoIndice2);
+        mUIGlobalIndice2 = (LinearLayout) v.findViewById(R.id.ll_rootIndices2);
 
         if (!hasFlash()) {
             switchFlashlightButton.setVisibility(View.GONE);
@@ -114,6 +158,8 @@ public class QRCodeFragment extends ChallengeFragment  implements
     }
 
 
+
+
     @Override
     public void onStart() {
         super.onStart();
@@ -189,9 +235,11 @@ public class QRCodeFragment extends ChallengeFragment  implements
 
         if(result.getText().compareTo(mQr.getQRValue())==0)
         {
+            Log.i("-----", "Challenge '"+mQr.getName()+"' validated !");
             barcodeScannerView.pause();
             Activity act = getActivity();
-            getDriver().challengeValidate(mChallenge);
+            getDriver().challengeValidate(mChallenge, mGame, (ChallengeDriver)getActivity());
+            stopGeoUpdateTimer();
         }else
         {
             Toast.makeText(getActivity(), mQr.getBadQRMessage(), Toast.LENGTH_LONG).show();
@@ -200,6 +248,53 @@ public class QRCodeFragment extends ChallengeFragment  implements
 
     }
 
+    public boolean onBackPressed(){
+        if(state==STATE_PRESENTATION) return true;
+        state=STATE_PRESENTATION;
+        vScanRoot.setVisibility(View.GONE);
+        vPresRoot.setVisibility(View.VISIBLE);
+        return false;
+    }
+
+
+    public Indice showIndice()
+    {
+        Indice indice = super.showIndice();
+        int indInd = mChallenge.getIndiceIndex();
+
+        if(indice!=null && getActivity() instanceof  ChallengeDriver)
+        {
+            if(indice instanceof GeoIndice)
+            {
+                if(mUIGeoIndice2!=null)
+                {
+                    mUIGlobalIndice2.setVisibility(View.VISIBLE);
+                    mUIGeoIndice2.setVisibility(View.VISIBLE);
+                    startGeoUpdateTimer();
+                }
+            }else if(indice instanceof TextIndice)
+            {
+                if(mUITextIndices2!=null)
+                {
+                    mUIGlobalIndice2.setVisibility(View.VISIBLE);
+                    TextView tv = new TextView(getActivity());
+                    tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
+                    tv.setText("  Indice "+(indInd+1)+" : "+((TextIndice) indice).getText());
+                    mUITextIndices2.addView(tv);
+                }
+            }
+        }
+
+        return indice;
+    }
+
+    @Override
+    protected void onGeoUpdateTimer()
+    {
+        super.onGeoUpdateTimer();
+        mUIGeoIndice2.setText(mUIGeoIndice.getText());
+    }
+
     @Override
     public void possibleResultPoints(List<ResultPoint> resultPoints) {
 
@@ -211,4 +306,13 @@ public class QRCodeFragment extends ChallengeFragment  implements
     }
 
 
+    @Override
+    public void onClick(View v) {
+        if(v==goToScan && state==STATE_PRESENTATION)
+        {
+            vScanRoot.setVisibility(View.VISIBLE);
+            vPresRoot.setVisibility(View.GONE);
+            state=STATE_RA;
+        }
+    }
 }

+ 2 - 0
app/src/main/java/app/mar/activities/QuestionFragment.java

@@ -70,6 +70,8 @@ public class QuestionFragment extends ChallengeFragment  {
 
     @Override
     protected void onInitChallenge(Challenge c) {
+        super.onInitChallenge(c);
+
         if(c instanceof Question)
         {
             mQuestion=(Question)c;

+ 1 - 1
app/src/main/java/app/mar/activities/ResourceListActivity.java

@@ -39,7 +39,7 @@ public class ResourceListActivity extends Activity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_resource_list);
-        FontChangeCrawler.setFont(this);
+
         mInventaire = (Inventaire)getIntent().getSerializableExtra("inventaire");
         mList = (ListView) findViewById(R.id.list_layout);
         fill();

+ 229 - 0
app/src/main/java/app/mar/activities/TestVideoActivity.java

@@ -0,0 +1,229 @@
+package app.mar.activities;
+
+import android.media.MediaPlayer;
+import android.os.Bundle;
+import android.os.Handler;
+import android.support.design.widget.FloatingActionButton;
+import android.support.design.widget.Snackbar;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
+import android.view.View;
+import android.widget.Button;
+import android.widget.FrameLayout;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.SeekBar;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import app.mar.game.Resource;
+import app.mar.ui.MediaView;
+import app.mar.utils.FontChangeCrawler;
+
+
+public class TestVideoActivity extends AppCompatActivity implements MediaPlayer.OnSeekCompleteListener,
+        MediaView.OnStartListener,
+        SeekBar.OnSeekBarChangeListener {
+    private Resource mResource;
+    private Button mInfo;
+    private TextView mTitle;
+
+    private FrameLayout mFrameLayout;
+    private ImageButton  mButton;
+    private MediaView mMediaView;
+    private ImageView mImageView;
+    private SeekBar mBar;
+    private Handler mHandler = new Handler();
+    private TestVideoActivity.AutoSeek mAutoSeek;
+    private int mCurrentTime;
+    private int mEndTime;
+    private boolean mUserSeeks=false;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_test_video);
+
+        mFrameLayout = (FrameLayout) findViewById(R.id.media_viewer);
+        mButton = (ImageButton) findViewById(R.id.play);
+        mInfo = (Button) findViewById(R.id.info);
+        mBar = (SeekBar) findViewById(R.id.seekBar);
+        mBar.setOnSeekBarChangeListener(this);
+
+        mTitle = (TextView) findViewById(R.id.title);
+        mAutoSeek = new TestVideoActivity.AutoSeek(mHandler);
+
+        mMediaView = new MediaView(this);
+        mMediaView.setOnStartListener(this);
+        mImageView = new ImageView(this);
+        mImageView.setImageResource(R.drawable.audio);
+
+        mFrameLayout.addView(mMediaView);
+
+        if(getIntent().hasExtra("resource"))
+        {
+            Toast.makeText(this, "OK", Toast.LENGTH_LONG).show();
+            mResource = (Resource) getIntent().getSerializableExtra("resource");
+            if(mResource==null) return;
+
+            mTitle.setText(mResource.getTitle());
+
+            String path=mResource.getName();
+            if(mResource.isAudio())
+            {
+                mImageView.setVisibility(View.VISIBLE);
+            }
+            else
+            {
+                mImageView.setVisibility(View.GONE);
+            }
+
+            mMediaView.play(path);
+        }else
+            Toast.makeText(this, "FAIL", Toast.LENGTH_LONG).show();
+
+
+    }
+
+    public void onFullscreen(View v)
+    {
+        if(mTitle.getVisibility()==View.VISIBLE)
+        {
+            mTitle.setVisibility(View.GONE);
+            mInfo.setVisibility(View.GONE);
+        }else
+        {
+            mTitle.setVisibility(View.VISIBLE);
+            mInfo.setVisibility(View.VISIBLE);
+        }
+    }
+
+    public void onPlayPause(View v)
+    {
+        if(mMediaView.isPlaying())
+        {
+            mAutoSeek.stop();
+            mButton.setImageResource(android.R.drawable.ic_media_play);
+            mMediaView.pause();
+        }else
+        {
+            mAutoSeek.start();
+            mButton.setImageResource(android.R.drawable.ic_media_pause);
+            mMediaView.start();
+        }
+    }
+
+    public void onInfos(View v)
+    {
+
+    }
+
+    @Override
+    public void onSeekComplete(MediaPlayer mediaPlayer) {
+        mAutoSeek.start();
+        mButton.setImageResource(android.R.drawable.ic_media_pause);
+    }
+
+
+
+    public void onUpdateSeek()
+    {
+        if(mMediaView.isPlaying())
+        {
+            mCurrentTime=mMediaView.getTime()/1000;
+            mBar.setProgress(mCurrentTime);
+        }
+    }
+
+    @Override
+    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
+        mUserSeeks=b;
+    }
+
+    @Override
+    public void onStartTrackingTouch(SeekBar seekBar) {
+
+    }
+
+
+    @Override
+    public void onStopTrackingTouch(SeekBar seekBar) {
+        if(mUserSeeks)
+        {
+            mCurrentTime=seekBar.getProgress();
+            mMediaView.seek(mCurrentTime*1000);
+            mAutoSeek.stop();
+            mUserSeeks=false;
+        }
+    }
+
+    @Override
+    public void onStart(MediaView mv) {
+        mCurrentTime=mv.getTime()/1000;
+        mEndTime=mv.getDuration()/1000;
+
+        mBar.setMax(mEndTime);
+        mBar.setProgress(mCurrentTime);
+        mMediaView.setOnSeekCompleteListener(this);
+
+        mAutoSeek.start();
+        mButton.setImageResource(android.R.drawable.ic_media_pause);
+    }
+
+    private class AutoSeek implements Runnable
+    {
+        private Handler mHandler;
+        AutoSeek(Handler h)
+        {
+            mHandler=h;
+        }
+
+        @Override
+        public void run() {
+            onUpdateSeek();
+            mHandler.postDelayed(this, 500);
+        }
+
+        public void start()
+        {
+            mHandler.postDelayed(this, 500);
+        }
+
+
+        public void stop()
+        {
+            mHandler.removeCallbacks(this);
+        }
+    }
+
+    protected void onResume()
+    {
+        super.onResume();
+    }
+
+    protected  void onPause()
+    {
+        mMediaView.stop();
+        mAutoSeek.stop();
+        super.onPause();
+
+    }
+
+    public void finish()
+    {
+
+        mMediaView.stop();
+        mAutoSeek.stop();
+        mMediaView.clearPlayer();
+        super.finish();
+    }
+
+    public void onDestroy()
+    {
+        mMediaView.stop();
+        mAutoSeek.stop();
+        mMediaView.clearPlayer();
+        super.onDestroy();
+    }
+
+}

+ 66 - 22
app/src/main/java/app/mar/game/Bomb.java

@@ -10,22 +10,46 @@ import java.util.Calendar;
 import java.util.Date;
 
 public class Bomb implements Serializable{
+
+    public  static final int BOMB_UNARMED=0;
+    public  static final int BOMB_ARMED=1;
+    public  static final int BOMB_DISARMED=2;
+
     protected long      mDeadLine;
-    protected String   mPassword;
-    protected char    mPasswordKnown[];
+    protected String    mPassword;
+    protected char      mPasswordKnown[];
+    protected int       mStatus;
+    protected int       mMinutes;
 
     public Bomb(String pwd, int min)
     {
+        mMinutes=min;
         mPassword=pwd;
         mPasswordKnown=new char[mPassword.length()];
         for(int i=0; i<mPassword.length(); i++)
             mPasswordKnown[i]='_';
         mDeadLine = Calendar.getInstance().getTimeInMillis()+min*60*1000;
+        mStatus=BOMB_UNARMED;
+    }
+
+
+    public void arm()
+    {
+        mDeadLine = Calendar.getInstance().getTimeInMillis()+mMinutes*60*1000;
+        mStatus=BOMB_ARMED;
     }
 
-    public void addKnownCharacter(int pos, char c)
+    public void disarm()
     {
-        mPasswordKnown[pos]=c;
+        mDeadLine = (mDeadLine - Calendar.getInstance().getTimeInMillis()) / 1000;
+        mStatus=BOMB_DISARMED;
+    }
+
+
+    public void addKnownCharacter(int pos)
+    {
+        if(pos<0) return;
+        mPasswordKnown[pos]=mPassword.charAt(pos);
     }
 
     public String getPasswordKnown()
@@ -46,30 +70,50 @@ public class Bomb implements Serializable{
 
     public String getTimeBeforeBoom()
     {
-        long now = (mDeadLine - Calendar.getInstance().getTimeInMillis())/1000;
-        int h=0,m=0,s=0;
-        String ret = "";
+        if(mStatus==BOMB_ARMED || mStatus==BOMB_DISARMED) {
+            long now = 0;
+            if(mStatus==BOMB_ARMED)
+                now=(mDeadLine - Calendar.getInstance().getTimeInMillis()) / 1000;
+            else
+                now=mDeadLine;
 
-        s=(int)now%60;
-        m=(int) (now%3600)/60;
-        h=(int) now/3600;
 
-        if(h>0)
-        {
-            if(h<10) ret+="0";
-            ret+=h;
-            ret+=" : ";
-        }
+            int h = 0, m = 0, s = 0;
+            String ret = "";
+
+            s = (int) now % 60;
+            m = (int) (now % 3600) / 60;
+            h = (int) now / 3600;
+
+            if (h > 0) {
+                if (h < 10) ret += "0";
+                ret += h;
+                ret += " : ";
+            }
 
-        if(m<10) ret+="0";
-        ret+=m;
+            if (m < 10) ret += "0";
+            ret += m;
 
-        ret+=" : ";
+            ret += " : ";
 
-        if(s<10) ret+="0";
-        ret+=s;
+            if (s < 10) ret += "0";
+            ret += s;
 
-        return ret;
+            return ret;
+        }else
+        {
+            return "--:--:--";
+        }
+    }
+
+    public long getSecondsBeforeBoom()
+    {
+        return (long)  (mDeadLine - Calendar.getInstance().getTimeInMillis())/1000;
+    }
+
+    public void setSecondsBeforeBoom(long s)
+    {
+        mDeadLine=(s+Calendar.getInstance().getTimeInMillis())*1000;
     }
 
     public boolean hasExplosed()

+ 146 - 0
app/src/main/java/app/mar/game/Event.java

@@ -0,0 +1,146 @@
+package app.mar.game;
+
+import android.app.Activity;
+import android.util.Log;
+import android.widget.Toast;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.Serializable;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+
+import app.mar.activities.ChallengeDriver;
+
+public class Event implements Serializable {
+
+    class EventParam
+    {
+        static final int EVT_PARAM_INT = 0;
+        static final int EVT_PARAM_FLOAT = 1;
+        static final int EVT_PARAM_STRING = 2;
+
+        int type;
+        int iValue;
+        String sValue;
+        double dValue;
+
+        EventParam(Object x) {
+            if(x instanceof Integer || x instanceof Long || x instanceof  Byte || x instanceof Short){
+                iValue=(int)x;
+                type=EVT_PARAM_INT;
+            }
+            else if(x instanceof Double || x instanceof Float){
+                dValue=(double)x;
+                type=EVT_PARAM_FLOAT;
+            }else if(x instanceof String){
+                sValue=(String)x;
+                type=EVT_PARAM_STRING;
+            }
+        }
+
+        int optInt(int def){ if(type!=EVT_PARAM_INT) return def; return iValue;}
+        double optDouble(double def){ if(type!=EVT_PARAM_FLOAT) return def; return dValue;}
+        String optString(String def){ if(type!=EVT_PARAM_STRING) return def; return sValue;}
+
+    }
+
+    private String mMethod;
+    private ArrayList<EventParam> mArgs = new ArrayList<EventParam>();
+
+    public class EventReturn{
+        public int code;
+
+        public String message;
+        public ArrayList<Object> args;
+
+        public EventReturn() { }
+        public EventReturn(int c) { code=c;}
+        public EventReturn(int c, String m) { code=c; message=m;}
+        public EventReturn(int c, String m, ArrayList<Object> a) { code=c; message=m; args=a;}
+
+
+        public EventReturn set(int c, String m) { code=c; message=m; return this;}
+        public EventReturn addArg(Object e) {args.add(e); return this;}
+
+        public boolean isError() { return code!=0;}
+    }
+
+    public Event(JSONObject j)
+    {
+        try {
+            mMethod = j.getString("method");
+            JSONArray arr  = j.getJSONArray("args");
+            for(int i=0; i<arr.length(); i++)
+                mArgs.add(new EventParam(arr.get(i)));
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public EventReturn exec(ChallengeDriver a, Game g)
+    {
+        Class[] paramType = new Class[2];
+        paramType[0] = Activity.class;
+        paramType[1] = Game.class;
+        EventReturn ev =  new EventReturn();
+
+
+        try {
+            Method method = this.getClass().getDeclaredMethod(mMethod, paramType);
+            return (EventReturn) method.invoke(this, a, g);
+        } catch (NoSuchMethodException e) {
+            e.printStackTrace();
+            ev.set(-1, "NoSuchMethodException");
+            return ev.addArg(e);
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+            ev.set(-2, "NoSuchMethodException");
+            return ev.addArg(e);
+        } catch (InvocationTargetException e) {
+            e.printStackTrace();
+            ev.set(-3, "InvocationTargetException");
+            return ev.addArg(e);
+        }
+    }
+
+    private int argAsInt(int i, int def) { return mArgs.get(i).optInt(def); }
+    private double argAsDouble(int i, double def) { return mArgs.get(i).optDouble(def);  }
+    private String argAsString(int i, String def) { return mArgs.get(i).optString(def); }
+
+
+
+    public EventReturn armBomb(Activity a, Game g)
+    {
+        g.getBomb().arm();
+        return new EventReturn(0,"OK");
+    }
+
+
+    /**
+     * Si temps > $0 alors temps=$0
+     * $0 : temps en minutes
+     * @return OK
+     */
+    public EventReturn setTimerTo(Activity a, Game g)
+    {
+        long time = g.getBomb().getSecondsBeforeBoom();
+        long seuil = argAsInt(0, 15) * 60;
+        long newTime = (time>seuil)?seuil:time;
+        g.getBomb().setSecondsBeforeBoom(newTime);
+        return new EventReturn(0,"OK");
+    }
+
+
+    public EventReturn print(Activity a, Game g)
+    {
+        Toast.makeText(a, argAsString(0, "Error"), Toast.LENGTH_LONG).show();
+        Log.e( "___DEBUG_EXEC_PRINT___", argAsString(0, "Error"));
+        return new EventReturn(0,"OK");
+    }
+
+
+}

+ 54 - 16
app/src/main/java/app/mar/game/Game.java

@@ -16,6 +16,7 @@ import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.util.ArrayList;
 
+import app.mar.activities.ChallengeDriver;
 import app.mar.game.challenges.Challenge;
 import app.mar.game.challenges.ChallengeReturn;
 import app.mar.game.challenges.Treasure;
@@ -40,7 +41,9 @@ public class Game  implements Serializable {
     protected String           mMap=null;
     protected Inventaire       mInventaire;
 
-    protected ResourceManager mResources = new ResourceManager();
+    protected ArrayList<Event> mEventQueue = new ArrayList<Event>();
+
+    protected ResourceManager mResources = ResourceManager.newInstance();
     protected ChallengeReturn mLastReturn = null;
 
     protected Bomb            mBomb;
@@ -68,6 +71,7 @@ public class Game  implements Serializable {
 
         try {
             mBomb=new Bomb(root.getString("password"), root.getInt("max_time"));
+            //mBomb.arm();
         } catch (JSONException e) {
             e.printStackTrace();
         }
@@ -76,6 +80,7 @@ public class Game  implements Serializable {
         if(mStages.size()>0)
             mCurrentStage=mStages.get(0);
 
+
         if(!mPlayer.hasMagneticField() || !mPlayer.hasAcceleromter())
         {
             mSettings.setARMode(false);
@@ -89,24 +94,49 @@ public class Game  implements Serializable {
         return mCurrentStage;
     }
 
-    public Challenge getCurrentChallenge()
+    public boolean isFirstChallenge()
+    {
+        return mCurrentStageIndex==0 && mCurrentStage.getStep()==0;
+    }
+
+    public void scheduleEventStartStage()
+    {
+
+    }
+
+    public void scheduleEventEndStage()
+    {
+
+    }
+
+    public void scheduleEventEndChallenge()
+    {
+
+    }
+
+    public void scheduleEventStartChallenge()
+    {
+
+    }
+
+
+    public Challenge getCurrentChallenge(ChallengeDriver cd)
     {
         if(mCurrentStage==null) return null;
         Challenge c = mCurrentStage.getCurrentChallenge();
-        if(c==null)
+        /* if(c==null)
         {
-            ArrayList<Resource> res = mCurrentStage.getResources();
-            mInventaire.addResource(res);
-
-            for(int i=0; i<res.size(); i++)
-                mResourceQueue.add(res.get(i));
-
-            nextStage();
-            return getCurrentChallenge();
-        }
+            nextStage(cd);
+            return getCurrentChallenge(cd);
+        }*/
         return c;
     }
 
+    public Resource getResourceByName(String res)
+    {
+        return mResources.get(res);
+    }
+
     public Resource popLastResource()
     {
         if(mResourceQueue.size()>0)
@@ -144,7 +174,10 @@ public class Game  implements Serializable {
     }
 
 
-
+    public boolean isFinished()
+    {
+        return mCurrentStageIndex>=mStages.size();
+    }
 
     /**
      * Sauvegarde la partie (l'objet game)
@@ -242,7 +275,7 @@ public class Game  implements Serializable {
      */
     synchronized public void precache3DResource(Activity contecxt)
     {
-        Challenge c = getCurrentChallenge();
+        Challenge c = getCurrentChallenge((ChallengeDriver)contecxt);
         if(c instanceof Treasure)
         {
 
@@ -316,6 +349,7 @@ public class Game  implements Serializable {
     {
         return mResources.contains(name);
     }
+    
 
     public ChallengeReturn getReturn() {
         return mLastReturn;
@@ -325,16 +359,20 @@ public class Game  implements Serializable {
         this.mLastReturn = mLastReturn;
     }
 
-    public Stage nextStage() {
+    public Stage nextStage(ChallengeDriver cd) {
         mCurrentStageIndex++;
-        if(mCurrentStageIndex<mStages.size())
+        if(mCurrentStageIndex<=mStages.size())
         {
+            mStages.get(mCurrentStageIndex-1).execEndEvent(cd, this);
+
+
             ArrayList<Resource> res = mCurrentStage.getResources();
             mInventaire.addResource(res);
 
             for(int i=0; i<res.size(); i++)
                 mResourceQueue.add(res.get(i));
 
+            if(mStages.size()==mCurrentStageIndex) return mCurrentStage=null;
             return mCurrentStage=mStages.get(mCurrentStageIndex);
         }
         return mCurrentStage=null;

+ 32 - 15
app/src/main/java/app/mar/game/Resource.java

@@ -1,6 +1,7 @@
 package app.mar.game;
 
 import android.app.Activity;
+import android.graphics.Bitmap;
 import android.util.Log;
 
 import org.json.JSONException;
@@ -33,30 +34,44 @@ public class Resource implements Serializable {
 
     protected void loadResourceData(Activity act)
     {
+        Log.w("-----", "Loading resource '"+mName+"'");
         JSONObject obj = JSONAssetsManager.load(act, mName+"_res");
+        if(obj==null) obj = JSONAssetsManager.load(act, mName+".res");
+
+        //mandatory
+        try {
+            mType = obj.getString("type");
+        } catch(JSONException e)
+        {
+            Log.e("-----", "Enable to load resource '"+mName+"'");
+            e.printStackTrace();
+        }
+
+
         try {
             mComment=obj.getString("comment");
-            mPosition.x =(float) obj.getJSONArray("position").getDouble(0);
-            mPosition.y =(float) obj.getJSONArray("position").getDouble(1);
-            mPosition.z =(float) obj.getJSONArray("position").getDouble(2);
+            mStage = obj.getInt("stage");
+            mTitle = obj.getString("title");
+            isLoaded=true;
+        } catch (JSONException e) {
+        }
 
 
-            mRotation.x =(float) obj.getJSONArray("rotation").getDouble(0);
-            mRotation.y =(float) obj.getJSONArray("rotation").getDouble(1);
-            mRotation.z =(float) obj.getJSONArray("rotation").getDouble(2);
+        try {
+            mPosition.x = (float) obj.getJSONArray("position").getDouble(0);
+            mPosition.y = (float) obj.getJSONArray("position").getDouble(1);
+            mPosition.z = (float) obj.getJSONArray("position").getDouble(2);
 
 
-            mScale.x =(float) obj.getJSONArray("scale").getDouble(0);
-            mScale.y =(float) obj.getJSONArray("scale").getDouble(1);
-            mScale.z =(float) obj.getJSONArray("scale").getDouble(2);
+            mRotation.x = (float) obj.getJSONArray("rotation").getDouble(0);
+            mRotation.y = (float) obj.getJSONArray("rotation").getDouble(1);
+            mRotation.z = (float) obj.getJSONArray("rotation").getDouble(2);
 
 
-            mType = obj.getString("type");
-            mTitle = obj.getString("title");
-            mStage = obj.getInt("stage");
-            isLoaded=true;
-        } catch (JSONException e) {
-            e.printStackTrace();
+            mScale.x = (float) obj.getJSONArray("scale").getDouble(0);
+            mScale.y = (float) obj.getJSONArray("scale").getDouble(1);
+            mScale.z = (float) obj.getJSONArray("scale").getDouble(2);
+        }catch (JSONException e) {
         }
 
         try {
@@ -123,6 +138,8 @@ public class Resource implements Serializable {
         return jo;
     }
 
+
+
     public Object3d get3DModel(Activity context)
     {
         if(m3DModel==null)

+ 12 - 1
app/src/main/java/app/mar/game/ResourceManager.java

@@ -12,10 +12,21 @@ import java.util.HashMap;
 public class ResourceManager implements Serializable{
     protected HashMap<String, Resource> mResources = new HashMap<String, Resource>();
     protected Resource mLatestResource = null;
+    protected static ResourceManager sThis = null;
 
+    private ResourceManager()
+    {
+    }
+
+    public static ResourceManager newInstance()
+    {
+        return sThis=new ResourceManager();
+    }
 
-    public ResourceManager()
+    public static ResourceManager getInstance()
     {
+        if(sThis==null) return newInstance();
+        return sThis;
     }
 
     public void addResource(String name, Activity act)

+ 75 - 1
app/src/main/java/app/mar/game/Stage.java

@@ -1,6 +1,7 @@
 package app.mar.game;
 
 import android.app.Activity;
+import android.util.Log;
 
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -9,6 +10,7 @@ import org.json.JSONObject;
 import java.io.Serializable;
 import java.util.ArrayList;
 
+import app.mar.activities.ChallengeDriver;
 import app.mar.game.challenges.Challenge;
 
 public class Stage  implements Serializable {
@@ -17,6 +19,14 @@ public class Stage  implements Serializable {
     protected ArrayList<Resource> mResources = new ArrayList<Resource>();
     protected boolean mDone=false;
     protected int     mStep=0;
+    protected int   mCharIndex=-1;
+
+    protected ArrayList<Event> mStartEvent = new ArrayList<Event>();
+    protected ArrayList<Event> mEndEvent = new ArrayList<Event>();
+
+
+
+
 
     public Stage(Game g, JSONObject root, Activity act)
     {
@@ -46,8 +56,67 @@ public class Stage  implements Serializable {
                 mResources.add(new Resource(chall.getString(i), act));
         } catch (JSONException e) {
         }
+
+        try{
+            mCharIndex = root.getInt("charIndex");
+        } catch (JSONException e) {
+        }
+
+        /**
+         * event_start
+         */
+        try {
+            JSONArray arr = root.getJSONArray("event_start");
+            for(int i=0; i<arr.length(); i++)
+                mStartEvent.add(new Event(arr.getJSONObject(i)));
+
+        } catch (JSONException e) {
+        }
+
+        try {
+            mStartEvent.add(new Event(root.getJSONObject("event_start")));
+        } catch (JSONException e) {
+        }
+
+        /**
+         * event_start
+         */
+        try {
+            JSONArray arr = root.getJSONArray("event_end");
+            for(int i=0; i<arr.length(); i++)
+                mEndEvent.add(new Event(arr.getJSONObject(i)));
+
+        } catch (JSONException e) {
+        }
+
+        try {
+            mEndEvent.add(new Event(root.getJSONObject("event_end")));
+        } catch (JSONException e) {
+        }
+    }
+
+
+    private void execEvent(ArrayList<Event> e, Game g, ChallengeDriver dri)
+    {
+        for(int i=0; i<e.size(); i++)
+            e.get(i).exec(dri, g);
     }
 
+    public void execStartEvent(ChallengeDriver dri, Game g)
+    {
+
+        Log.e("___DEBUG_EXEC___", "Stage exec start '"+mName+"' : "+mCharIndex);
+        execEvent(mStartEvent, g, dri);
+    }
+
+    public void execEndEvent(ChallengeDriver dri, Game g)
+    {
+        Log.e("___DEBUG_EXEC___", "Stage exec end '"+mName+"' : "+mCharIndex);
+        execEvent(mEndEvent, g, dri);
+    }
+
+    public int getCharIndex() {return mCharIndex; }
+
 
     public String getName() {
         return mName;
@@ -73,6 +142,8 @@ public class Stage  implements Serializable {
         this.mDone = mDone;
     }
 
+    public Stage start(ChallengeDriver dri, Game g) { execStartEvent(dri, g); return this;}
+
     public int getStep() {
         return mStep;
     }
@@ -81,14 +152,17 @@ public class Stage  implements Serializable {
         return mChallenge.size();
     }
 
-    public Challenge nextChallenge()
+    public Challenge nextChallenge(ChallengeDriver dri, Game g)
     {
+        if(mStep==0) start(dri, g);
         mStep++;
         if(mStep<mChallenge.size())
             return mChallenge.get(mStep);
+        execEndEvent(dri, g);
         return null;
     }
 
+
     public boolean isFinished()
     {
         if(mStep>=mChallenge.size()) mDone=true;

+ 1 - 1
app/src/main/java/app/mar/game/challenges/ARTreasure.java

@@ -16,7 +16,7 @@ public class ARTreasure extends Treasure implements IGeoTreasure {
     public int getResultCode() { return REQUEST_CODE; }
 
     public ARTreasure(Game g, JSONObject root, Activity act) {
-        super(root, ARActivity.class);
+        super(g, root, ARActivity.class, act);
 
         try
         {

+ 80 - 3
app/src/main/java/app/mar/game/challenges/Challenge.java

@@ -1,6 +1,7 @@
 package app.mar.game.challenges;
 
 import android.app.Activity;
+import android.util.Log;
 
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -12,7 +13,9 @@ import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 
 import app.mar.activities.ChallengeDriver;
+import app.mar.game.Event;
 import app.mar.game.Game;
+import app.mar.game.Resource;
 
 public abstract class Challenge implements Serializable{
 
@@ -28,8 +31,14 @@ public abstract class Challenge implements Serializable{
     protected Class  mStartWith = null;
     protected ArrayList<Indice> mIndices = new ArrayList<Indice>();
     protected int mLastIndiceDiscoveredIndex = 0;
+    protected int mCharIndex=-1;
 
-    public Challenge(JSONObject root, Class start)
+    protected ArrayList<Event> mStartEvent = new ArrayList<Event>();
+    protected ArrayList<Event> mEndEvent = new ArrayList<Event>();
+
+    protected String mResource;
+
+    public Challenge(Game g, JSONObject root, Class start, Activity act)
     {
         mStartWith=start;
         mDone = false;
@@ -45,6 +54,46 @@ public abstract class Challenge implements Serializable{
             e.printStackTrace();
         }
 
+        try {
+            mResource = root.getString("resource");
+            g.registerResource(mResource, act);
+        } catch (JSONException e) {
+            mResource=null;
+        }
+
+
+        /**
+         * event_start
+         */
+        try {
+            JSONArray arr = root.getJSONArray("event_start");
+            for(int i=0; i<arr.length(); i++)
+                mStartEvent.add(new Event(arr.getJSONObject(i)));
+
+        } catch (JSONException e) {
+        }
+
+        try {
+            mStartEvent.add(new Event(root.getJSONObject("event_start")));
+        } catch (JSONException e) {
+        }
+
+        /**
+         * event_start
+         */
+        try {
+            JSONArray arr = root.getJSONArray("event_end");
+            for(int i=0; i<arr.length(); i++)
+                mEndEvent.add(new Event(arr.getJSONObject(i)));
+
+        } catch (JSONException e) {
+        }
+
+        try {
+            mEndEvent.add(new Event(root.getJSONObject("event_end")));
+        } catch (JSONException e) {
+        }
+
         try {
             String s = root.getString("password_char");
             if(s.length()==0) throw new JSONException("password_char is an empty string");
@@ -62,9 +111,31 @@ public abstract class Challenge implements Serializable{
         } catch (JSONException e) {
             e.printStackTrace();
         }
+
+        try {
+            mCharIndex = root.getInt("charIndex");
+        } catch (JSONException e) {
+        }
     }
 
-    public void exec(ChallengeDriver act)
+    private void execEvent(ArrayList<Event> e, ChallengeDriver a, Game g)
+    {
+        for(int i=0; i<e.size(); i++)
+            e.get(i).exec(a,g);
+    }
+
+    public void execStartEvent(ChallengeDriver a,Game g)
+    {
+        Log.e("___DEBUG_EXEC___", "Challenge exec start '"+mName+"'");
+        execEvent(mStartEvent, a, g);
+    }
+    public void execEndEvent(ChallengeDriver a,Game g)
+    {
+        Log.e("___DEBUG_EXEC___", "Challenge exec end '"+mName+"'");
+        execEvent(mEndEvent,a, g);
+    }
+
+    public void exec(Game g, ChallengeDriver act)
     {
         act.setFragment(mStartWith);
     }
@@ -83,9 +154,12 @@ public abstract class Challenge implements Serializable{
         return mDone;
     }
 
-    public void setDone()
+    public int getCharIndex() {return mCharIndex; }
+
+    public void setDone(ChallengeDriver a, Game g)
     {
         mDone=true;
+        execEndEvent(a, g);
     }
 
     public static Class getChallengeClass(String classe)
@@ -160,4 +234,7 @@ public abstract class Challenge implements Serializable{
 
     public ArrayList<Indice> getIndices() { return mIndices; }
 
+    public String getResourceName() {
+        return mResource;
+    }
 }

+ 2 - 15
app/src/main/java/app/mar/game/challenges/QRCodeTreasure.java

@@ -13,19 +13,17 @@ public class QRCodeTreasure extends Treasure {
 
     protected String mQRValue;
     protected String mBadQRMessage;
-    protected String mResource;
     public static final int REQUEST_CODE=2003;
 
     public int getResultCode() { return REQUEST_CODE; }
 
     public QRCodeTreasure(Game g, JSONObject root, Activity a) {
-        super(root, QRCodeFragment.class);
+        super(g, root, QRCodeFragment.class, a);
 
         try {
             mQRValue = root.getString("qr_value");
             mBadQRMessage = root.getString("bad_message");
-            mResource = root.getString("resource");
-            g.registerResource(mResource, a);
+
         } catch (JSONException e) {
             e.printStackTrace();
         }
@@ -35,18 +33,7 @@ public class QRCodeTreasure extends Treasure {
     public String getQRValue() {
         return mQRValue;
     }
-
     public String getBadQRMessage() {
         return mBadQRMessage;
     }
-
-    public String getmResourceName()
-    {
-        return mResource;
-    }
-
-    public Resource getResource(Game g)
-    {
-        return g.findResource(mResource);
-    }
 }

+ 1 - 1
app/src/main/java/app/mar/game/challenges/Question.java

@@ -21,7 +21,7 @@ public class Question extends Challenge {
 
 
     public Question(Game g,JSONObject root, Activity a) {
-        super(root, QuestionFragment.class);
+        super(g, root, QuestionFragment.class, a);
 
         try {
             mQuestion = root.getString("question");

+ 6 - 2
app/src/main/java/app/mar/game/challenges/Treasure.java

@@ -1,12 +1,16 @@
 package app.mar.game.challenges;
 
+import android.app.Activity;
+
 import org.json.JSONObject;
 
+import app.mar.game.Game;
+
 public abstract class Treasure extends Challenge {
 
 
-    public Treasure(JSONObject root, Class c) {
-        super(root, c);
+    public Treasure(Game g, JSONObject root, Class c, Activity a) {
+        super(g, root, c,a );
 
     }
 

+ 1 - 1
app/src/main/java/app/mar/ui/MediaView.java

@@ -47,7 +47,6 @@ public class MediaView extends SurfaceView implements View.OnClickListener,Surfa
 
     }
 
-
     public void stop() {
         if(mPlayer!=null && mPlayer.isPlaying())
             mPlayer.stop();
@@ -69,6 +68,7 @@ public class MediaView extends SurfaceView implements View.OnClickListener,Surfa
         AssetFileDescriptor afd;
         mPlayer = new MediaPlayer();
         afd = FileManager.getAfdMedia(mContext, path);
+        Log.e("------", "Playing '"+path+"'");
         try {
             mPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
         } catch (IOException e) {

+ 4 - 1
app/src/main/java/app/mar/utils/AndroidResources.java

@@ -9,6 +9,7 @@ import android.net.Uri;
 import app.mar.activities.ImageViewerActivity;
 import app.mar.activities.MediaViewerAcitvity;
 import app.mar.activities.ModelViewerActivity;
+import app.mar.activities.TestVideoActivity;
 import app.mar.game.Game;
 import app.mar.game.Resource;
 import min3d.core.Object3d;
@@ -52,8 +53,10 @@ public class AndroidResources {
     public static Intent getViewerIntent(Context c, Resource re)
     {
         Intent intent =null ;
-        if(re.isAudio() || re.isVideo())
+        if(re.isAudio())
             intent = new Intent(c, MediaViewerAcitvity.class);
+        else if( re.isVideo())
+            intent = new Intent(c, TestVideoActivity.class);
         else if(re.is3D())
             intent= new Intent(c, ModelViewerActivity.class);
         else if(re.isImage())

+ 28 - 31
app/src/main/res/layout/activity_media.xml

@@ -7,29 +7,25 @@
     android:paddingLeft="@dimen/activity_horizontal_margin"
     android:paddingRight="@dimen/activity_horizontal_margin"
     android:paddingTop="@dimen/activity_vertical_margin"
-    tools:context=".MediaViewerAcitvity"
-    android:background="@drawable/background">
+    tools:context=".MediaViewerAcitvity">
 
     <Button
-        android:layout_width="wrap_content"
-        android:layout_height="150px"
-        android:text="@string/informations"
         android:id="@+id/info"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
         android:layout_alignParentBottom="true"
+        android:layout_alignParentEnd="true"
         android:layout_alignParentLeft="true"
-        android:layout_alignParentStart="true"
         android:layout_alignParentRight="true"
-        android:layout_alignParentEnd="true"
-        android:onClick="onInfos"
-        android:background="@drawable/uibutton"
-        android:textColor="@color/dull_4"
-        android:textStyle="bold"
-        android:textSize="25px" />
+        android:layout_alignParentStart="true"
+        android:onClick="onOk"
+        android:text="Ok"
+        android:textStyle="bold" />
 
     <ImageButton
+        android:id="@+id/play"
         android:layout_width="40dp"
         android:layout_height="40dp"
-        android:id="@+id/play"
         android:layout_alignTop="@+id/fullscreen"
         android:layout_toLeftOf="@+id/fullscreen"
         android:layout_toStartOf="@+id/fullscreen"
@@ -37,60 +33,61 @@
         android:src="@android:drawable/ic_media_pause" />
 
     <SeekBar
+        android:id="@+id/seekBar"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:id="@+id/seekBar"
-        android:layout_below="@+id/title"
         android:layout_alignBottom="@+id/play"
         android:layout_alignParentLeft="true"
         android:layout_alignParentStart="true"
+        android:layout_below="@+id/title"
         android:layout_toLeftOf="@+id/play"
         android:layout_toStartOf="@+id/play"
         android:background="#191919" />
 
     <TextView
+        android:id="@+id/title"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
-        android:textAppearance="?android:attr/textAppearanceLarge"
-        android:id="@+id/title"
-        android:layout_alignParentTop="true"
+        android:layout_alignParentEnd="true"
         android:layout_alignParentLeft="true"
-        android:layout_alignParentStart="true"
         android:layout_alignParentRight="true"
-        android:layout_alignParentEnd="true"
-        android:textColor="@color/dull_5"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentTop="true"
         android:textAlignment="center"
+        android:textAppearance="?android:attr/textAppearanceLarge"
+        android:textColor="@color/dull_5"
         android:textSize="25dp"
         android:textStyle="bold" />
 
     <ImageButton
+        android:id="@+id/fullscreen"
         android:layout_width="40dp"
         android:layout_height="40dp"
-        android:id="@+id/fullscreen"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentRight="true"
         android:layout_below="@+id/title"
         android:onClick="onFullscreen"
-        android:src="@android:drawable/ic_menu_crop"
-        android:layout_alignParentRight="true"
-        android:layout_alignParentEnd="true" />
+        android:src="@android:drawable/ic_menu_crop" />
 
     <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_below="@+id/seekBar"
+        android:layout_above="@+id/info"
         android:layout_alignParentLeft="true"
         android:layout_alignParentStart="true"
-        android:layout_above="@+id/info"
+        android:layout_below="@+id/seekBar"
         android:gravity="center">
 
         <FrameLayout
+            android:id="@+id/media_viewer"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_alignParentTop="true"
-            android:layout_alignParentLeft="true"
-            android:layout_alignParentStart="true"
             android:layout_alignParentBottom="true"
+            android:layout_alignParentLeft="true"
             android:layout_alignParentRight="true"
-            android:id="@+id/media_viewer"></FrameLayout>
+            android:layout_alignParentStart="true"
+            android:layout_alignParentTop="true"></FrameLayout>
+
     </RelativeLayout>
 
 </RelativeLayout>

+ 83 - 0
app/src/main/res/layout/activity_test_video.xml

@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    tools:context="app.mar.activities.TestVideoActivity">
+
+
+
+    <ImageButton
+        android:layout_width="40dp"
+        android:layout_height="40dp"
+        android:id="@+id/play"
+        android:layout_alignTop="@+id/fullscreen"
+        android:layout_toLeftOf="@+id/fullscreen"
+        android:layout_toStartOf="@+id/fullscreen"
+        android:onClick="onPlayPause"
+        android:src="@android:drawable/ic_media_pause" />
+
+    <SeekBar
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/seekBar"
+        android:layout_below="@+id/title"
+        android:layout_alignBottom="@+id/play"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentStart="true"
+        android:layout_toLeftOf="@+id/play"
+        android:layout_toStartOf="@+id/play"
+        android:background="#191919" />
+
+    <TextView
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceLarge"
+        android:id="@+id/title"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentRight="true"
+        android:layout_alignParentEnd="true"
+        android:textColor="@color/dull_5"
+        android:textAlignment="center"
+        android:textSize="25dp"
+        android:textStyle="bold" />
+
+    <ImageButton
+        android:layout_width="40dp"
+        android:layout_height="40dp"
+        android:id="@+id/fullscreen"
+        android:layout_below="@+id/title"
+        android:onClick="onFullscreen"
+        android:src="@android:drawable/ic_menu_crop"
+        android:layout_alignParentRight="true"
+        android:layout_alignParentEnd="true" />
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_below="@+id/seekBar"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentStart="true"
+        android:layout_above="@+id/info"
+        android:gravity="center">
+
+        <FrameLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_alignParentTop="true"
+            android:layout_alignParentLeft="true"
+            android:layout_alignParentStart="true"
+            android:layout_alignParentBottom="true"
+            android:layout_alignParentRight="true"
+            android:id="@+id/media_viewer"></FrameLayout>
+
+    </RelativeLayout>
+
+</RelativeLayout>

+ 1 - 1
app/src/main/res/layout/fragment_qcm.xml

@@ -18,7 +18,7 @@ tools:context="app.mar.activities.QCMFragment">
             <ImageView
                 android:id="@+id/iv_img"
                 android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
+                android:layout_height="match_parent"
                 android:src="@drawable/bscanner_tap" />
         </FrameLayout>
 

+ 17 - 7
app/src/main/res/layout/fragment_qrcode.xml

@@ -44,6 +44,7 @@
                 android:layout_height="wrap_content"
                 android:gravity="center"
                 android:text="130 m"
+                android:textColor="#ffffff"
                 android:textSize="14sp" />
 
             <LinearLayout
@@ -56,6 +57,7 @@
     </android.support.design.widget.CoordinatorLayout>
 
     <LinearLayout
+        android:id="@+id/presentation"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical">
@@ -69,9 +71,9 @@
             android:textSize="14sp" />
 
         <ImageView
-            android:id="@+id/imageView2"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
+            android:id="@+id/iv_img"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
             android:layout_weight="1"
             android:src="@drawable/bscanner_tap" />
 
@@ -79,14 +81,22 @@
             android:id="@+id/tv_question"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:text="TextView"
+            android:text="Retrouvez un QR Code à cet endroit"
             android:textSize="14sp" />
 
         <LinearLayout
-            android:id="@+id/ll_textIndices2"
+            android:id="@+id/ll_rootIndices2"
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"></LinearLayout>
+            android:layout_height="match_parent"
+            android:layout_weight="4"
+            android:orientation="vertical">
+
+            <LinearLayout
+                android:id="@+id/ll_textIndices2"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:orientation="vertical"></LinearLayout>
+        </LinearLayout>
 
         <Button
             android:id="@+id/btn_scan"

+ 1 - 1
app/src/main/res/layout/fragment_question.xml

@@ -19,7 +19,7 @@ tools:context="app.mar.activities.QuestionFragment">
         <ImageView
             android:id="@+id/iv_img"
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
+            android:layout_height="match_parent"
             android:src="@drawable/bscanner_tap" />
     </FrameLayout>
 

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -94,4 +94,5 @@
 
     <!-- TODO: Remove or change this placeholder text -->
     <string name="hello_blank_fragment">Hello blank fragment</string>
+    <string name="title_activity_test_video">TestVideoActivity</string>
 </resources>