Volkers patch for shifting voice hints away from ambiguity
This commit is contained in:
parent
8369e8d3f3
commit
7cc6314397
1 changed files with 60 additions and 10 deletions
|
@ -146,6 +146,32 @@ public class VoiceHint
|
||||||
|
|
||||||
public void calcCommand()
|
public void calcCommand()
|
||||||
{
|
{
|
||||||
|
float lowerBadWayAngle = -181;
|
||||||
|
float higherBadWayAngle = 181;
|
||||||
|
for ( MessageData badWay : badWays )
|
||||||
|
{
|
||||||
|
if ( badWay.isBadOneway() )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ( lowerBadWayAngle < badWay.turnangle && badWay.turnangle < goodWay.turnangle )
|
||||||
|
{
|
||||||
|
lowerBadWayAngle = badWay.turnangle;
|
||||||
|
}
|
||||||
|
if ( higherBadWayAngle > badWay.turnangle && badWay.turnangle > goodWay.turnangle )
|
||||||
|
{
|
||||||
|
higherBadWayAngle = badWay.turnangle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float cmdAngle= angle;
|
||||||
|
|
||||||
|
// fall back to local angle if otherwise inconsistent
|
||||||
|
if ( lowerBadWayAngle > angle || higherBadWayAngle < angle )
|
||||||
|
{
|
||||||
|
cmdAngle = goodWay.turnangle;
|
||||||
|
}
|
||||||
|
|
||||||
if (roundaboutExit > 0)
|
if (roundaboutExit > 0)
|
||||||
{
|
{
|
||||||
cmd = RNDB;
|
cmd = RNDB;
|
||||||
|
@ -154,44 +180,68 @@ public class VoiceHint
|
||||||
{
|
{
|
||||||
cmd = RNLB;
|
cmd = RNLB;
|
||||||
}
|
}
|
||||||
else if ( angle < -159. )
|
else if ( cmdAngle < -159. )
|
||||||
{
|
{
|
||||||
cmd = TU;
|
cmd = TU;
|
||||||
}
|
}
|
||||||
else if ( angle < -113. )
|
else if ( cmdAngle < -135. )
|
||||||
{
|
{
|
||||||
cmd = TSHL;
|
cmd = TSHL;
|
||||||
}
|
}
|
||||||
else if ( angle < -67. )
|
else if ( cmdAngle < -45. )
|
||||||
{
|
{
|
||||||
cmd = TL;
|
// a TL can be pushed in either direction by a close-by alternative
|
||||||
|
if ( higherBadWayAngle > -90. && higherBadWayAngle < -15. && lowerBadWayAngle < -180. )
|
||||||
|
{
|
||||||
|
cmd = TSHL;
|
||||||
|
}
|
||||||
|
else if ( lowerBadWayAngle > -180. && lowerBadWayAngle < -90. && higherBadWayAngle > 0. )
|
||||||
|
{
|
||||||
|
cmd = TSLL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cmd = TL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ( angle < -21. )
|
else if ( cmdAngle < -21. )
|
||||||
{
|
{
|
||||||
if ( cmd != KR ) // don't overwrite KR with TSLL
|
if ( cmd != KR ) // don't overwrite KR with TSLL
|
||||||
{
|
{
|
||||||
cmd = TSLL;
|
cmd = TSLL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( angle < 21. )
|
else if ( cmdAngle < 21. )
|
||||||
{
|
{
|
||||||
if ( cmd != KR && cmd != KL ) // don't overwrite KL/KR hints!
|
if ( cmd != KR && cmd != KL ) // don't overwrite KL/KR hints!
|
||||||
{
|
{
|
||||||
cmd = C;
|
cmd = C;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( angle < 67. )
|
else if ( cmdAngle < 45. )
|
||||||
{
|
{
|
||||||
if ( cmd != KL ) // don't overwrite KL with TSLR
|
if ( cmd != KL ) // don't overwrite KL with TSLR
|
||||||
{
|
{
|
||||||
cmd = TSLR;
|
cmd = TSLR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( angle < 113. )
|
else if ( cmdAngle < 135. )
|
||||||
{
|
{
|
||||||
cmd = TR;
|
// a TR can be pushed in either direction by a close-by alternative
|
||||||
|
if ( higherBadWayAngle > 90. && higherBadWayAngle < 180. && lowerBadWayAngle < 0. )
|
||||||
|
{
|
||||||
|
cmd = TSLR;
|
||||||
|
}
|
||||||
|
else if ( lowerBadWayAngle > 15. && lowerBadWayAngle < 90. && higherBadWayAngle > 180. )
|
||||||
|
{
|
||||||
|
cmd = TSHR;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cmd = TR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ( angle < 159. )
|
else if ( cmdAngle < 159. )
|
||||||
{
|
{
|
||||||
cmd = TSHR;
|
cmd = TSHR;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue