]> git.sesse.net Git - pkanalytics/blobdiff - events.cpp
Count time spent in stoppage
[pkanalytics] / events.cpp
index 2ed6649f8f77313318abac2862ebe60cca882f9f..a87d83c8d60c7c7efb3a66c05b0fa89f48ddd969 100644 (file)
@@ -233,6 +233,8 @@ EventsModel::Status EventsModel::get_status_at(uint64_t t)
        s.offense = true;
        s.stoppage = false;
        uint64_t last_gained_possession = 0;
+       uint64_t last_stoppage = 0;
+       uint64_t time_spent_in_stoppage = 0;
        unsigned num_touches = 0;
        for (const Event &e : events) {
                if (e.t > t) {
@@ -251,6 +253,7 @@ EventsModel::Status EventsModel::get_status_at(uint64_t t)
                if (e.type == "catch") {
                        if (num_touches == 0) {  // Pick up.
                                last_gained_possession = e.t;
+                               time_spent_in_stoppage = 0;
                        }
                        ++num_touches;
                }
@@ -258,10 +261,12 @@ EventsModel::Status EventsModel::get_status_at(uint64_t t)
                        num_touches = 1;
                        s.offense = true;
                        last_gained_possession = e.t;
+                       time_spent_in_stoppage = 0;
                }
                if (e.type == "defense" || e.type == "their_throwaway") {
                        s.offense = true;
                        num_touches = 0;
+                       time_spent_in_stoppage = 0;
                }
                if (e.type == "drop" || e.type == "throwaway") {
                        s.offense = false;
@@ -269,13 +274,23 @@ EventsModel::Status EventsModel::get_status_at(uint64_t t)
                }
                if (e.type == "stoppage") {
                        s.stoppage = true;
+                       last_stoppage = e.t;
                }
                if (e.type == "restart") {
                        s.stoppage = false;
+                       if (last_stoppage != 0) {
+                               time_spent_in_stoppage += (e.t - last_stoppage);
+                               last_stoppage = 0;
+                       }
                }
        }
+       if (s.stoppage && last_stoppage != 0) {
+               time_spent_in_stoppage += (t - last_stoppage);
+       }
+
        s.num_passes = (num_touches == 0) ? 0 : num_touches - 1;
-       s.possession_sec = (s.offense && last_gained_possession != 0 && num_touches != 0) ? (t - last_gained_possession) / 1000 : 0;
+       s.possession_sec = (s.offense && last_gained_possession != 0 && num_touches != 0) ? (t - last_gained_possession - time_spent_in_stoppage) / 1000 : 0;
+       s.stoppage_sec = (s.offense && last_gained_possession != 0 && num_touches != 0) ? time_spent_in_stoppage / 1000 : 0;
        return s;
 }