using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; public class OpenSeaMapLayer : MonoBehaviour { // Overlay transparency [Range(0, 1)] public float alpha = 1; private float _alpha = 1; private void LoadTileOverlay(OnlineMapsTile tile) { var url = "http://tiles.openseamap.org/seamark/" + tile.zoom + "/" + tile.x + "/" + tile.y + ".png"; OnlineMapsWWW www = new OnlineMapsWWW(url); www.OnComplete += OnDownloadComplete; www.customFields["tile"] = tile; } private Texture2D texture; private void OnDownloadComplete(OnlineMapsWWW www) { OnlineMapsTile tile = www.customFields["tile"] as OnlineMapsTile; if (tile == null || tile.status == OnlineMapsTileStatus.disposed || tile.status == OnlineMapsTileStatus.error) return; texture = new Texture2D(256, 256); www.LoadImageIntoTexture(texture); tile.overlayBackTexture = texture; www.Dispose(); Resources.UnloadUnusedAssets(); } private void OnStartDownloadTile(OnlineMapsTile tile) { tile.status = OnlineMapsTileStatus.loading; // Load overlay for tile. LoadTileOverlay(tile); // Load the tile using a standard loader. OnlineMapsTileManager.StartDownloadTile(tile); } private void Start() { if (OnlineMapsCache.instance != null) { // Subscribe to the cache events. OnlineMapsCache.instance.OnLoadedFromCache += LoadTileOverlay; } OnlineMapsTileManager.OnStartDownloadTile += OnStartDownloadTile; } private void Update() { // Update the transparency of overlay. if (Math.Abs(_alpha - alpha) > float.Epsilon) { _alpha = alpha; lock (OnlineMapsTile.lockTiles) { foreach (OnlineMapsTile tile in OnlineMaps.instance.tileManager.tiles) tile.overlayBackAlpha = alpha; } } } }