private async Task ReceiveServerGeoObjects() { if (!webSockets) { return; } string reqString = JsonUtility.ToJson(currentLocation); string responseData = await webSockets.ReceiveObjectsFromServer(reqString); if (responseData == "" || responseData.StartsWith("{\"success\":true,\"message\":\"Connection established\"}")) { return; } #if UNITY_EDITOR var path = Directory.GetCurrentDirectory() + @"/response.geohelper"; File.WriteAllText(path, responseData.ToString()); #endif ResponseGeoData response = null; try { response = JsonConvert.DeserializeObject <ResponseGeoData>(responseData); } catch (Exception e) { Debug.LogError(e); } if (response == null) { Debug.LogError("Failed to load object from server"); return; } List <GeoData> receivedGeoData = new List <GeoData>(); receivedGeoData.AddRange(response.geoAudios); receivedGeoData.AddRange(response.geoTexts); receivedGeoData.AddRange(response.geoModels); receivedGeoData.AddRange(response.geoUniversal); if (receivedGeoData.Count == 0) { if (!sentNotFound) { Debug.Log("Objects not found in this location"); ToastManager.Instance.DisplayToast(noObjectsFound, ToastType.Info, 3f); sentNotFound = true; } } await DeleteObjectsFromScene(receivedGeoData); if (notInitToNorth) { _arSessionOrigin.transform.rotation = Quaternion.Euler(0, GetCompassTrueHeading(), 0); notInitToNorth = false; } await AddNewObjectsToScene(receivedGeoData); }
private async Task TestPlacingObjects() { if (!IsInputLocationRunning()) { return; } LocationDataModel lastKnownLocation = GetUserLocationData(); currentLocationLog.text = $"Current location is lat: {lastKnownLocation.lat}, lng: {lastKnownLocation.lng} Compass: "******"{((int) GetCompassTrueHeading()).ToString() + "° " + DegreesToCardinalDetailed(GetCompassTrueHeading())}"; // if current location changed then update positions of all geoObjects in scene if (DistanceBetween2GeoobjectsInM(lastKnownLocation.lat, lastKnownLocation.lng, currentLocation.lat, currentLocation.lng) > 20) { currentLocation = lastKnownLocation; Debug.Log($" {DateTime.Now:HH: mm:ss tt} UpdateGeoObjectsPositions"); UpdateGeoObjectsPositions(lastKnownLocation.lat, lastKnownLocation.lng); } if (!webSockets) { return; } // !IMPORTANT>DO NOT CHANGE FORM OF REQUEST STRING !!! // string for request objects to place to scene string reqString = "{ " + $"\"lat\": {currentLocation.lat}, \"lng\": {currentLocation.lng}" + "}"; string responseData = await webSockets.ReceiveObjectsFromServer(reqString); // Debug.Log(responseData); if (responseData == "" || responseData.StartsWith("{\"success\":true,\"message\":\"Connection established\"}")) { return; } // Debug.Log($"Got response: {responseData}"); // json response from server for user location request ResponseFromServerLocationDataModel response = null; try { response = JsonConvert.DeserializeObject <ResponseFromServerLocationDataModel>(responseData); } catch (Exception e) { Debug.LogError(e); } if (response == null || !response.success) { Debug.Log("Failed to load object from server"); return; } List <IGeoObjectModel> packGeoObjectsFromServer = new List <IGeoObjectModel>(); if (response.geoAudioObjectModels?.Any() == true) { packGeoObjectsFromServer.AddRange(response.geoAudioObjectModels); } if (response.poiObjectModels?.Any() == true) { packGeoObjectsFromServer.AddRange(response.poiObjectModels); } if (response.geo3dObjectModels?.Any() == true) { packGeoObjectsFromServer.AddRange(response.geo3dObjectModels); } if (!(response.geoAudioObjectModels?.Any() == true || response.poiObjectModels?.Any() == true || response.geo3dObjectModels?.Any() == true)) { Debug.Log("Objects not found in this location"); await DeleteObjectsFromScene(packGeoObjectsFromServer); return; } await DeleteObjectsFromScene(packGeoObjectsFromServer); // GPSEncoder.SetLocalOrigin(new Vector2(currentLocation.lat, currentLocation.lng)); // _arSessionOrigin.transform.localPosition = // GPSEncoder.GPSToUCS(currentLocation.lat, currentLocation.lng); // if (Input.compass.enabled) // { // _arSessionOrigin.transform.rotation = Quaternion.Euler(0, -Input.compass.magneticHeading, 0); // //Debug.Log($"True heading {((int)GetCompassTrueHeading()).ToString() + "° " + DegreesToCardinalDetailed(GetCompassTrueHeading())}"); // Debug.Log($" {DateTime.Now.ToString("HH:mm:ss tt")} Updated Magnetic heading {(-(int)Input.compass.magneticHeading).ToString() + "° " + DegreesToCardinalDetailed(Input.compass.magneticHeading)}"); // //Debug.Log($"Raw vector {Input.compass.rawVector.ToString()}"); // } // if (notInitToNorth) { _arSessionOrigin.transform.rotation = Quaternion.Euler(0, GetCompassTrueHeading(), 0); notInitToNorth = false; } await AddNewObjectsToScene(packGeoObjectsFromServer); }