コード例 #1
0
ファイル: NavigationMesh.cs プロジェクト: KDSBest/StreamRTS
        public void Initialize(NavigationPolygons polygons)
        {
            Reset();

            this.polygons = polygons;

            Tesselation();
            for (int i = 0; i < this.tesselationAlgorithm.ElementCount; i++)
            {
                var v0 = this.tesselationAlgorithm.Vertices[this.tesselationAlgorithm.Elements[i * 3]].Position.ToIntPoint();
                var v1 = this.tesselationAlgorithm.Vertices[this.tesselationAlgorithm.Elements[i * 3 + 1]].Position.ToIntPoint();
                var v2 = this.tesselationAlgorithm.Vertices[this.tesselationAlgorithm.Elements[i * 3 + 2]].Position.ToIntPoint();

                var triangle = new NavigationTriangle(v0, v1, v2);
                AllTriangle.Add(triangle);
            }

            // Refine();

            foreach (var triangle in AllTriangle)
            {
                AddTriangleToPointMap(triangle.U, triangle);
                AddTriangleToPointMap(triangle.V, triangle);
                AddTriangleToPointMap(triangle.W, triangle);
                AddTriangleToPointMap(triangle.S0.Midpoint(), triangle);
                AddTriangleToPointMap(triangle.S1.Midpoint(), triangle);
                AddTriangleToPointMap(triangle.S2.Midpoint(), triangle);
            }
        }
コード例 #2
0
ファイル: NavigationMesh.cs プロジェクト: KDSBest/StreamRTS
        void UpdateTriangulation(NavigationTriangle t, DeterministicVector2 p)
        {
            var v = new DeterministicVector2(p);

            AllTriangle.Add(new NavigationTriangle(t.U, t.V, v));
            AllTriangle.Add(new NavigationTriangle(t.V, t.W, v));
            AllTriangle.Add(new NavigationTriangle(t.W, t.U, v));
            AllTriangle.Remove(t);
        }
コード例 #3
0
ファイル: NavigationMesh.cs プロジェクト: KDSBest/StreamRTS
        private void AddTriangleToPointMap(DeterministicVector2 p, NavigationTriangle tri)
        {
            if (!triangleMapping.ContainsKey(p))
            {
                triangleMapping.Add(p, new List <NavigationTriangle>());
            }

            triangleMapping[p].Add(tri);
        }
コード例 #4
0
ファイル: AStar.cs プロジェクト: KDSBest/StreamRTS
 private void AddTriangleToQueue(NavigationTriangle triangle, AStarNode parent, AStarContext context)
 {
     AddPointToQueue(triangle.U, parent, context);
     AddPointToQueue(triangle.V, parent, context);
     AddPointToQueue(triangle.W, parent, context);
     AddPointToQueue(triangle.S0.Midpoint(), parent, context);
     AddPointToQueue(triangle.S1.Midpoint(), parent, context);
     AddPointToQueue(triangle.S2.Midpoint(), parent, context);
 }
コード例 #5
0
ファイル: NavigationMesh.cs プロジェクト: KDSBest/StreamRTS
        void SplitTriangle(NavigationTriangle t)
        {
            if (t.S0.GetLengthSquared() <= 4 || t.S1.GetLengthSquared() <= 4 || t.S2.GetLengthSquared() <= 4)
            {
                return;
            }

            var c = t.GetMiddlePoint();

            if (t.IsPointInTriangle(c))
            {
                UpdateTriangulation(t, c);
            }
        }