Volkers patch for shifting voice hints away from ambiguity

This commit is contained in:
Arndt 2016-05-16 18:00:41 +02:00
parent 8369e8d3f3
commit 7cc6314397

View file

@ -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. )
{
// 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; 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. )
{
// 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; cmd = TR;
} }
else if ( angle < 159. ) }
else if ( cmdAngle < 159. )
{ {
cmd = TSHR; cmd = TSHR;
} }