From 61cf79d1720ecd3066e0883cb88f301d541a0c44 Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Mon, 19 Jun 2023 19:46:09 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E9=80=9A=E8=BF=87=20A*=20?= =?UTF-8?q?=E6=89=BE=E5=88=B0=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/geometry/navmesh/navmesh.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/utils/geometry/navmesh/navmesh.go b/utils/geometry/navmesh/navmesh.go index 07fbbb6..53ea989 100644 --- a/utils/geometry/navmesh/navmesh.go +++ b/utils/geometry/navmesh/navmesh.go @@ -1,6 +1,7 @@ package navmesh import ( + "github.com/kercylan98/minotaur/utils/astar" "github.com/kercylan98/minotaur/utils/generic" "github.com/kercylan98/minotaur/utils/geometry" "github.com/kercylan98/minotaur/utils/maths" @@ -23,6 +24,10 @@ type NavMesh[V generic.SignedNumber] struct { meshShrinkAmount V } +func (slf *NavMesh[V]) Neighbours(node *shape[V]) []*shape[V] { + return node.links +} + // Find 在网格中找到与给定点最近的点。如果该点已经在网格中,这将为您提供该点。如果点在网格之外,这将尝试将此点投影到网格中(直到给定的 maxDistance) func (slf *NavMesh[V]) Find(point geometry.Point[V], maxDistance V) (distance V, findPoint geometry.Point[V], findShape geometry.Shape[V]) { var minDistance = maxDistance @@ -113,10 +118,17 @@ func (slf *NavMesh[V]) FindPath(start, end geometry.Point[V]) (result []geometry return append(result, start, end) } -} + path := astar.Find[*shape[V], V](slf, startShape, endShape, func(a, b *shape[V]) V { + return geometry.CalcDistance(geometry.DoublePointToCoordinate(a.centroid, b.centroid)) + }, func(a, b *shape[V]) V { + return geometry.CalcDistance(geometry.DoublePointToCoordinate(a.centroid, b.centroid)) + }) -func (slf *NavMesh[V]) aStar() { + if len(path) == 0 { + return + } + path = append([]*shape[V]{startShape}, path...) } func (slf *NavMesh[V]) generateLink() {