using System; using System.Collections; using System.IO; using UnityEngine; using UnityEngine.UI; namespace GISTech.GISTerrainLoader { public class SimpleTerrainGenerator : MonoBehaviour { public WayPoints GeoWaypoints; public AirplaneDemo AirPlane; public Text UIText; public bool InstantiateGameObjects; private string TerrainFilePath; private RuntimeTerrainGenerator RuntimeGenerator; private GISTerrainLoaderPrefs Prefs; private GISTerrainLoaderRuntimePrefs RuntimePrefs; [HideInInspector] public bool TerrainGenerated; public bool GenerateTerrainBackground; private void Start() { TerrainFilePath = Application.streamingAssetsPath + "/GIS Terrains/Example_SRTM30/Desert.tif"; RuntimePrefs = GISTerrainLoaderMonoSingleton.Get; Prefs = RuntimePrefs.Prefs; Prefs.TerrainFilePath = TerrainFilePath; RuntimeGenerator = GISTerrainLoaderMonoSingleton.Get; RuntimeTerrainGenerator.OnFinish += OnTerrainGeneratingCompleted; StartCoroutine(GenerateTerrain(TerrainFilePath)); } private void Update() { if (TerrainGenerated) { UIText.text = "Latitude: " + AirPlane.GetAirPlaneLatLonElevation().y + " \nLongitude: " + AirPlane.GetAirPlaneLatLonElevation().x + " \nElevation:" + Math.Round(AirPlane.GetAirPlaneLatLonElevation().z, 2) + " m"; } } private IEnumerator GenerateTerrain(string TerrainPath) { yield return new WaitForSeconds(2f); if ((Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) && (string.IsNullOrEmpty(TerrainPath) || !File.Exists(TerrainPath))) { Debug.LogError("Terrain file null or not supported.. Try againe"); yield break; } InitializingRuntimePrefs(TerrainPath); StartCoroutine(RuntimeGenerator.StartGenerating(Prefs)); } private void InitializingRuntimePrefs(string TerrainPath) { RuntimeGenerator.enabled = true; Prefs.TerrainFilePath = TerrainPath; Prefs.RemovePrvTerrain = OptionEnabDisab.Enable; Prefs.TerrainElevation = TerrainElevation.RealWorldElevation; Prefs.terrainDimensionMode = TerrainDimensionsMode.AutoDetection; Prefs.textureloadingMode = TexturesLoadingMode.AutoDetection; Prefs.vectorType = VectorType.OpenStreetMap; if (GenerateTerrainBackground) { Prefs.TerrainBackground = OptionEnabDisab.Enable; Prefs.TerrainBackgroundHeightmapResolution = 513; Prefs.TerrainBackgroundTextureResolution = 512; } } private void OnTerrainGeneratingCompleted(GISTerrainContainer m_container) { GeoWaypoints.ConvertLatLonToSpacePosition(RuntimeGenerator.GeneratedContainer, InstantiateGameObjects); AirPlane.OnTerrainGeneratingCompleted(); TerrainGenerated = true; } private void OnDisable() { RuntimeTerrainGenerator.OnFinish -= OnTerrainGeneratingCompleted; } } }