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); }
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); } }
// 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(); }