Exemplo n.º 1
0
        private Vector3 GetVertex(Vertex v, float eleNoiseFreq, bool useEleNoise, float yOffset)
        {
            var point = new Vector2d(
                Math.Round(v.X, MathUtils.RoundDigitCount),
                Math.Round(v.Y, MathUtils.RoundDigitCount));

            var useEleNoise2 = v.Type == VertexType.FreeVertex && useEleNoise;
            var ele          = _elevationProvider.GetElevation(point);

            if (useEleNoise2)
            {
                ele += Noise.Perlin3D(new Vector3((float)point.X, ele, (float)point.Y), eleNoiseFreq);
            }
            return(new Vector3((float)point.X, ele + yOffset, (float)point.Y));
        }
Exemplo n.º 2
0
        private static float[] retrieveRowElevation([NotNull] IElevationProvider ep, double lat, double minLon, double lonRange)
        {
            if (ep == null)
            {
                throw new ArgumentNullException("ep");
            }

            var rowArray = new float[pixelWidthInt];

            for (int cIdx = 0; cIdx < pixelWidthInt; cIdx++)
            {
                double lon       = minLon + cIdx * lonRange / pixelWidthInt;
                var    elevation = (float)ep.GetElevation(lat, lon);
                rowArray[cIdx] = elevation;
            }
            return(rowArray);
        }
Exemplo n.º 3
0
        public IGameObject BuildWay(Tile tile, Rule rule, Way way)
        {
            // create parent object for waypoint. Use factory to handle object creation on proper thread.
            var parent = _gameObjectFactory.CreateNew("waypoints " + way.Id, tile.GameObject);

            foreach (var coordinate in way.Points)
            {
                // detect position
                var position  = GeoProjection.ToMapCoordinate(tile.RelativeNullPoint, coordinate);
                var elevation = _elevationProvider.GetElevation(coordinate);

                // create new gameobject on main thread.
                Observable.Start(() =>
                {
                    var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                    sphere.transform.position = new Vector3((float)position.X, elevation + 1, (float)position.Y);
                    sphere.transform.parent   = parent.GetComponent <GameObject>().transform;
                }, Scheduler.MainThread);
            }
            // return null as we don't need to attach behaviours
            return(null);
        }