diff --git a/POINT-VR-Chapter-1/Assets/POINT/4D-SpacetimeAssets/Scene1Manager.cs b/POINT-VR-Chapter-1/Assets/POINT/4D-SpacetimeAssets/Scene1Manager.cs index 140c9d0a..3ea836d6 100644 --- a/POINT-VR-Chapter-1/Assets/POINT/4D-SpacetimeAssets/Scene1Manager.cs +++ b/POINT-VR-Chapter-1/Assets/POINT/4D-SpacetimeAssets/Scene1Manager.cs @@ -168,24 +168,28 @@ private IEnumerator ObjectiveOne() Debug.Log("We live in a 3 - dimensional space. Every day we interact with this 3D space. For example we can move up and down(that’s the first dimension)"); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\1_3D_coordinate_system_1_1"); - yield return new WaitForSecondsRealtime(6); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); + player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\1_3D_coordinate_system_1_2"); dynamicAxis.ShowAxes(1); - yield return new WaitForSecondsRealtime(3); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); Debug.Log("left and right (that’s the second dimension)"); + player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\1_3D_coordinate_system_2"); dynamicAxis.ShowAxes(0); - yield return new WaitForSecondsRealtime(3); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); Debug.Log("and forward and backward (that’s the third dimension)."); + player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\1_3D_coordinate_system_3"); dynamicAxis.ShowAxes(2); - yield return new WaitForSecondsRealtime(4); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); Debug.Log("To help ourselves navigate this space, we use a mathematical tool called a coordinate system. It does not matter how the coordinate system is oriented. In front of you is one potential coordinate system, where the different colors represent different directions. Where the three lines meet is called the origin of the system. We can describe the location of any object in space relative to the origin with just 3 numbers."); + player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\1_3D_coordinate_system_4"); - yield return new WaitForSecondsRealtime(8.3f); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); StartCoroutine(dynamicAxis.ExtendAxes(1, 35, 1)); - yield return new WaitForSecondsRealtime(16.7f); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); yield break; } @@ -203,7 +207,8 @@ private IEnumerator ObjectiveTwo() yield return new WaitForSecondsRealtime(1); Debug.Log("This object is currently located at the origin, so its position is (0, 0, 0). Now, reach out and drag the object along the grid lines to get to the desired location. You may follow the example path or make your own path."); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\2_move_an_object_1"); - yield return new WaitForSecondsRealtime(15); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); + //EndPoint stuff goes here massObject.transform.position = new Vector3(0, 0, 0); endPointManager.SetMass(massObject.gameObject); @@ -222,10 +227,12 @@ private IEnumerator ObjectiveTwo() massObject.transform.position = new Vector3(0, 0, 0); Debug.Log("Nice job."); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\2_move_an_object_2"); - yield return new WaitForSecondsRealtime(2); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); Debug.Log("Now, try getting the object to the same point by taking a different path."); + player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\2_move_an_object_3"); - yield return new WaitForSecondsRealtime(4); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); + // Endpoint manager activated again, retrieved endpoint path given as example path to massObject.transform.position = new Vector3(0, 0, 0); endPointManager.SetMass(massObject.gameObject); @@ -290,17 +297,19 @@ private IEnumerator ObjectiveTwo() examplePath.transform.GetChild(i).gameObject.SetActive(false); } } + // Waits for the desired location to be reached again yield return new WaitForSecondsRealtime(1); yield return new WaitUntil(() => endPointManager.Status() == false); secondPath.SetActive(false); examplePath.SetActive(false); yield return new WaitForSecondsRealtime(1); + // Continue once player reaches desired location again massObject.transform.position = new Vector3(0, 0, 0); Debug.Log("Nice job."); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\2_move_an_object_2"); - yield return new WaitForSecondsRealtime(2); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); yield break; } @@ -313,18 +322,20 @@ private IEnumerator ObjectiveThree() //Update graphic from previous objective to include 4 cords, add a clock from scene 2 with increasing time, t cord increases with increasing clock time Debug.Log("However, this spatial description is not enough. Let's say you want to meet up with a friend. You will have to choose where to meet, and also when to meet. To account for this new information, we need to add one more dimension to our coordinate system, time."); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\3_clock_appears_1"); - yield return new WaitForSecondsRealtime(15); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); massObject.ShowTime(); massObject.SetTime(0); objectiveClock.SetActive(true); Debug.Log("Time is different from the other dimensions because we can only move forward in time. Notice how the time on the clock only ever increases."); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\3_clock_appears_2"); - yield return new WaitForSecondsRealtime(8); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); Debug.Log("Move the object as you like and observe how the description of its spatial location changes while time keeps moving forward. Press the 'continue' button when you are ready to move on."); + player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\3_clock_appears_3"); - yield return new WaitForSecondsRealtime(10); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); massObject.transform.position = new Vector3(0, 0, 0); + // Player can move around the object and see how the coordinates change (time increases continuously) // Continue button appears to continue when ready continueButton.SetActive(true); @@ -367,11 +378,12 @@ private IEnumerator ObjectiveFour() // Sum of yield returns should be 16s (dynamicAxis.TransitionAxisThickness and RevealGrid) StartCoroutine(dynamicAxis.TransitionAxisColor(Color.white, 4.0f)); yield return dynamicAxis.TransitionAxisThickness(0.02f, 4.0f); - yield return new WaitForSeconds(4.0f); // Extra padding time so that last audio finishes playing + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); + Debug.Log("It's all around you, stretching out in every direction and forever into the future."); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\4_spacetime_is_everywhere_1_2"); yield return RevealGrid(16.0f, 12.0f); - + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); Debug.Log("Spacetime is not a rigid or fixed object. It can curve."); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\4_spacetime_is_everywhere_2"); // Sum of yield returns should be 5s @@ -379,11 +391,10 @@ private IEnumerator ObjectiveFour() Debug.Log("Now, let's look at how spacetime curves. Looking at this large grid is too much information at once"); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\4_spacetime_is_everywhere_4_1"); - yield return new WaitForSeconds(6.5f); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); Debug.Log(", so we are going to show you only a small portion of the spacetime."); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\4_spacetime_is_everywhere_4_2"); - // no : yield return new WaitForSeconds(3.7f); yield return ShrinkGrid(1.8f, 3.0f, 2.0f); dynamicAxis.gameObject.SetActive(false); @@ -408,7 +419,7 @@ private IEnumerator ObjectiveFour() Debug.Log("In fact, Einstein described gravity as the curvature of spacetime. Close to a very massive object, where gravity is strong, the duration of an event and the distance between two events can stretch. John Wheeler described this effect by saying 'Spacetime tells matter how to move; matter tells spacetime how to curve.'"); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene1\\4_spacetime_is_everywhere_3"); - yield return new WaitForSecondsRealtime(20); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); nextSceneButton.SetActive(true); // End of Scene, tell player to continue Debug.Log("Press the 'continue' button when you are ready to move on."); diff --git a/POINT-VR-Chapter-1/Assets/POINT/Audio/Narration/NarrationManager.cs b/POINT-VR-Chapter-1/Assets/POINT/Audio/Narration/NarrationManager.cs index da55db76..a6791d14 100644 --- a/POINT-VR-Chapter-1/Assets/POINT/Audio/Narration/NarrationManager.cs +++ b/POINT-VR-Chapter-1/Assets/POINT/Audio/Narration/NarrationManager.cs @@ -3,6 +3,8 @@ using TMPro; using UnityEngine; using UnityEngine.UI; +using UnityEngine.InputSystem; +using UnityEngine.Localization; public class NarrationManager : MonoBehaviour { @@ -19,6 +21,10 @@ public class NarrationManager : MonoBehaviour /// [SerializeField] private float volumeScale = 3.0f; + //For Skipping Narration + [SerializeField] private InputActionReference leftPushingReference; + [SerializeField] private InputActionReference rightPushingReference; + [Header("Font Assets")] [SerializeField] private TMP_FontAsset latinFont; [SerializeField] private TMP_FontAsset arabicFont; @@ -49,6 +55,8 @@ public GameManager.Language SubtitlesLanguage private int currentLine = 0; private TMP_FontAsset currentFont = null; private Coroutine coroutine = null; + private bool developerOptions = true; + private bool canPlay = true; /// /// This function plays an audio clip (whose name WITHOUT the file type is the parameter) and activates @@ -77,6 +85,7 @@ public void PlayClipWithSubtitles(string audioClipName) { this.GetComponent().PlayOneShot(audioClip, volumeScale); } + SkipNarration(leftPushingReference, rightPushingReference); DisplaySubtitles(); } @@ -309,4 +318,37 @@ private string ParseStyleTags(string input) output += input.Substring(substrStart, input.Length - substrStart); return output; } + + public void SkipNarration(InputActionReference input1, InputActionReference input2) + { + StartCoroutine(CheckForSkipButtons(input1, input2)); + } + + IEnumerator CheckForSkipButtons(InputActionReference input1, InputActionReference input2) + { + AudioSource audioSource = this.GetComponent(); + yield return new WaitUntil(() => canPlay == true); + yield return new WaitUntil(() => audioSource.isPlaying); + + canPlay = false; + while(audioSource.isPlaying) //If skip buttons are pressed, skip + { + if(developerOptions && input1.action.ReadValue() > 0.5f && input2.action.ReadValue() > 0.5f) { //Stops audio clip/subtitles + audioSource.Stop(); + yield return new WaitUntil(() => isSubtitlePlaying == true); + + subtitleObject.SetActive(false); + PlayClipWithSubtitles(null); //prevents future subtitles that are associated with the same audio clip from appearing + // Debug.Log("skipped"); + break; + } + + yield return null; + } + + yield return new WaitUntil(() => (input1.action.ReadValue() == 0.0f && input2.action.ReadValue() == 0.0f)); + // Debug.Log("Done"); + canPlay = true; + yield break; + } } \ No newline at end of file diff --git a/POINT-VR-Chapter-1/Assets/POINT/InputAssets/Player.prefab b/POINT-VR-Chapter-1/Assets/POINT/InputAssets/Player.prefab index 17f7683c..4548d356 100644 --- a/POINT-VR-Chapter-1/Assets/POINT/InputAssets/Player.prefab +++ b/POINT-VR-Chapter-1/Assets/POINT/InputAssets/Player.prefab @@ -6972,6 +6972,10 @@ MonoBehaviour: m_EditorClassIdentifier: subtitleObject: {fileID: 685732247222427480} volumeScale: 3 + leftPushingReference: {fileID: 5492603852644030702, guid: a54d6349e0e4d404fa09e1c0531de6d0, + type: 3} + rightPushingReference: {fileID: 7109928901819384079, guid: a54d6349e0e4d404fa09e1c0531de6d0, + type: 3} latinFont: {fileID: 11400000, guid: cccebb56e08497443ae4756fc5c84445, type: 2} arabicFont: {fileID: 11400000, guid: cccebb56e08497443ae4756fc5c84445, type: 2} bengaliFont: {fileID: 11400000, guid: cccebb56e08497443ae4756fc5c84445, type: 2} diff --git a/POINT-VR-Chapter-1/Assets/POINT/InputAssets/TutorialManager.cs b/POINT-VR-Chapter-1/Assets/POINT/InputAssets/TutorialManager.cs index ffd2b7f4..116f74b5 100644 --- a/POINT-VR-Chapter-1/Assets/POINT/InputAssets/TutorialManager.cs +++ b/POINT-VR-Chapter-1/Assets/POINT/InputAssets/TutorialManager.cs @@ -288,7 +288,7 @@ IEnumerator WaitForControlsScreenSelection() player.GetComponent().PlayClipWithSubtitles("Tutorial\\Tutorial_Menu_Forget_Controls"); - yield return new WaitForSecondsRealtime(4); // Set to the audio file above's duration in seconds + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); StartCoroutine(WaitForGeneralMenu()); yield break; } @@ -304,8 +304,8 @@ IEnumerator WaitForGeneralMenu() AudioListener.pause = false; // Temporary fix to make the audio play when the game is in a paused state player.GetComponent().PlayClipWithSubtitles("Tutorial\\Tutorial_Menu_Options"); - - yield return new WaitForSecondsRealtime(17); // Set to the audio file above's duration in seconds + + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); StartCoroutine(WaitForSceneSelection()); yield break; } @@ -321,8 +321,7 @@ IEnumerator WaitForSceneSelection() AudioListener.pause = false; // Temporary fix to make the audio play when the game is in a paused state player.GetComponent().PlayClipWithSubtitles("Tutorial\\Tutorial_Menu_Scene_Select"); - - yield return new WaitForSecondsRealtime(11); // Set to the audio file above's duration in seconds + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); overText.RefreshString(); instructions.text = overString; diff --git a/POINT-VR-Chapter-1/Assets/POINT/Scenes/Conference Demos/ConfDemo_part1_one_mass_y_manager.cs b/POINT-VR-Chapter-1/Assets/POINT/Scenes/Conference Demos/ConfDemo_part1_one_mass_y_manager.cs index 0e1026f6..0898fced 100644 --- a/POINT-VR-Chapter-1/Assets/POINT/Scenes/Conference Demos/ConfDemo_part1_one_mass_y_manager.cs +++ b/POINT-VR-Chapter-1/Assets/POINT/Scenes/Conference Demos/ConfDemo_part1_one_mass_y_manager.cs @@ -76,12 +76,12 @@ private IEnumerator StartScene() yield return new WaitForSeconds(1); UIManagerScript.UpdateCurrentObjective(objective1Text); // Grid/Space Deformation player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\1_intro_to_grids_and_clocks_1"); - yield return new WaitForSeconds(16); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\1_intro_to_grids_and_clocks_2"); - yield return new WaitForSeconds(7); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\2_observe_grid_curve_1"); - yield return new WaitForSeconds(20.4f); // Continue Button + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); continue1.SetActive(true); Debug.Log("Press the 'continue' button when you are ready to move on."); player.GetComponent().PlayClipWithSubtitles("continue"); @@ -89,7 +89,7 @@ private IEnumerator StartScene() continue1.SetActive(false); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\2_observe_grid_curve_2"); - yield return new WaitForSeconds(5.9f); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); task3Location.SetActive(true); yield return new WaitUntil(() => task3Location.transform.GetChild(1).gameObject.GetComponentInChildren() != null); // Reach SnapRing @@ -101,21 +101,21 @@ private IEnumerator StartScene() task3Location.SetActive(false); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\3_direction_of_curvature_arrow_1"); - yield return new WaitForSeconds(7.6f); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); // Question Time for Player: What does that say about Gravity UIManagerScript.UpdateCurrentObjective(objective2Text); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\3_direction_of_curvature_arrow_2"); - yield return new WaitForSeconds(7.1f); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); ArrowTask(); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\3_direction_of_curvature_arrow_3"); - yield return new WaitForSeconds(2.5f); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\3_direction_of_curvature_arrow_4"); - yield return new WaitForSeconds(2); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\3_direction_of_curvature_arrow_5"); - yield return new WaitForSeconds(6.1f); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); } private void ArrowTask() @@ -136,12 +136,12 @@ public void CheckArrowTask() private IEnumerator StartScenePart2() { player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\3_direction_of_curvature_arrow_6"); - yield return new WaitForSeconds(1); // Nice Job + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\3_direction_of_curvature_arrow_7"); - yield return new WaitForSeconds(22); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\3_direction_of_curvature_arrow_8"); - yield return new WaitForSeconds(5.5f); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); setOfDirectionalArrows.SetActive(false); massSphere.GetComponent().constraints = RigidbodyConstraints.None; // End of Task, set sphere back to movable massSphere.layer = LayerMask.NameToLayer("Grip"); // End of Task, set sphere back to interactable @@ -151,7 +151,7 @@ private IEnumerator StartScenePart2() UIManagerScript.UpdateCurrentObjective(objective3Text); // Time Deformation snapRing.SetActive(true); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\4_observe_time_dialation_1"); - yield return new WaitForSeconds(8); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\4_observe_time_dialation_2"); yield return new WaitUntil(() => snapRing.GetComponentInChildren() != null); diff --git a/POINT-VR-Chapter-1/Assets/POINT/Scenes/Conference Demos/ConfDemo_part2_two_masses.cs b/POINT-VR-Chapter-1/Assets/POINT/Scenes/Conference Demos/ConfDemo_part2_two_masses.cs index 9012dcc8..cb5942e7 100644 --- a/POINT-VR-Chapter-1/Assets/POINT/Scenes/Conference Demos/ConfDemo_part2_two_masses.cs +++ b/POINT-VR-Chapter-1/Assets/POINT/Scenes/Conference Demos/ConfDemo_part2_two_masses.cs @@ -75,7 +75,7 @@ IEnumerator StartScene() UIManagerScript.UpdateCurrentObjective(objective1); // Grid/Space Deformation Two Masses player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\5_strength_of_gravity_prop_mass_1"); - yield return new WaitForSecondsRealtime(13.8f); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); continue1.SetActive(true); Debug.Log("Press the 'continue' button when you are ready to move on."); @@ -85,9 +85,9 @@ IEnumerator StartScene() UIManagerScript.UpdateCurrentObjective(objective2); // Time Deformation Two Masses player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\5_strength_of_gravity_prop_mass_2"); - yield return new WaitForSecondsRealtime(12); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\5_strength_of_gravity_prop_mass_3"); - yield return new WaitForSecondsRealtime(17.3f); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); continue2.SetActive(true); Debug.Log("Press the 'continue' button when you are ready to move on."); @@ -96,11 +96,11 @@ IEnumerator StartScene() continue2.SetActive(false); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\5_strength_of_gravity_prop_mass_4"); - yield return new WaitForSecondsRealtime(13); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\5_strength_of_gravity_prop_mass_5"); - yield return new WaitForSecondsRealtime(7); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\5_strength_of_gravity_prop_mass_6"); - yield return new WaitForSecondsRealtime(16); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); UIManagerScript.UpdateCurrentObjective(objective3); // Continue to next scene SceneUIContainer.SetActive(true); // Continue to next scene diff --git a/POINT-VR-Chapter-1/Assets/POINT/Scenes/Conference Demos/ConfDemo_part3_ranking_masses.cs b/POINT-VR-Chapter-1/Assets/POINT/Scenes/Conference Demos/ConfDemo_part3_ranking_masses.cs index b0eca58e..0347c153 100644 --- a/POINT-VR-Chapter-1/Assets/POINT/Scenes/Conference Demos/ConfDemo_part3_ranking_masses.cs +++ b/POINT-VR-Chapter-1/Assets/POINT/Scenes/Conference Demos/ConfDemo_part3_ranking_masses.cs @@ -82,7 +82,7 @@ IEnumerator StartScene() public IEnumerator RadiiTaskAudio() { player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\7_radius_activity_same_mass_1"); - yield return new WaitForSecondsRealtime(13); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); player.GetComponent().PlayClipWithSubtitles("Chapter1Scene2\\7_radius_activity_same_mass_2"); yield break; } @@ -107,7 +107,7 @@ public IEnumerator EndRadiiAudio() SceneUIContainer.SetActive(true); player.GetComponent().PlayClipWithSubtitles("temporary_ending_1"); - yield return new WaitForSeconds(15.2f); + yield return new WaitUntil(() => player.GetComponent().isPlaying == false); SceneController sceneController = player.GetComponentInChildren(); // Automatically go to Credits if (sceneController != null) diff --git a/POINT-VR-Chapter-1/Builds/SkipNarrationBuild.apk b/POINT-VR-Chapter-1/Builds/SkipNarrationBuild.apk new file mode 100644 index 00000000..1228a15b Binary files /dev/null and b/POINT-VR-Chapter-1/Builds/SkipNarrationBuild.apk differ