* Added current fuel consumption display.
authorUrban Wallasch <urban.wallasch@freenet.de>
Sun, 28 Jul 2019 16:58:47 +0000 (18:58 +0200)
committerUrban Wallasch <urban.wallasch@freenet.de>
Sun, 28 Jul 2019 16:58:47 +0000 (18:58 +0200)
* Fixed display of invalid delivery times for external (WoT) contracts.
* Fixed(?) display of forward gear number, again.
* Replaced several instances of Math.round() with .toFixed() method.
* Removed spurious calls to Math.floor().

dash.html

index 73c339f576cc1858d157a00c6bdb9a7cd8f59310..38cd799671d7a43a519d0c6b71b151c61e254aa2 100644 (file)
--- a/dash.html
+++ b/dash.html
@@ -103,6 +103,7 @@ x-bar {
   <table style="width:100%;">
     <tr><td class="tiny">Fuel</td><td class="aright"><span class="small" id="fuel">-</span></td><td><span class="tiny"> l</span></td></tr>
     <tr><td class="tiny">Range</td><td class="aright"><span class="small" id="fuel_range">-</span></td><td><span class="tiny"> km</span></td></tr>
+    <tr><td class="tiny">Current</td><td class="aright" colspan="2"><span class="smaller" id="fuel_cons">-</span><span class="tiny"> l/100km</span></td></tr>
     <tr><td class="tiny">Average</td><td class="aright" colspan="2"><span class="smaller" id="fuel_avg">-</span><span class="tiny"> l/100km</span></td></tr>
     <tr><td class="tiny">Mileage</td><td class="aright" colspan="2"><span class="smaller" id="odometer">-</span><span class="tiny">km</span></td></tr>
   </table>
@@ -130,7 +131,7 @@ function dgear(x, f, m) {
   // We try to deduce the correct forward gear number to display from
   // the number of gears available. This likely just plain nonsense!
   if ( x > 0 )
-    return ( m ? '' : 'A' ) + ( f>12 ? ( x<3 ? 'C'+x : x-2 ) : x );
+    return ( m ? '' : 'A' ) + ( f==14 ? ( x<3 ? 'C'+x : x-2 ) : x );
   if ( x < 0 )
     return 'R' + -x;
   return 'N';
@@ -192,15 +193,20 @@ var job_ttd = document.getElementById("job_ttd");
 var errbar = document.getElementById("errbar");
 var pausebar = document.getElementById("pausebar");
 
+// Used to calculate current fuel consumption:
+var last_fuel = -1;
+var last_odometer = -1;
+
+// Update display, called periodically:
 function loadDoc() {
   xhttp.onreadystatechange = function() {
     if (this.readyState == 4 && this.status == 200) {
       var tele = JSON.parse(this.responseText);
 
-      speed.innerHTML = Math.round( Math.abs(tele.speed * 3.6) );
-      if ( tele.nav_slimit > 0 && Math.floor(tele.speed) > tele.nav_slimit * 1.075 )
+      speed.innerHTML = Math.abs(tele.speed * 3.6).toFixed(0);
+      if ( tele.nav_slimit > 0 && tele.speed > tele.nav_slimit * 1.075 )
         warn( speed, 2 );
-      else if ( tele.nav_slimit > 0 && Math.floor(tele.speed) > tele.nav_slimit * 1.005 )
+      else if ( tele.nav_slimit > 0 && tele.speed > tele.nav_slimit * 1.005 )
         warn( speed, 1 );
       else
         warn( speed, 0 );
@@ -213,27 +219,43 @@ function loadDoc() {
       else
         gear.classList.remove("hilite");
 
-      rpm.innerHTML = Math.round(tele.rpm);
-      odometer.innerHTML = Math.round(tele.odometer);
+      rpm.innerHTML = tele.rpm.toFixed(0);
+      odometer.innerHTML = tele.odometer.toFixed(0);
 
-      fuel.innerHTML = Math.round(tele.fuel);
+      fuel.innerHTML = tele.fuel.toFixed(0);
       warn( fuel, tele.fuel_warn ? 1 : 0 );
 
-      fuel_range.innerHTML = Math.round(tele.fuel_range);
+      fuel_range.innerHTML = tele.fuel_range.toFixed(0);
+
+      if ( last_fuel != tele.fuel && last_odometer != tele.odometer ) {
+        var fcons;
+        if ( last_fuel > 0 && last_odometer > 0 )
+          fcons = (last_fuel - tele.fuel) * 100 / (tele.odometer - last_odometer);
+        else
+          fcons = -1;
+        fuel_cons.innerHTML = fcons < 0 ? '-' : fcons.toFixed(1);
+        last_fuel = tele.fuel;
+        last_odometer = tele.odometer;
+      }
 
-      fuel_avg.innerHTML = Math.round(tele.fuel_avg * 1000) / 10;
+      fuel_avg.innerHTML = (tele.fuel_avg * 100).toFixed(1);
 
-      nav_dist.innerHTML = Math.round(tele.nav_dist / 1000);
+      nav_dist.innerHTML = (tele.nav_dist / 1000).toFixed(0);
 
       nav_eta.innerHTML = s2hm(tele.nav_eta);
 
       next_rest.innerHTML = m2hm(tele.next_rest);
       warn( next_rest, tele.next_rest < 1 ? 2 : tele.next_rest < 97 ? 1 : 0 );
 
-      job_ttd.innerHTML = tele.job_isvalid ? m2hm(tele.job_deltime - tele.game_time) : "--:--";
+      job_ttd.innerHTML =
+        tele.job_isvalid
+        ? tele.job_deltime != 4294967295
+          ? m2hm(tele.job_deltime - tele.game_time)
+          : '<span style="font-size:50%;color:#088">[external]</span>'
+        : '<span style="font-size:50%;color:#088">[none]</span>';
 
       if ( tele.nav_slimit > 0 ) {
-        nav_slimit.innerHTML = Math.round(tele.nav_slimit * 3.6);
+        nav_slimit.innerHTML = (tele.nav_slimit * 3.6).toFixed(0);
         nav_slimitsign.style.visibility = "visible";
       }
       else