X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=events.cpp;h=88b0d4a7d0273dc7a9a727e41b49409afd981d54;hb=1499d6f5c9c563843c5bba582d44a72c7cae27b2;hp=92ca3271188154e13e914642836052cf7592da43;hpb=756289c7b37c3e77d79b8a26096e678dccc943fa;p=pkanalytics diff --git a/events.cpp b/events.cpp index 92ca327..88b0d4a 100644 --- a/events.cpp +++ b/events.cpp @@ -58,7 +58,32 @@ QVariant EventsModel::data(const QModelIndex &index, int role) const return QVariant(); } } else if (index.column() == 2) { - return QString::fromUtf8(events[index.row()].type); + string type = e.type; + type[0] = toupper(e.type[0]); + for (char &ch : type) { + if (ch == '_') { + ch = ' '; + } + } + + // Various fixups. + if (type == "Pull oob") { + type = "Pull OOB"; + } else if (type == "Formation defense") { + type = "Defensive formation"; + } else if (type == "Formation offense") { + type = "Offensive formation"; + } else if (type == "Set offense") { + type = "On offense"; + } else if (type == "Set defense") { + type = "On defense"; + } else if (type == "Catch") { + type = "Catch/take"; + } else if (type == "Was d") { + type = "Was d-ed"; + } + + return QString::fromUtf8(type); } return QVariant(); } @@ -272,6 +297,34 @@ void EventsModel::set_event_type(unsigned pos, const string &type) } } +void EventsModel::set_event_formation(unsigned pos, int formation_id) +{ + events[pos].formation_id = formation_id; + emit dataChanged(createIndex(pos, 0), createIndex(pos, 2)); + + sqlite3_stmt *stmt; + int ret = sqlite3_prepare_v2(db, "UPDATE event SET formation=? WHERE event=?", -1, &stmt, 0); + if (ret != SQLITE_OK) { + fprintf(stderr, "INSERT prepare: %s\n", sqlite3_errmsg(db)); + abort(); + } + + sqlite3_bind_int64(stmt, 1, formation_id); + sqlite3_bind_int64(stmt, 2, events[pos].event_id); + + ret = sqlite3_step(stmt); + if (ret == SQLITE_ROW) { + fprintf(stderr, "UPDATE step: %s\n", sqlite3_errmsg(db)); + abort(); + } + + ret = sqlite3_finalize(stmt); + if (ret != SQLITE_OK) { + fprintf(stderr, "UPDATE finalize: %s\n", sqlite3_errmsg(db)); + abort(); + } +} + unsigned EventsModel::get_last_event_pos(uint64_t t) const { // upper_bound() gives first where e.t > t, @@ -291,6 +344,8 @@ EventsModel::Status EventsModel::get_status_at(uint64_t t) s.our_score = 0; s.their_score = 0; s.attack_state = Status::NOT_STARTED; + s.offensive_formation = 0; + s.defensive_formation = 0; s.stoppage = false; s.pull_state = Status::SHOULD_PULL; uint64_t last_gained_possession = 0; @@ -350,7 +405,7 @@ EventsModel::Status EventsModel::get_status_at(uint64_t t) num_touches = 0; time_spent_in_stoppage = 0; } - if (e.type == "drop" || e.type == "throwaway") { + if (e.type == "drop" || e.type == "was_d" || e.type == "throwaway") { set_defense(); num_touches = 0; } @@ -365,6 +420,20 @@ EventsModel::Status EventsModel::get_status_at(uint64_t t) last_stoppage = 0; } } + if (e.type == "formation_offense") { + if (e.formation_id) { + s.offensive_formation = *e.formation_id; + } else { + s.offensive_formation = 0; + } + } + if (e.type == "formation_defense") { + if (e.formation_id) { + s.defensive_formation = *e.formation_id; + } else { + s.defensive_formation = 0; + } + } } if (s.stoppage && last_stoppage != 0) { time_spent_in_stoppage += (t - last_stoppage); @@ -440,7 +509,7 @@ void EventsModel::set_team_at(uint64_t t, const set &new_team) void EventsModel::set_formation_at(uint64_t t, bool offense, unsigned formation) { - // If there's another goal/stoppage no more than 20 seconds ago, + // If there's another goal/stoppage/turnover no more than 20 seconds ago, // we assume that the formation started at that point (it just took // the operator a bit of time to see it). If not, we assume we // changed in the middle of a point. @@ -449,7 +518,14 @@ void EventsModel::set_formation_at(uint64_t t, bool offense, unsigned formation) if (e.t > t) { break; } - if (e.type == "goal" || e.type == "their_goal" || e.type == "stoppage" || e.type == "reset" || e.type == "set_offense" || e.type == "set_defense" || e.type == "in" || e.type == "out" || e.type == "pull" || e.type == "their_pull") { + if (e.type == "goal" || e.type == "their_goal" || + e.type == "in" || e.type == "out" || + e.type == "stoppage" || e.type == "reset" || + e.type == "set_defense" || e.type == "set_offense" || + e.type == "throwaway" || e.type == "their_throwaway" || + e.type == "drop" || e.type == "was_d" || e.type == "defense" || e.type == "interception" || + e.type == "pull" || e.type == "pull_landed" || e.type == "pull_oob" || e.type == "their_pull" || + e.type == "formation_offense" || e.type == "formation_defense") { backdate_point = e.t + 1; } if (e.type == "formation_offense" || e.type == "formation_defense") {