Skip to content

Commit f2eead9

Browse files
committed
Add connection check, add callback. doesn't work on PICO
1 parent bd0bb98 commit f2eead9

File tree

3 files changed

+82
-9
lines changed

3 files changed

+82
-9
lines changed

Assets/Scripts/InstanceButton.cs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.IO;
2+
using System.Threading;
23
using System.Threading.Tasks;
34
using Newtonsoft.Json;
45
using UnityEngine;
@@ -44,6 +45,12 @@ public void LaunchCurrentInstance()
4445
if (JNIStorage.GetInstance(currInstName) == null)
4546
{
4647
Debug.Log("Instance is null!");
48+
49+
if (!JNIStorage.CheckConnectionAndThrow())
50+
{
51+
return;
52+
}
53+
4754
CreateDefaultInstance(currInstName);
4855
return;
4956
}
@@ -58,16 +65,23 @@ public void LaunchCurrentInstance()
5865
JNIStorage.instance.uiHandler.SetAndShowError(currInstName + " is still installing, please wait until the install has finished.");
5966
return;
6067
}
61-
62-
async Task FinishAnim()
68+
69+
if (!OpenXRFeatureSystemInfo.GetHeadsetName().Contains("PICO"))
6370
{
64-
await Task.Delay(200);
65-
XRGeneralSettings.Instance.Manager.activeLoader.Stop();
66-
XRGeneralSettings.Instance.Manager.activeLoader.Deinitialize();
67-
68-
Application.Quit();
69-
JNIStorage.apiClass.CallStatic("launchInstance", JNIStorage.activity, JNIStorage.accountObj, instance.raw);
71+
Task.Run(() =>
72+
{
73+
AndroidJNI.AttachCurrentThread();
74+
JNIStorage.apiClass.CallStatic("launchInstance", JNIStorage.activity, JNIStorage.accountObj,
75+
instance.raw);
76+
});
77+
}
78+
else
79+
{
80+
Application.Unload();
81+
JNIStorage.apiClass.CallStatic("launchInstance", JNIStorage.activity, JNIStorage.accountObj,
82+
instance.raw);
7083
}
71-
LeanTween.value(ScreenFade.gameObject,0, 1, 1).setOnUpdate(alpha => ScreenFade.alpha = alpha).setOnComplete(() => FinishAnim());
84+
85+
JNIStorage.instance.uiHandler.SetAndShowError("Instance is now launching, please wait... (Game will switch automatically when ready)");
7286
}
7387
}

Assets/Scripts/JNIStorage.cs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
using System.Collections.Generic;
2+
using System.Threading.Tasks;
23
using TMPro;
34
using UnityEngine;
45
using UnityEngine.Serialization;
56
using UnityEngine.UI;
67
using UnityEngine.CrashReportHandler;
78
using UnityEngine.EventSystems;
9+
using UnityEngine.Networking;
10+
using UnityEngine.XR.Management;
811

912
public class JNIStorage : MonoBehaviour
1013
{
1114
public static AndroidJavaClass apiClass;
1215
public static AndroidJavaObject accountObj;
1316
public static AndroidJavaObject activity;
1417
public static AndroidJavaObject instancesObj;
18+
public static ConnectionStatus connectionStatus = ConnectionStatus.Checking;
1519
public APIHandler apiHandler;
1620
public static JNIStorage instance;
1721
public List<string> supportedVersions;
@@ -21,6 +25,41 @@ public class JNIStorage : MonoBehaviour
2125
public GameObject instancePrefab;
2226
public GameObject instanceArray;
2327

28+
public enum ConnectionStatus
29+
{
30+
Checking,
31+
Connected,
32+
Disconnected
33+
}
34+
35+
public static bool CheckConnectionAndThrow()
36+
{
37+
switch (connectionStatus)
38+
{
39+
case ConnectionStatus.Checking:
40+
instance.uiHandler.SetAndShowError("Have not finished checked Microsoft connection, please wait a moment.");
41+
return false;
42+
case ConnectionStatus.Disconnected:
43+
instance.uiHandler.SetAndShowError("No internet connection. Can't complete operation.");
44+
return false;
45+
case ConnectionStatus.Connected:
46+
default:
47+
return true;
48+
}
49+
}
50+
51+
static void CloseXR()
52+
{
53+
XRGeneralSettings.Instance.Manager.activeLoader.Stop();
54+
XRGeneralSettings.Instance.Manager.activeLoader.Deinitialize();
55+
}
56+
57+
[RuntimeInitializeOnLoadMethod]
58+
static void RunOnStart()
59+
{
60+
Application.unloading += CloseXR;
61+
}
62+
2463
private void Start()
2564
{
2665
CrashReportHandler.enableCaptureExceptions = false;
@@ -37,6 +76,8 @@ private void Start()
3776
configHandler.LoadConfig();
3877
UpdateInstances();
3978
apiClass.SetStatic("model", OpenXRFeatureSystemInfo.GetHeadsetName());
79+
80+
CheckConnection();
4081
}
4182

4283
private void FillSupportedVersions(string[] supportedVersionsArray)
@@ -81,4 +122,21 @@ public void UpdateInstances()
81122
FillSupportedVersions(supportedVersionsArray);
82123
uiHandler.UpdateDropdowns(true, supportedVersions);
83124
}
125+
126+
public static async void CheckConnection()
127+
{
128+
UnityWebRequest request = UnityWebRequest.Get("https://piston-meta.mojang.com/mc/game/version_manifest_v2.json");
129+
request.SendWebRequest();
130+
131+
while (!request.isDone)
132+
await Task.Delay(16);
133+
134+
if (request.result != UnityWebRequest.Result.Success)
135+
{
136+
Debug.Log("Unable to contact Mojang servers" + request.error);
137+
connectionStatus = ConnectionStatus.Disconnected;
138+
}
139+
140+
connectionStatus = ConnectionStatus.Connected;
141+
}
84142
}

Assets/Scripts/UIHandler.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public class UIHandler : MonoBehaviour
2525
public static int selectedInstance;
2626
static string pfpUrl;
2727
static string profileName;
28+
private bool erroredConnection;
2829

2930
public LoginHandler loginHandler;
3031
public ModManager modManager;

0 commit comments

Comments
 (0)