Exemplo n.º 1
0
        public void Along()
        {
            var line = JsonConvert.DeserializeObject <Feature>(Tools.GetResource("fixtures_dc-line.geojson"));

            var pt1 = Turf.Along(line, 1, "miles");
            var pt2 = Turf.Along((LineString)line.Geometry, 1.2, "miles");
            var pt3 = Turf.Along(line, 1.4, "miles");
            var pt4 = Turf.Along((LineString)line.Geometry, 1.6, "miles");
            var pt5 = Turf.Along(line, 1.8, "miles");
            var pt6 = Turf.Along((LineString)line.Geometry, 2, "miles");
            var pt7 = Turf.Along(line, 100, "miles");
            var pt8 = Turf.Along((LineString)line.Geometry, 0, "miles");
            var fc  = new FeatureCollection(new List <Feature>()
            {
                pt1, pt2, pt3, pt4, pt5, pt6, pt7, pt8
            });

            foreach (var f in fc.Features)
            {
                Assert.AreEqual(f.Type, GeoJSONObjectType.Feature);
                Assert.AreEqual(f.Geometry.Type, GeoJSONObjectType.Point);
            }
            Assert.AreEqual(fc.Features.Count, 8);
            var exp = (GeographicPosition)((Point)fc.Features[7].Geometry).Coordinates;
            var act = (GeographicPosition)((Point)pt8.Geometry).Coordinates;

            Assert.AreEqual(exp.Longitude, act.Longitude);
            Assert.AreEqual(exp.Latitude, act.Latitude);
        }
Exemplo n.º 2
0
    //Initialize the tile, add the turf component and tell the turf the tiletype
    public void initTile()
    {
        if (turf == null)
        {
            turf = (Turf)gameObject.AddComponent(typeof(Turf));
            //Debug.Log("Adding Component: turf");
        }
        gameObject.GetComponent <Turf>().turfDescriptor = TileDescriptor;
        gameObject.GetComponent <Turf>().InitTurf();

        if (contentManager == null)
        {
            contentManager = (TileContentManager)gameObject.AddComponent(typeof(TileContentManager));
            //Debug.Log("Adding Component: turf");
        }
        gameObject.GetComponent <TileContentManager>().InitTileContentManager();

        if (pipeManager == null)
        {
            pipeManager = (TilePipeManager)gameObject.AddComponent(typeof(TilePipeManager));
            //Debug.Log("Adding Component: turf");
        }
        gameObject.GetComponent <TilePipeManager>().InitTilePipeManager();

        if (tileNetworkManager == null)
        {
            tileNetworkManager = (Mirror.TileNetworkManager)gameObject.AddComponent(typeof(Mirror.TileNetworkManager));
        }
    }
Exemplo n.º 3
0
        public override void OnInspectorGUI()
        {
            DrawDefaultInspector();

            Turf targetScript = (Turf)target;

            if (GUILayout.Button("build_upper_turf"))
            {
                targetScript.BuildUpper();
            }
            if (GUILayout.Button("build_lower_turf"))
            {
                targetScript.BuildLower();
            }
            if (GUILayout.Button("build_turf"))
            {
                targetScript.BuildTurf();
            }
            if (GUILayout.Button("update_turf"))
            {
                targetScript.UpdateTurf();
            }
            if (GUILayout.Button("update_neighbour_turf"))
            {
                targetScript.UpdateNeighbourTurf();
            }
        }
Exemplo n.º 4
0
        public void Center()
        {
            var boxFC   = JsonConvert.DeserializeObject <FeatureCollection>(Tools.GetResource("center.box.geojson"));
            var blockFC = JsonConvert.DeserializeObject <FeatureCollection>(Tools.GetResource("center.block.geojson"));

            var boxFcCenter = Turf.Center(boxFC);

            boxFcCenter.Properties["marker-color"] = "#f0f";
            var boxFcCenterArray = Turf.GetCoord(boxFcCenter);

            Assert.AreEqual(boxFcCenterArray[0], 65.56640625, 0.00001);
            Assert.AreEqual(boxFcCenterArray[1], 43.59448261855401, 0.00001);

            var blockFcCenter = Turf.Center(blockFC.Features[0]);

            blockFcCenter.Properties["marker-color"] = "#f0f";
            var blockFcCenterArray = Turf.GetCoord(blockFcCenter);

            Assert.AreEqual(blockFcCenterArray[0], -114.02911397119072, 0.00001);
            Assert.AreEqual(blockFcCenterArray[1], 51.050271120392566, 0.00001);

            boxFC.Features.Add(boxFcCenter);
            blockFC.Features.Add(blockFcCenter);
            Console.WriteLine(JsonConvert.SerializeObject(boxFC));
            Console.WriteLine(JsonConvert.SerializeObject(blockFC));
        }
