using System; using InfinityCode.OnlineMapsDemos; using UnityEngine; public class SmoothFlyZoom : MonoBehaviour { public Aircraft aircraft; private float altitude = float.MinValue; private OnlineMapsTileSetControl control; private OnlineMaps map; private Vector3 originalPosition; private Vector2 originalSize; private void Start() { map = OnlineMaps.instance; control = OnlineMapsTileSetControl.instance; originalPosition = map.transform.position; originalSize = map.tilesetSize; Update(); } private void Update () { if (Math.Abs(altitude - aircraft.altitude) < float.Epsilon) return; altitude = aircraft.altitude; if (altitude < 10) altitude = 10; double tlx, tly, brx, bry, dx, dy; map.GetCorners(out tlx, out tly, out brx, out bry); OnlineMapsUtils.DistanceBetweenPoints(tlx, tly, brx, bry, out dx, out dy); double posY = altitude * control.GetBestElevationYScale(tlx, tly, brx, bry) * control.elevationScale; if (posY < 100) map.zoom++; else if (posY > 400) map.zoom--; double s = 1 << (OnlineMaps.MAXZOOM - map.zoom); s /= 64; dx /= s; dy /= s; map.tilesetSize = new Vector2((float)dx * 100, (float)dy * 100); Vector2 sizeOffset = map.tilesetSize - originalSize; Vector3 position = originalPosition + new Vector3(sizeOffset.x / 2, 0, sizeOffset.y / -2); if (float.IsInfinity(position.x) || float.IsInfinity(position.z)) return; map.transform.position = position; } }