s.defensive_formation = 0;
s.stoppage = false;
s.pull_state = Status::SHOULD_PULL;
+ s.last_catching_player = -1;
uint64_t last_gained_possession = 0;
uint64_t last_stoppage = 0;
uint64_t time_spent_in_stoppage = 0;
unsigned num_touches = 0;
- auto set_offense = [&s] { s.attack_state = Status::OFFENSE; };
- auto set_defense = [&s] { s.attack_state = Status::DEFENSE; };
+ auto set_offense = [&s] { s.attack_state = Status::OFFENSE; s.last_catching_player = -1; };
+ auto set_defense = [&s] { s.attack_state = Status::DEFENSE; s.last_catching_player = -1; };
for (const Event &e : events) {
if (e.t > t) {
// No effect on pull status.
} else if (e.type == EventType::PULL) {
s.pull_state = Status::PULL_IN_AIR;
+ s.last_catching_player = -1; // Just to be sure.
} else {
s.pull_state = Status::NOT_PULLING; // Includes pull_landed and pull_oob.
}
time_spent_in_stoppage = 0;
}
++num_touches;
+ s.last_catching_player = *e.player_id;
}
if (e.type == EventType::INTERCEPTION) {
num_touches = 1;
set_offense();
+ s.last_catching_player = *e.player_id;
last_gained_possession = e.t;
time_spent_in_stoppage = 0;
}