예제 #1
0
    /**
     * 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));
    }
예제 #2
0
        /**
         * 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);
        }