Stack raced times.
authorCMDR furrycat <elite@furrycat.net>
Mon, 8 Feb 2016 16:46:43 +0000 (11:46 -0500)
committerCMDR furrycat <elite@furrycat.net>
Mon, 8 Feb 2016 16:58:12 +0000 (11:58 -0500)
lib/race.php
race.js

index 33a7bc3..71b04f8 100644 (file)
     return $ret;
   }
 
+  function by_raced($a, $b) {
+    $A = 0; foreach ($a as $time) $A += $time;
+    $B = 0; foreach ($b as $time) $B += $time;
+    if ($A == $B) return 0;
+    return ($A < $B) ? 1 : -1;
+  }
+
   function module_race($action, $args) {
     if ($_POST['add_race']) {
       if (add_race($_POST["name"], $_POST["allotted_time"])) unset($_POST);
         $ship = $entry->getShip();
         $cmdr_name = $ship->getCompetitor()->getCmdrName();
         $hull_name = $ship->getHull()->getName();
-        if (! array_key_exists($cmdr_name, $time_raced)) $time_raced[$cmdr_name] = 0;
-        $time_raced[$cmdr_name] += $entry->getRacedTime();
+        if (! array_key_exists($cmdr_name, $time_raced)) $time_raced[$cmdr_name] = array();
+        $time_raced[$cmdr_name][] = $entry->getRacedTime();
         $lap_count = $entry->getCompleteLaps();
         $lap_count = sprintf("%d lap%s", $lap_count, ($lap_count == 1) ? "" : "s");
         $lap_distance = format_distance($entry->getLapDistance()) . "Ly";
         )
       );
       $raced_times = array(
-        "raced_times" => array(
-          "x" => array(),
-          "y" => array(),
-          "name" => "Time raced",
-          "type" => "bar"
-        )
+        "raced_times" => array()
       );
       $dbh = Propel::getConnection();
       /* Average station to station speed. */
         $laps["fastest_laps"]["x"][] = "Lap " . $row["lap_number"];
         $laps["fastest_laps"]["y"][] = (int) $row["n"];
       }
-      arsort($time_raced);
-      foreach ($time_raced as $cmdr_name => $time) {
-        $raced_times["raced_times"]["x"][] = $cmdr_name;
-        $raced_times["raced_times"]["y"][] = "2000-01-01 " . format_time($time);
+      uasort($time_raced, "by_raced");
+      $raced_times_bars = array();
+      foreach ($time_raced as $cmdr_name => $times) {
+        for ($n = 0; $n < count($times); $n++) {
+          $time = (int) $times[$n];
+          if (count($raced_times_bars) <= $n) $raced_times_bars[] = array("x" => array(), "y" => array(), "name" => "Entry " . ($n + 1), "text" => array(), "type" => "bar");
+          $raced_times_bars[$n]["x"][] = $cmdr_name;
+          $raced_times_bars[$n]["y"][] = $time;
+          $raced_times_bars[$n]["text"][] = format_time($time);
+        }
       }
+      $raced_times = $raced_times_bars;
       /* Time raced. */
       echo "<script type=\"text/javascript\"><!--\n";
       echo "var pies = " . json_encode(array_values($plots)) . ";\n";
diff --git a/race.js b/race.js
index 832c5dc..a7e9ee2 100644 (file)
--- a/race.js
+++ b/race.js
@@ -170,8 +170,9 @@ function loaded() {
   });
   canvas = document.getElementById('plot_raced_times');
   if (canvas && raced_times) Plotly.plot(canvas, raced_times, {
+    barmode: 'stack',
     title: 'Time raced',
-    yaxis: { title: 'Time', tickformat: '%H:%M:%S' }
+    yaxis: { title: 'Time (s)' }
   });
 }