X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=events.cpp;h=9826f0ecbbc487e8a23ec1932f4b4b52e0d66a39;hb=83e7f2b82bb884ac49f6d632e39751e18e5fd0c0;hp=1c7227e7e457207a6417cb45f7b18b3158f98bec;hpb=5c0c17605f6e569195f17c9c8f308d94c2c47397;p=pkanalytics diff --git a/events.cpp b/events.cpp index 1c7227e..9826f0e 100644 --- a/events.cpp +++ b/events.cpp @@ -38,11 +38,12 @@ QVariant EventsModel::data(const QModelIndex &index, int role) const if (role != Qt::DisplayRole) { return QVariant(); } + const Event &e = events[index.row()]; if (index.column() == 0) { - return QString::fromUtf8(format_timestamp(events[index.row()].t)); + return QString::fromUtf8(format_timestamp(e.t)); } else if (index.column() == 1) { - optional player_id = events[index.row()].player_id; - optional formation_id = events[index.row()].formation_id; + optional player_id = e.player_id; + optional formation_id = e.formation_id; if (player_id) { auto p_it = players.find(*player_id); const Player &p = p_it->second; @@ -51,11 +52,36 @@ QVariant EventsModel::data(const QModelIndex &index, int role) const auto f_it = formations.find(*formation_id); const Formation &f = f_it->second; return QString::fromUtf8(f.name); + } else if (e.type == "formation_offense" || e.type == "formation_defense") { + return "(None/unknown)"; } else { 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"; + } + + return QString::fromUtf8(type); } return QVariant(); } @@ -166,6 +192,7 @@ unsigned EventsModel::insert_event(uint64_t t, optional player_id, optional Event e; e.t = t; e.player_id = player_id; + e.formation_id = formation_id; e.type = type; events.insert(events.begin() + pos, e); @@ -287,6 +314,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; @@ -361,6 +390,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); @@ -445,7 +488,7 @@ 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") { + 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") { backdate_point = e.t + 1; } if (e.type == "formation_offense" || e.type == "formation_defense") { @@ -456,9 +499,9 @@ void EventsModel::set_formation_at(uint64_t t, bool offense, unsigned formation) t = backdate_point; } if (offense) { - insert_event(t, nullopt, formation, "formation_offense"); + insert_event(t, nullopt, formation == 0 ? nullopt : optional{formation}, "formation_offense"); } else { - insert_event(t, nullopt, formation, "formation_defense"); + insert_event(t, nullopt, formation == 0 ? nullopt : optional{formation}, "formation_defense"); } }