Exemplo n.º 5
0
        public override void ReadFromBuffer(NetIncomingMessage buffer)
        {
            MessageType = (MapMessage)buffer.ReadByte();
            switch (MessageType)
            {
            case MapMessage.TurfUpdate:
                SingleTurf = new Turf()
                {
                    X    = buffer.ReadInt32(),
                    Y    = buffer.ReadInt32(),
                    Tile = buffer.ReadUInt32()
                };
                break;

            case MapMessage.SendTileMap:
                GridIndex = buffer.ReadInt32();
                MapIndex  = buffer.ReadInt32();

                //tile defs
                var numTileDefs = buffer.ReadInt32();
                var tileDefs    = new TileDef[numTileDefs];
                for (var i = 0; i < numTileDefs; i++)
                {
                    tileDefs[i] = new TileDef()
                    {
                        Name = buffer.ReadString()
                    };
                }
                TileDefs = tileDefs;

                // map chunks
                ChunkSize = buffer.ReadUInt16();
                var numChunks = buffer.ReadInt32();
                ChunkDefs = new ChunkDef[numChunks];

                for (var i = 0; i < numChunks; i++)
                {
                    var newChunk = new ChunkDef()
                    {
                        X = buffer.ReadInt32(),
                        Y = buffer.ReadInt32()
                    };

                    var chunkCount = ChunkSize * ChunkSize;
                    var tiles      = new uint[chunkCount];
                    for (var j = 0; j < chunkCount; j++)
                    {
                        tiles[j] = buffer.ReadUInt32();
                    }
                    newChunk.Tiles = tiles;
                    ChunkDefs[i]   = newChunk;
                }
                break;

            case MapMessage.SendMapInfo:
                MapGridsToSend = buffer.ReadInt32();
                break;
            }
        }
Exemplo n.º 6
0
        public void TestDistance()
        {
            var from = new Coordinate(-75.343, 39.984);
            var to   = new Coordinate(-75.534, 39.123);
            var d    = Turf.Distance(from, to);

            Assert.AreEqual(d, 97.12922118967835);
        }
Exemplo n.º 7
0
        public void TestAlong()
        {
            var line = new LineString(new Coordinate[] { new Coordinate(-83, 30), new Coordinate(-84, 36), new Coordinate(-78, 41) });

            var along = Turf.Along(line, 200);

            Assert.AreEqual(along.ToText(), "POINT (-84 36)");
        }
Exemplo n.º 8
0
        public void Bearing()
        {
            var pt1 = Turf.Point(new double[] { -75.4, 39.4 });
            var pt2 = Turf.Point(new double[] { -75.534, 39.123 });

            var bear = Turf.Bearing(pt1, pt2);

            Assert.AreEqual(bear, -159.42, 0.01, "should return the correct bearing");
        }
Exemplo n.º 9
0
        public void Tin()
        {
            var points = JsonConvert.DeserializeObject <FeatureCollection>(Tools.GetResource("Points.geojson"));
            var tinned = Turf.Tin(points, "elevation");

            Assert.AreEqual(tinned.Features[0].Geometry.Type, GeoJSONObjectType.Polygon);
            Assert.AreEqual(tinned.Features.Count, 24);
            Console.WriteLine(JsonConvert.SerializeObject(tinned));
        }
