void CreateAdditionalRequests(OneRequest request) { List <OneRequest> requests = new List <OneRequest>(); for (int i = 0; i < 8; i++) { requests.Add((OneRequest)request.Clone()); } requests[0].ChangePos(true, false, false, true); requests[1].ChangePos(true, false, false, false); requests[2].ChangePos(true, true, false, false); requests[3].ChangePos(false, false, false, true); requests[4].ChangePos(false, true, false, false); requests[5].ChangePos(false, false, true, true); requests[6].ChangePos(false, false, true, false); requests[7].ChangePos(false, true, true, false); foreach (var item in requests) { if (ChangeToGridPosition(item)) { if (CheckUIScale.isRetina) { StartCoroutine(DownloadMapRetina(CreateNewTile, item)); } else { StartCoroutine(DownloadMap(CreateNewTile, item)); } } } }
string ReturnApiUrl(OneRequest request) { Vector3 tempPos = request.position; Vector2 metersPos = Conversion.MetersToLatLon(new Vector2(tempPos.x, tempPos.y)); string output = ""; string retinaMultiplayer = ""; string positionX = metersPos.x.ToString(); positionX = positionX.Replace(',', '.'); string positionY = metersPos.y.ToString(); positionY = positionY.Replace(',', '.'); if (CheckUIScale.isRetina) { retinaMultiplayer = "@2x"; } if (useGoogleMaps) { output = string.Format("http://maps.googleapis.com/maps/api/staticmap?center={0},{1}&zoom={2}&size=640x640&key={3}{4}", positionX, positionY, request.zoomLevel, GoogleLocationApi.instance.apiKey, style); } else { output = string.Format("https://api.mapbox.com/styles/v1/bionicl/cjbfocd42b59q2rqasdw3ezwb/static/{1},{0},{2},0,0/640x640{3}?access_token={4}&logo=false&attribution=false", positionX, positionY, request.zoomLevel - 1, retinaMultiplayer, GoogleLocationApi.instance.mapBoxApiKey); } return(output); }
void RenderMap() { OneRequest request = CalculateMapZoom(); CreateAdditionalRequests(request); if (ChangeToGridPosition(request)) { StartCoroutine(DownloadMap(CreateNewTile, request)); } }
void CreateNewTile(Sprite sprite, OneRequest request) { Vector3 tempPos = request.position; tempPos.z = request.zoomLevel * -1 + 40; GameObject tempGo = Instantiate(tilePrefab, tempPos, transform.rotation); tempGo.GetComponent <SpriteRenderer>().sprite = sprite; tempGo.transform.SetParent(mapTilesGroups[request.groupId].transform); tempGo.transform.SetAsLastSibling(); tempGo.transform.localScale = new Vector3(request.tileSize, request.tileSize, 1); }
// Create new tile IEnumerator DownloadMap(Action <Sprite, OneRequest> action, OneRequest request) { string url = ReturnApiUrl(request); using (WWW www = new WWW(url)) { yield return(www); Sprite sprite = Sprite.Create(www.texture, new Rect(0, 0, 640, 640), new Vector2(0.5f, 0.5f)); action.Invoke(sprite, request); } }
string ReturnApiUrl(OneRequest request) { Vector3 tempPos = request.position; Vector2 metersPos = Conversion.MetersToLatLon(new Vector2(tempPos.x, tempPos.y)); string output = ""; if (useGoogleMaps) { output = string.Format("http://maps.googleapis.com/maps/api/staticmap?center={0},{1}&zoom={2}&size=640x640&key={3}{4}", metersPos.x, metersPos.y, request.zoomLevel, GoogleLocationApi.instance.apiKey, style); } else { output = string.Format("https://api.mapbox.com/styles/v1/bionicl/cjbfocd42b59q2rqasdw3ezwb/static/{1},{0},{2},0,0/640x640?access_token={3}", metersPos.x, metersPos.y, request.zoomLevel - 1, GoogleLocationApi.instance.mapBoxApiKey); } return(output); }
void RenderMapTiles() { OneRequest request = CalculateMapZoom(); CreateAdditionalRequests(request); if (ChangeToGridPosition(request)) { if (CheckUIScale.isRetina) { StartCoroutine(DownloadMapRetina(CreateNewTile, request)); } else { StartCoroutine(DownloadMap(CreateNewTile, request)); } } }
IEnumerator DownloadMapRetina(Action <Sprite, OneRequest> action, OneRequest request) { string url = ReturnApiUrl(request); UnityWebRequest www = UnityWebRequestTexture.GetTexture(url); yield return(www.SendWebRequest()); if (www.isNetworkError || www.isHttpError) { Debug.LogError("DOWNLOAD MAP RETINA ERROR: " + www.error); } else { Texture2D texture = ((DownloadHandlerTexture)www.downloadHandler).texture; Sprite sprite = Sprite.Create(texture, new Rect(0, 0, 1280, 1280), new Vector2(0.5f, 0.5f), 200); action.Invoke(sprite, request); } }
// Grid system bool ChangeToGridPosition(OneRequest request) { float x = request.position.x; float y = request.position.y; int xGrid = (int)(x / request.tileSize / 6.4f) + 1; int yGrid = (int)(y / request.tileSize / 6.4f) + 1; Vector2 tempVector = new Vector2(xGrid, yGrid); if (donePositions[request.zoomLevel].Contains(tempVector)) { //Debug.Log("Already drawn, skipping"); return(false); } else { //Debug.Log(string.Format("x: {0} y: {1}", xGrid, yGrid)); request.position.x = (float)xGrid * request.tileSize * 6.4f; request.position.y = (float)yGrid * request.tileSize * 6.4f; donePositions[request.zoomLevel].Add(tempVector); return(true); } }