Esempio n. 1
0
        private static void HelperMethodsTest()
        {
            // Angle:
            Debug.Assert(HelperMethods.Circa(
            HelperMethods.GetAngleDifference(new Vector2(1, 0), new Vector2(0, -1)), -Math.PI / 2));

            // PointOnLine:
            Debug.Assert(HelperMethods.PointOnLine(new Vector2(1, 1), new Vector2(0, 0), new Vector2(2, 2)));
            Debug.Assert(HelperMethods.PointOnLine(new Vector2(1, 1), new Vector2(2, 2), new Vector2(0, 0)));
            Debug.Assert(HelperMethods.PointOnLine(new Vector2(1, 1), new Vector2(2, 0), new Vector2(0, 2)));
            Debug.Assert(!HelperMethods.PointOnLine(new Vector2(2, 0), new Vector2(1, 1), new Vector2(0, 2)));
            Debug.Assert(HelperMethods.PointOnLine(new Vector2(1, 1), new Vector2(1, 1), new Vector2(0, 0)));
            Debug.Assert(HelperMethods.PointOnLine(new Vector2(0, 2), new Vector2(0, 0), new Vector2(0, 2)));
            Debug.Assert(HelperMethods.PointOnLine(new Vector2(0, 0), new Vector2(0, 2), new Vector2(0, 0)));

            // PointInPolygon:
            // These points are all inside:
            Polygon polygon = new Polygon(new List<MeshNode> { new MeshNode(0, 0), new MeshNode(2, 0), new MeshNode(2, 2), new MeshNode(1, 2), new MeshNode(0, 2), new MeshNode(0, 1) });
            polygon.ImposeOwnership();
            foreach (MeshNode node in polygon.GetNodes())
            {
                Debug.Assert(polygon.PointInPolygon(node.mVector, false));
            }
            Debug.Assert(polygon.PointInPolygon(new Vector2(1, 0), false));
            Debug.Assert(polygon.PointInPolygon(new Vector2(1, 1), false));
            Debug.Assert(polygon.PointInPolygon(new Vector2(2, 1), false));
            // Now for some points outside:
            Debug.Assert(!polygon.PointInPolygon(new Vector2(0, -1), false));
            Debug.Assert(!polygon.PointInPolygon(new Vector2(1, -1), false));
            Debug.Assert(!polygon.PointInPolygon(new Vector2(2, -1), false));
            Debug.Assert(!polygon.PointInPolygon(new Vector2(0, 3), false));
            Debug.Assert(!polygon.PointInPolygon(new Vector2(1, 3), false));
            Debug.Assert(!polygon.PointInPolygon(new Vector2(2, 3), false));

            polygon.Delete(true);
        }
Esempio n. 2
0
        public void DrawPolygon(Polygon polygon)
        {
            List<MeshNode> cornerNodes = polygon.GetRectCorners();
            List<Vector2> cornerVectors = new List<Vector2>();
            for (int i = 0; i < 4; i++)
            {
                cornerVectors.Add(ToScreenCoords(cornerNodes[i].mVector));
            }
            for (int i = 0; i <= 1; i++)
            {
                CodeTest.DrawLine(cornerVectors[i], cornerVectors[i + 2], 1, Color.Purple);
            }

            foreach (Edge e in polygon.GetEdges())
            {
                if (e.GetContrahent() == null)
                    DrawSingleEdge(e);
                else
                    DrawEdge(e);
            }
            foreach (MeshNode node in polygon.GetNodes())
            {
                DrawNode(node);
            }
        }
Esempio n. 3
0
        // ReSharper restore UnusedMember.Local
        // ReSharper disable UnusedMember.Local
        // Sometimes I want to call this test for debugging, so it's okay that it's currently
        // not used.
        private static void CreateInstanceFromBlockmapTest()
        {
            PointSet<int> blocked = new PointSet<int>();
            blocked.Add(12,12);
            PointSet<int> coveredByPolygon = new PointSet<int>();
            coveredByPolygon.Add(14,10);
            coveredByPolygon.Add(14,11);
            coveredByPolygon.Add(14,12);
            coveredByPolygon.Add(14,13);
            coveredByPolygon.Add(14,14);
            Polygon remainingPolygon = new Polygon(new List<MeshNode>{new MeshNode(14,10), new MeshNode(15,10), new MeshNode(15,14), new MeshNode(14,14)});
            Rectangle area = new Rectangle(10,10,4,4);
            List<MeshNode> createdNodes = remainingPolygon.GetNodes();

            NavigationMesh mesh = NavigationMeshFactory.CreateInstanceFromBlockmap(blocked,
                                                                            new List<Polygon>{remainingPolygon},
                                                                            coveredByPolygon,
                                                                            1,
                                                                            area,
                                                                            createdNodes,
                                                                            false);
            mesh.CheckIntegrity();
            Debug.WriteLine("CreateInstanceFromBlockmapTest ended.");
            GameLogic.GetInstance().GetGameStateManager().UnloadGame();
        }