Exemplo n.º 10
0
        public void Bbox()
        {
            var fc        = JsonConvert.DeserializeObject <FeatureCollection>(Tools.GetResource("bbox.FeatureCollection.geojson"));
            var pt        = JsonConvert.DeserializeObject <Feature>(Tools.GetResource("bbox.Point.geojson"));
            var line      = JsonConvert.DeserializeObject <LineString>(Tools.GetResource("bbox.LineString.geojson"));
            var poly      = JsonConvert.DeserializeObject <Feature>(Tools.GetResource("bbox.Polygon.geojson"));
            var multiLine = JsonConvert.DeserializeObject <MultiLineString>(Tools.GetResource("bbox.MultiLineString.geojson"));
            var multiPoly = JsonConvert.DeserializeObject <MultiPolygon>(Tools.GetResource("bbox.MultiPolygon.geojson"));

            // FeatureCollection
            var fcExtent = Turf.Bbox(fc);

            Assert.AreEqual(fcExtent[0], 20);
            Assert.AreEqual(fcExtent[1], -10);
            Assert.AreEqual(fcExtent[2], 130);
            Assert.AreEqual(fcExtent[3], 4);

            // Point
            var ptExtent = Turf.Bbox(pt);

            Assert.AreEqual(ptExtent[0], 102);
            Assert.AreEqual(ptExtent[1], 0.5);
            Assert.AreEqual(ptExtent[2], 102);
            Assert.AreEqual(ptExtent[3], 0.5);

            // Line
            var lineExtent = Turf.Bbox(line);

            Assert.AreEqual(lineExtent[0], 102);
            Assert.AreEqual(lineExtent[1], -10);
            Assert.AreEqual(lineExtent[2], 130);
            Assert.AreEqual(lineExtent[3], 4);

            // Polygon
            var polyExtent = Turf.Bbox(poly);

            Assert.AreEqual(polyExtent[0], 100);
            Assert.AreEqual(polyExtent[1], 0);
            Assert.AreEqual(polyExtent[2], 101);
            Assert.AreEqual(polyExtent[3], 1);

            // MultiLineString
            var multiLineExtent = Turf.Bbox(multiLine);

            Assert.AreEqual(multiLineExtent[0], 100);
            Assert.AreEqual(multiLineExtent[1], 0);
            Assert.AreEqual(multiLineExtent[2], 103);
            Assert.AreEqual(multiLineExtent[3], 3);

            // MultiPolygon
            var multiPolyExtent = Turf.Bbox(multiPoly);

            Assert.AreEqual(multiPolyExtent[0], 100);
            Assert.AreEqual(multiPolyExtent[1], 0);
            Assert.AreEqual(multiPolyExtent[2], 103);
            Assert.AreEqual(multiPolyExtent[3], 3);
        }
Exemplo n.º 11
0
        public void Nearest()
        {
            var pt  = JsonConvert.DeserializeObject <Feature>(Tools.GetResource("nearest.pt.geojson"));
            var pts = JsonConvert.DeserializeObject <FeatureCollection>(Tools.GetResource("nearest.pts.geojson"));

            var closestPt = Turf.Nearest(pt, pts);

            Assert.AreEqual(closestPt.Geometry.Type, GeoJSONObjectType.Point, "should be a point");
            Assert.AreEqual(((GeographicPosition)((Point)closestPt.Geometry).Coordinates).Longitude, -75.33, "lon -75.33");
            Assert.AreEqual(((GeographicPosition)((Point)closestPt.Geometry).Coordinates).Latitude, 39.44, "lat 39.44");
        }
Exemplo n.º 12
0
 public void updateTurfs()
 {
     foreach (GameObject tileobj in tile_list)
     {
         Turf tile_turf = tileobj.GetComponent <Turf>();
         if (tile_turf != null)
         {
             tile_turf.UpdateTurf();
         }
     }
 }
Exemplo n.º 13
0
        public void Inside_PolyWithHole()
        {
            var ptInHole      = Turf.Point(new double[] { -86.69208526611328, 36.20373274711739 });
            var ptInPoly      = Turf.Point(new double[] { -86.72229766845702, 36.20258997094334 });
            var ptOutsidePoly = Turf.Point(new double[] { -86.75079345703125, 36.18527313913089 });
            var polyHole      = JsonConvert.DeserializeObject <Feature>(Tools.GetResource("poly-with-hole.geojson"));

            Assert.False(Turf.Inside(ptInHole, polyHole));
            Assert.True(Turf.Inside(ptInPoly, polyHole));
            Assert.False(Turf.Inside(ptOutsidePoly, polyHole));
        }
