]> git.sesse.net Git - pkanalytics/blobdiff - events.cpp
Update the status bar from the events.
[pkanalytics] / events.cpp
index 4ff009093eb006a248f80d8ed7404ede963fc539..5752d82ca4fb5c8d7cfed40ec705e1d17f698258 100644 (file)
@@ -221,3 +221,42 @@ void EventsModel::set_event_type(unsigned pos, const string &type)
                abort();
        }
 }
+
+EventsModel::Status EventsModel::get_status_at(uint64_t t)
+{
+       Status s;
+       s.our_score = 0;
+       s.their_score = 0;
+       s.offense = true;
+       uint64_t last_gained_possession = 0;
+       unsigned num_touches = 0;
+       for (const Event &e : events) {
+               if (e.t > t) {
+                       break;
+               }
+               if (e.type == "goal") {
+                       ++s.our_score;
+                       s.offense = false;
+                       num_touches = 0;
+               }
+               if (e.type == "their_goal") {
+                       ++s.their_score;
+                       s.offense = true;
+                       num_touches = 0;
+               }
+               if (e.type == "catch") {
+                       if (num_touches == 0) {  // Pick up.
+                               last_gained_possession = e.t;
+                       }
+                       ++num_touches;
+               }
+               if (e.type == "interception") {
+                       num_touches = 1;
+                       s.offense = true;
+                       last_gained_possession = e.t;
+               }
+       }
+       s.num_passes = (num_touches == 0) ? 0 : num_touches - 1;
+       s.possession_sec = (s.offense && last_gained_possession != 0) ? (t - last_gained_possession) / 1000 : 0;
+       return s;
+}