/** * Parse file and render buildings when scene starts */ private void Start() { Caching.ClearCache(); //hide and lock cursor into center UiUtils.HideCursor(); TutorialUtils.InitTutorial(TutorialCanvas, Settings); BuildingPickerCanvas.SetActive(false); ExitCanvasDialog.SetActive(false); //load XML file tags var xmlFile = new XmlDocument(); //load file xmlFile.Load(FileUtils.GetFullMapPath(Map.MapName)); //get node and way tags var nodeTags = xmlFile.SelectNodes(".//node"); var wayTags = xmlFile.SelectNodes(".//way"); //cache IDs in node tag for coordinate pairing var nodeTagIds = CacheNodeTagIds(nodeTags); //parse building and roads var buildings = BuildingLoader.Get().LoadFile(nodeTags, nodeTagIds, wayTags); var roads = RoadLoader.Get().LoadFile(nodeTags, nodeTagIds, wayTags); var trees = TreeLoader.Get().LoadFile(); var mapMiddlePoint = GetMiddlePoint(buildings, roads); //download elevation data AltitudeLoader.Get().SetAltitude(TerrainUtils.GetLatLngGrid(mapMiddlePoint)); //render terrain, buildings, roads etc. StartCoroutine(RenderObjects(mapMiddlePoint, buildings, roads, trees)); }
/** * Transform ElevationAPI data into terrain heights */ private float[,] ConvertHeights() { var heights = AltitudeLoader.Get().AltitudeData; var convertedHeights = new float[TerrainUtils.MapWidth, TerrainUtils.MapHeight]; var maxValue = heights.Max(x => x.Elevation); var minValue = heights.Min(y => y.Elevation); var heightsIndex = 0; for (var i = 0; i < TerrainUtils.MapWidth; i++) { for (var j = 0; j < TerrainUtils.MapHeight; j++) { //creating of terrain edges if (i == 0 || j == 0 || i == TerrainUtils.MapWidth - 1 || j == TerrainUtils.MapWidth - 1) { convertedHeights[i, j] = 0; } else { convertedHeights[i, j] = (heights[heightsIndex].Elevation - minValue) / (maxValue - minValue); } ++heightsIndex; } } return(convertedHeights); }