Exemplo n.º 14
0
        public void LineDistance()
        {
            var route1 = JsonConvert.DeserializeObject <Feature>(Tools.GetResource("linedistance.route1.geojson"));
            var route2 = JsonConvert.DeserializeObject <Feature>(Tools.GetResource("linedistance.route2.geojson"));

            Assert.AreEqual(Math.Round(Turf.LineDistance((IGeoJSONObject)route1.Geometry, "miles")), 202);

            var point1 = Turf.Point(new double[] { -75.343, 39.984 });

            try
            {
                Turf.LineDistance(point1, "miles");
                Assert.Fail();
            }
            catch
            {
                Assert.Pass();
            }

            var multiPoint1 = new MultiPoint(new List <Point>()
            {
                new Point(new GeographicPosition(39.984, -75.343)),
                new Point(new GeographicPosition(39.123, -75.534))
            });

            try
            {
                Turf.LineDistance(multiPoint1, "miles");
                Assert.Fail();
            }
            catch
            {
                Assert.Pass();
            }

            Assert.AreEqual(Math.Round(Turf.LineDistance(route1, "miles")), 202);
            Assert.True((Turf.LineDistance(route2, "kilometers") - 742) < 1 && (Turf.LineDistance(route2, "kilometers") - 742) > (-1));

            var feat = JsonConvert.DeserializeObject <Feature>(Tools.GetResource("linedistance.polygon.geojson"));

            Assert.AreEqual(Math.Round(1000 * Turf.LineDistance(feat, "kilometers")), 5599);

            feat = JsonConvert.DeserializeObject <Feature>(Tools.GetResource("linedistance.multilinestring.geojson"));
            Assert.AreEqual(Math.Round(1000 * Turf.LineDistance(feat, "kilometers")), 4705);

            feat = JsonConvert.DeserializeObject <Feature>(Tools.GetResource("linedistance.multipolygon.geojson"));
            Assert.AreEqual(Math.Round(1000 * Turf.LineDistance(feat, "kilometers")), 8334);

            var fc = JsonConvert.DeserializeObject <FeatureCollection>(Tools.GetResource("linedistance.featurecollection.geojson"));

            Assert.AreEqual(Math.Round(1000 * Turf.LineDistance(fc, "kilometers")), 10304);
        }
Exemplo n.º 15
0
    public override bool CanInteract(InteractionEvent interactionEvent)
    {
        var            tileObject   = interactionEvent.Target.GetComponent <TileObject>();
        TileDefinition tile         = tileObject.Tile;
        Turf           existingTurf = tile.turf;

        if (existingTurf && (!ConstructIfTurf || existingTurf.isWall && !ConstructIfWall))
        {
            return(false);
        }

        return(base.CanInteract(interactionEvent));
    }
Exemplo n.º 16
0
        public void TestArea()
        {
            var polygon = new Polygon(new LinearRing(new Coordinate[] {
                new Coordinate(125, -15),
                new Coordinate(113, -22),
                new Coordinate(154, -27),
                new Coordinate(144, -15),
                new Coordinate(125, -15),
            }));
            var a = Turf.Area(polygon);

            Assert.AreEqual(a, 3339946239196.927);
        }
Exemplo n.º 17
0
        public void Circle()
        {
            var    center = Turf.Point(new double[] { -75.343, 39.984 });
            double radius = 5;
            int    steps  = 10;

            var polygon = Turf.Circle(center, radius, steps, "kilometers");
            var point1  = Turf.Destination(center, radius - 1, 45, "kilometers");
            var point2  = Turf.Destination(center, radius + 1, 135, "kilometers");

            Assert.AreEqual(Turf.Inside(point1, polygon), true, "point is inside the polygon");
            Assert.AreEqual(Turf.Inside(point2, polygon), false, "point is outside the polygon");
        }
Exemplo n.º 18
0
        public void Distance()
        {
            var pt1 = Turf.Point(new double[] { -75.343, 39.984 });
            var pt2 = Turf.Point(new double[] { -75.534, 39.123 });

            Assert.AreEqual(Turf.Distance(pt1, pt2, "miles"), 60.37218405837491, 0.00001, "miles");
            Assert.AreEqual(Turf.Distance(pt1, pt2, "nauticalmiles"), 52.461979624130436, 0.00001, "miles");
            Assert.AreEqual(Turf.Distance(pt1, pt2, "kilometers"), 97.15957803131901, 0.00001, "kilometers");
            Assert.AreEqual(Turf.Distance(pt1, pt2, "kilometres"), 97.15957803131901, 0.00001, "kilometres");
            Assert.AreEqual(Turf.Distance(pt1, pt2, "radians"), 0.015245501024842149, 0.00001, "radians");
            Assert.AreEqual(Turf.Distance(pt1, pt2, "degrees"), 0.8735028650863799, 0.00001, "degrees");
            Assert.AreEqual(Turf.Distance(pt1, pt2), 97.15957803131901, 0.00001, "default=kilometers");
        }
