(svn r9803) -Feature(tte): support for "curvature info", Action 2 for train, variable 45 (mart3p).

This commit is contained in:
rubidium 2007-05-06 20:05:10 +00:00
parent feadd86819
commit b46e37774d
1 changed files with 19 additions and 0 deletions

View File

@ -589,6 +589,25 @@ static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, by
return (altitude << 8) | airporttype;
}
case 0x45: { // Curvature info
/* Format: xxxTxBxF
* F - previous wagon to current wagon, 0 if vehicle is first
* B - current wagon to next wagon, 0 if wagon is last
* T - previous wagon to next wagon, 0 in an S-bend
*/
if (v->type != VEH_TRAIN) return 0;
const Vehicle *u_p = GetPrevVehicleInChain(v);
const Vehicle *u_n = v->next;
DirDiff f = (u_p == NULL) ? DIRDIFF_SAME : DirDifference(u_p->direction, v->direction);
DirDiff b = (u_n == NULL) ? DIRDIFF_SAME : DirDifference(v->direction, u_n->direction);
DirDiff t = ChangeDirDiff(f, b);
return ((t > DIRDIFF_REVERSE ? t | 8 : t) << 16) |
((b > DIRDIFF_REVERSE ? b | 8 : b) << 8) |
( f > DIRDIFF_REVERSE ? f | 8 : f);
}
case 0x46: // Motion counter
return v->motion_counter;