summaryrefslogtreecommitdiff
path: root/scene/3d
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2015-05-02 17:39:29 -0300
committerJuan Linietsky <reduzio@gmail.com>2015-05-02 17:39:29 -0300
commit5f2aac4bbe14d1256feebd4bb12d8b61e5b55f3d (patch)
tree0c4f364a0445dabb8e0516499f9cb95bec630a9a /scene/3d
parent2296b0508e0e2d2ed51bc6cb892fa8a8abb55ff7 (diff)
same fixes to 3D navmesh..
Diffstat (limited to 'scene/3d')
-rw-r--r--scene/3d/navigation.cpp15
-rw-r--r--scene/3d/navigation.h2
2 files changed, 16 insertions, 1 deletions
diff --git a/scene/3d/navigation.cpp b/scene/3d/navigation.cpp
index 8866a65801..48820706dd 100644
--- a/scene/3d/navigation.cpp
+++ b/scene/3d/navigation.cpp
@@ -30,6 +30,7 @@ void Navigation::_navmesh_link(int p_id) {
p.edges.resize(plen);
Vector3 center;
+ float sum=0;
for(int j=0;j<plen;j++) {
@@ -44,8 +45,19 @@ void Navigation::_navmesh_link(int p_id) {
center+=ep;
e.point=_get_point(ep);
p.edges[j]=e;
+
+ if (j>=2) {
+ Vector3 epa = nm.xform.xform(r[indices[j-2]]);
+ Vector3 epb = nm.xform.xform(r[indices[j-1]]);
+
+ sum+=up.dot((epb-epa).cross(ep-epa));
+
+ }
+
}
+ p.clockwise=sum>0;
+
if (!valid) {
nm.polygons.pop_back();
ERR_CONTINUE(!valid);
@@ -399,7 +411,8 @@ Vector<Vector3> Navigation::get_simple_path(const Vector3& p_start, const Vector
left = _get_vertex(p->edges[prev].point);
right = _get_vertex(p->edges[prev_n].point);
- if (CLOCK_TANGENT(apex_point,left,(left+right)*0.5).dot(up) < 0){
+ //if (CLOCK_TANGENT(apex_point,left,(left+right)*0.5).dot(up) < 0){
+ if (p->clockwise) {
SWAP(left,right);
}
}
diff --git a/scene/3d/navigation.h b/scene/3d/navigation.h
index 54cec8f1f7..0f7f67571f 100644
--- a/scene/3d/navigation.h
+++ b/scene/3d/navigation.h
@@ -59,6 +59,8 @@ class Navigation : public Spatial {
float distance;
int prev_edge;
+ bool clockwise;
+
NavMesh *owner;
};