Exemplo n.º 19
0
        public void Destination()
        {
            var    pt1  = Turf.Point(new double[] { -75.0, 39.0 });
            double dist = 100;
            double bear = 180;

            var pt2     = Turf.Destination(pt1, dist, bear, "kilometers");
            var ptgeom  = (Point)pt2.Geometry;
            var prcoord = (GeographicPosition)ptgeom.Coordinates;

            Assert.AreEqual(prcoord.Longitude, -75, 0.001, "returns the correct point");
            Assert.AreEqual(prcoord.Latitude, 38.10096062273525, 0.001, "returns the correct point");
            Assert.AreEqual(ptgeom.Type, GeoJSONObjectType.Point, "returns the correct point");
        }
Exemplo n.º 20
0
        public void BboxPolygon()
        {
            var poly = Turf.BboxPolygon(new List <double>()
            {
                0, 0, 10, 10
            });

            Assert.AreEqual(poly.Geometry.Type, GeoJSONObjectType.Polygon, "should be a Polygon geometry type");

            var coords = ((Polygon)poly.Geometry).Coordinates[0].Coordinates;

            Assert.AreEqual(coords.Count, 5);
            Assert.AreEqual(((GeographicPosition)coords[0]).Latitude, ((GeographicPosition)coords[coords.Count - 1]).Latitude);
            Assert.AreEqual(((GeographicPosition)coords[0]).Longitude, ((GeographicPosition)coords[coords.Count - 1]).Longitude);
        }
Exemplo n.º 21
0
        public void PropEach()
        {
            Action <Dictionary <string, object>, int> callback = (Dictionary <string, object> obj, int i) =>
            {
                Assert.AreEqual(obj, new Dictionary <string, object>()
                {
                    { "a", 1 }
                });
                Assert.AreEqual(i, 0);
            };

            Turf.PropEach(pointFeature, callback);

            var pointCollect = Collection(pointFeature);

            Turf.PropEach(pointCollect, callback);
        }
Exemplo n.º 22
0
        public void Tag()
        {
            var points   = JsonConvert.DeserializeObject <FeatureCollection>(Tools.GetResource("tagPoints.geojson"));
            var polygons = JsonConvert.DeserializeObject <FeatureCollection>(Tools.GetResource("tagPolygons.geojson"));

            var taggedPoints = Turf.Tag(points, polygons, "polyID", "containingPolyID");

            Assert.AreEqual(taggedPoints.Features.Count, points.Features.Count,
                            "tagged points should have the same length as the input points");

            var count = taggedPoints.Features.Where(x =>
            {
                object val;
                x.Properties.TryGetValue("containingPolyID", out val);
                return(val != null && int.Parse(val.ToString()) == 4);
            }).Count();

            Assert.AreEqual(count, 6, "polygon 4 should have tagged 6 points");
        }
Exemplo n.º 23
0
        public override void ReadFromBuffer(NetIncomingMessage buffer)
        {
            MessageType = (MapMessage)buffer.ReadByte();
            switch (MessageType)
            {
            case MapMessage.TurfUpdate:
                SingleTurf = new Turf()
                {
                    X    = buffer.ReadInt32(),
                    Y    = buffer.ReadInt32(),
                    Tile = buffer.ReadUInt32()
                };
                break;

            case MapMessage.SendTileMap:
                //not dealing with this right now...
                throw new NotImplementedException();
                break;
            }
        }
Exemplo n.º 24
0
        public void Inside_FeatureCollection()
        {
            // test for a simple polygon
            var poly = new Feature(new Polygon(new List <LineString>()
            {
                new LineString(new List <Position>()
                {
                    new GeographicPosition(0, 0),
                    new GeographicPosition(100, 0),
                    new GeographicPosition(100, 100),
                    new GeographicPosition(0, 100),
                    new GeographicPosition(0, 0)
                })
            }));
            var ptIn  = Turf.Point(new double[] { 50, 50 });
            var ptOut = Turf.Point(new double[] { 140, 150 });

            Assert.True(Turf.Inside(ptIn, poly), "point inside simple polygon");
            Assert.False(Turf.Inside(ptOut, poly), "point outside simple polygon");

            // test for a concave polygon
            var concavePoly = new Feature(new Polygon(new List <LineString>()
            {
                new LineString(new List <Position>()
                {
                    new GeographicPosition(0, 0),
                    new GeographicPosition(50, 50),
                    new GeographicPosition(100, 50),
                    new GeographicPosition(100, 100),
                    new GeographicPosition(0, 100),
                    new GeographicPosition(0, 0)
                })
            }));
            var ptConcaveIn  = Turf.Point(new double[] { 75, 75 });
            var ptConcaveOut = Turf.Point(new double[] { 25, 50 });

            Assert.True(Turf.Inside(ptConcaveIn, concavePoly), "point inside concave polygon");
            Assert.False(Turf.Inside(ptConcaveOut, concavePoly), "point outside concave polygon");
        }
