(svn r9803) -Feature(tte): support for "curvature info", Action 2 for train, variable 45 (mart3p).
authorrubidium
Sun, 06 May 2007 20:05:10 +0000
changeset 7085 bb5d226fc24a
parent 7084 17e14ffc74d3
child 7086 466f738d31c7
(svn r9803) -Feature(tte): support for "curvature info", Action 2 for train, variable 45 (mart3p).
src/newgrf_engine.cpp
--- a/src/newgrf_engine.cpp	Sun May 06 20:00:36 2007 +0000
+++ b/src/newgrf_engine.cpp	Sun May 06 20:05:10 2007 +0000
@@ -589,6 +589,25 @@
 				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;