Пример #1
0
    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);
    }