Exemplo n.º 25
0
        public override bool CanInteract(InteractionEvent interactionEvent)
        {
            GameObject target = (interactionEvent.Target as IGameObjectProvider)?.GameObject;

            if (target == null)
            {
                return(false);
            }

            if (!InteractionHelpers.RangeCheck(interactionEvent))
            {
                return(false);
            }

            // Needs to be used on tile
            TileObject tileObject = target.GetComponentInParent <TileObject>();

            if (tileObject == null || tileObject.Tile.turf == null)
            {
                return(false);
            }

            Turf turf = tileObject.Tile.turf;

            // Check if welder is on
            if ((interactionEvent.Source as IToggleable)?.GetState() == false)
            {
                return(false);
            }

            // Check if turf is in dict
            if (!TurfReinforceList.ContainsKey(turf) && !TurfReinforceList.ContainsValue(turf))
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 26
0
        public void MidPoint()
        {
            var units = "miles";

            var pt1 = Turf.Point(new double[] { 0, 0 });
            var pt2 = Turf.Point(new double[] { 10, 0 });
            var mid = Turf.MidPoint(pt1, pt2);

            Assert.AreEqual(Turf.Distance(pt1, mid, units), Turf.Distance(mid, pt2, units), 0.000001,
                            "midpoint -- horizonatal equator");

            pt2 = Turf.Point(new double[] { 0, 10 });
            mid = Turf.MidPoint(pt1, pt2);
            Assert.AreEqual(Turf.Distance(pt1, mid, units), Turf.Distance(mid, pt2, units), 0.000001,
                            "midpoint -- vertical from equator");

            mid = Turf.MidPoint(pt2, pt1);
            Assert.AreEqual(Turf.Distance(pt1, mid, units), Turf.Distance(mid, pt2, units), 0.000001,
                            "midpoint -- vertical to equator");

            pt1 = Turf.Point(new double[] { -1, 10 });
            pt2 = Turf.Point(new double[] { 1, -1 });
            mid = Turf.MidPoint(pt1, pt2);
            Assert.AreEqual(Turf.Distance(pt1, mid, units), Turf.Distance(mid, pt2, units), 0.000001,
                            "midpoint -- diagonal back over equator");

            pt1 = Turf.Point(new double[] { -5, -1 });
            pt2 = Turf.Point(new double[] { 5, 10 });
            mid = Turf.MidPoint(pt1, pt2);
            Assert.AreEqual(Turf.Distance(pt1, mid, units), Turf.Distance(mid, pt2, units), 0.000001,
                            "midpoint -- diagonal forward over equator");

            pt1 = Turf.Point(new double[] { 22.5, 21.94304553343818 });
            pt2 = Turf.Point(new double[] { 92.10937499999999, 46.800059446787316 });
            mid = Turf.MidPoint(pt1, pt2);
            Assert.AreEqual(Turf.Distance(pt1, mid, units), Turf.Distance(mid, pt2, units), 0.000001,
                            "midpoint -- long distance");
        }
Exemplo n.º 27
0
        public void Envelope()
        {
            var fc        = JsonConvert.DeserializeObject <FeatureCollection>(Tools.GetResource("envelope.fc.geojson"));
            var enveloped = Turf.Envelope(fc);

            Assert.AreEqual(enveloped.Geometry.Type, GeoJSONObjectType.Polygon);
            var exp = new List <List <double> >()
            {
                new List <double> ()
                {
                    20, -10
                },
                new List <double> ()
                {
                    130, -10
                },
                new List <double> ()
                {
                    130, 4
                },
                new List <double> ()
                {
                    20, 4
                },
                new List <double> ()
                {
                    20, -10
                }
            };
            var i = 0;

            Turf.CoordEach(enveloped, (List <double> act) => {
                Assert.AreEqual(act, exp[i], "positions are correct");
                i++;
            });
        }
Exemplo n.º 28
0
    public Turf[,] GenerateActiveLayer(int size = 255)
    {
        MeshFilter objectMesh = ((GameObject)levelResources.loadedResources["turf"]).GetComponentInChildren <MeshFilter>();

        List <GenerationAreaSettings> areaData = ReadGenerationSettings();

        Turf[,] turfs = new Turf[size, size];

        //Count how many rooms were made
        int roomCount       = 0;
        int successfulCount = 0;

        //Populate array with default values
        for (int x = 0; x < size; x++)
        {
            for (int y = 0; y < size; y++)
            {
                turfs[x, y] = new Turf(x, y);
            }
        }

        List <TileData> tilesToProcess = new List <TileData>();
        TileData        initialRoom    = new TileData();

        initialRoom.connection_x = 1;
        initialRoom.connection_y = 0;
        initialRoom.x            = size / 2;
        initialRoom.y            = size / 2;
        tilesToProcess.Add(initialRoom);

        //Generate the rooms
        while (tilesToProcess.Count > 0)
        {
            //Log the amount of rooms
            roomCount++;
            //Log.Print("Processing tile at " + tilesToProcess[0].x + "," + tilesToProcess[0].y + " with direction " + tilesToProcess[0].connection_x + "," + tilesToProcess[0].connection_y);

            //Generate a list of rooms that can be used
            List <GenerationAreaSettings> validRooms = new List <GenerationAreaSettings>();

            //Check which areas can be placed
            foreach (GenerationAreaSettings setting in areaData)
            {
                Direction direction = Direction.NORTH;
                if (tilesToProcess[0].connection_x == 1)
                {
                    direction = Direction.WEST;
                }
                else if (tilesToProcess[0].connection_x == -1)
                {
                    direction = Direction.EAST;
                }
                else if (tilesToProcess[0].connection_y == 1)
                {
                    direction = Direction.NORTH;
                }
                else if (tilesToProcess[0].connection_y == -1)
                {
                    direction = Direction.SOUTH;
                }
                else
                {
                    Log.PrintError("Major error, door direction invalid");
                }
                validRooms.AddRange(setting.CheckSpace(turfs, tilesToProcess[0].x, tilesToProcess[0].y, direction));
            }

            //Check weights
            //Place it
            if (validRooms.Count == 0)
            {
                tilesToProcess.RemoveAt(0);
                continue;
            }

            GenerationAreaSettings chosenArea = Helpers.Pick(validRooms);

            foreach (GenerationTurfSettings tile in chosenArea.generationTurfSettings)
            {
                //Debug.Log("[" + tile.x + "]" + "[" + tile.y + "] : Added turf, type : [" + tile.type + "]" + (tile.type == "wall").ToString()); //DEBUG, REMOVE WHEN DONE
                turfs[tile.x, tile.y].calculated = true;
                turfs[tile.x, tile.y].occupied   = tile.type == "wall";
                turfs[tile.x, tile.y].hasCeiling = tile.type != "sky";
                turfs[tile.x, tile.y].hasFloor   = tile.type != "pit";
                turfs[tile.x, tile.y].turfMesh   = objectMesh.sharedMesh;
                if (tile.door_dir_x != 0 || tile.door_dir_y != 0)
                {
                    turfs[tile.x, tile.y].door = true;
                }

                if (tile.door_dir_x != 0 || tile.door_dir_y != 0)
                {
                    TileData data = new TileData();
                    data.x            = tile.x;
                    data.y            = tile.y;
                    data.connection_x = tile.door_dir_x;
                    data.connection_y = tile.door_dir_y;
                    tilesToProcess.Add(data);

                    //Log.Print("Added new tile to be processed at " + data.x + "," + data.y + "," + data.connection_x + "," + data.connection_y);
                }
            }

            successfulCount++;
            tilesToProcess.RemoveAt(0);
        }

        Log.Print("<color=green>Successfully generated " + roomCount + " rooms, of which " + successfulCount + " were successful</color>");

        return(turfs);
    }
Exemplo n.º 29
0
    /// <summary>
    /// Calculates the path.
    /// We can do it all in 1 go, this system is on a seperate thread so it doesn't matter too much if we take a while.
    /// This is probably a pretty ineffecient implementation but its on a seperate thread, gets the job done and isn't too critical for the project.
    /// </summary>
    /// <param name="request"></param>
    public bool CalculatePath(PathfindingRequest request)
    {
        pathId++;
        //The list of nodes that can be searched
        //Everything in this list should have updated costs values before going in
        //since we don't reset and recaclulate every time so the old path values will
        //be carried over otherwise.
        List <Node> searchNodes = new List <Node>();
        //Cache the end node because its quicker than checking list every time
        Node targetNode = worldNodes[request.end_x, request.end_y];

        //Calculate initial nodes (The ones adjacent)
        SetupInitialConditions(ref searchNodes, request);
        //Cool lets just keep searching until we run out of things to search
        //If we have to search more than X nodes, just assume its impossible.
        int       sanity = 20000;
        Stopwatch timer  = new Stopwatch();

        timer.Start();
        while (sanity > 0 && searchNodes.Count > 0)
        {
            sanity--;
            //Might be a way with cachine to make this faster, this is quite slow :(
            //We could use a sorted list, binary search and insertion in order?#
            //Would be tons faster
            //(We do all this mini optimisations then have this as super slow!)
            int   lowestIndex = 0;
            float lowestCost  = searchNodes[lowestIndex].GetTotalCost();
            for (int i = 1; i < searchNodes.Count; i++)
            {
                float testCost = searchNodes[i].GetTotalCost();
                if (testCost < lowestCost)
                {
                    lowestCost  = testCost;
                    lowestIndex = i;
                }
            }
            //We know the node to search now
            Node testingNode = searchNodes[lowestIndex];
            //Console.WriteLine($"Checking: {testingNode.x}, {testingNode.y} with cost: {testingNode.GetTotalCost()}");
            //Have we reached the end?
            if (testingNode == targetNode)
            {
                List <Node> quickestPath = testingNode.GetRecursiveNodes();
                List <Turf> pathTurfs    = new List <Turf>();
                Log.PrintDebug($"Found path length: {quickestPath.Count}");
#if !UNITY_INCLUDE_TESTS
                foreach (Node node in quickestPath)
                {
                    Turf locatedBase = LevelGenerator.current.turfs[node.x, node.y];
                    pathTurfs.Add(locatedBase);
                }
#endif
                Path finalPath = new Path();
                finalPath.calculatedRoute = pathTurfs;
                request.CompletePath(finalPath);
                timer.Stop();
                Log.PrintDebug($"Found path in {timer.ElapsedMilliseconds}ms");
                return(true);
            }
            //Add surrounding nodes
            AddSurroundingNodes(ref searchNodes, testingNode, request);
            //Block it from being re-added
            testingNode.isChecked = true;
            //Thats all the checking we needed to do
            searchNodes.Remove(testingNode);
        }
        //No path found
        request.FailPath();
        Log.PrintDebug("No path was found");
        Log.PrintDebug($"Failed to find path in {timer.ElapsedMilliseconds}ms");
        return(false);
    }
Exemplo n.º 30
0
        public void CoordEach()
        {
            var expect = new List <List <double> >()
            {
                new List <double>()
                {
                    0, 0
                }
            };
            var output = new List <List <double> >();
            Action <List <double> > callback = (List <double> obj) => {
                output.Add(obj);
            };

            Turf.CoordEach(pointFeature, callback);
            Assert.AreEqual(output, expect);

            var pointCollect = Collection(pointFeature);

            output.Clear();
            Turf.CoordEach(pointCollect, callback);
            Assert.AreEqual(output, expect);

            expect.Add(new List <double>()
            {
                1, 1
            });
            output.Clear();
            Turf.CoordEach(lineStringGeometry, callback);
            Assert.AreEqual(output, expect);

            var lineStringFeature = Feature(lineStringGeometry);

            output.Clear();
            Turf.CoordEach(lineStringFeature, callback);
            Assert.AreEqual(output, expect);

            var lineStringCollect = Collection(lineStringFeature);

            output.Clear();
            Turf.CoordEach(lineStringCollect, callback);
            Assert.AreEqual(output, expect);

            expect.Add(new List <double>()
            {
                0, 1
            });
            output.Clear();
            Turf.CoordEach(polygonGeometry, callback, true);
            Assert.AreEqual(output, expect);

            var polygonFeature = Feature(polygonGeometry);

            output.Clear();
            Turf.CoordEach(polygonFeature, callback, true);
            Assert.AreEqual(output, expect);

            var polygonCollect = Collection(polygonFeature);

            output.Clear();
            Turf.CoordEach(polygonCollect, callback, true);
            Assert.AreEqual(output, expect);

            expect.Add(new List <double>()
            {
                0, 0
            });
            output.Clear();
            Turf.CoordEach(polygonGeometry, callback);
            Assert.AreEqual(output, expect);

            output.Clear();
            Turf.CoordEach(polygonFeature, callback);
            Assert.AreEqual(output, expect);

            output.Clear();
            Turf.CoordEach(polygonCollect, callback);
            Assert.AreEqual(output, expect);
        }