X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=events.h;h=caf832ac26ca0180364d8e899dba453beb909c00;hb=415442b56355392b207551b2cc84e663d8d7f914;hp=66398d1d567eb1d941f1db83c4a1c98ad298a188;hpb=8761ac364a5361a75a03fdcc0bb780764aa99e86;p=pkanalytics diff --git a/events.h b/events.h index 66398d1..caf832a 100644 --- a/events.h +++ b/events.h @@ -7,15 +7,15 @@ #include #include #include +#include class EventsModel : public QAbstractTableModel { public: - EventsModel(sqlite3 *db) : db(db) {} + EventsModel(sqlite3 *db, int match_id); int rowCount(const QModelIndex &parent) const override { - refresh_if_needed(); return events.size(); } int columnCount(const QModelIndex &column) const override @@ -25,7 +25,29 @@ public: QVariant headerData(int section, Qt::Orientation orientation, int role) const override; QVariant data(const QModelIndex &index, int role) const override; - int insert_event(uint64_t t, int player_id); + unsigned insert_event(uint64_t t, std::optional player_id, const std::string &type = "unknown"); // Returns the row. + void delete_event(unsigned row); + void set_event_type(unsigned row, const std::string &type); + uint64_t get_time(unsigned row) { return events[row].t; } + unsigned get_last_event_pos(uint64_t t) const; // Last event that happened at or before t. + QModelIndex get_last_event_qt(uint64_t t) const { + return createIndex(get_last_event_pos(t), 0); + } + std::optional get_player_id(unsigned row) { return events[row].player_id; } + + struct Status { + unsigned our_score, their_score; + enum { NOT_STARTED, OFFENSE, DEFENSE } attack_state; + bool stoppage; + enum { NOT_PULLING, SHOULD_PULL, PULL_IN_AIR } pull_state; + unsigned num_passes; + unsigned possession_sec; + unsigned stoppage_sec; + }; + Status get_status_at(uint64_t t); + std::set get_team_at(uint64_t t); + void set_team_at(uint64_t, const std::set &new_team); + std::vector sort_team(const std::set &team) const; // Ordered first by gender, then by number. private: struct Player { @@ -33,19 +55,21 @@ private: std::string number; std::string name; }; - mutable std::map players; + std::map players; + std::map player_ordering; // From id to position. struct Event { + int event_id; uint64_t t; std::optional player_id; std::string type; }; - mutable std::vector events; - mutable bool stale = true; + std::vector events; sqlite3 *db; + int match_id; - void refresh_if_needed() const; + void load_data(); }; #endif // !defined(_EVENTS_H)