Looks good higgipoker!
It's been a while since my last update, but I'm still slowly making progress. I've implemented a lot of miscellaneous things, but I'll just call out a few of the larger changes.
First of all, I've implemented the ability to choose which plays you want your team to run. The gifs I posted in the past also showed me modifying plays, but that was in my "play designer" tool. Now you can choose plays during the actual football games. I'm exciting about this because it's the first step in turning this project from just a simulation you watch into an actual game where your input influences what happens

. You still can't control the individual players, but you can be the coach and call out the plays to be run.

Another big feature that I implemented is a "career mode". This is where you pick out a team to control game-to-game and season-to-season. A schedule gets generated at the beginning of each season that each team follows as you progress through the season. This also means that there are a lot of football games being played between AI controlled teams that the user isn't involved with. A big challenge I faced for the career mode was re-architecting my code to allow running these AI games in a background thread. The gif below shows a dialog running in the main thread providing score and other stat updates about a game running in a background thread.
On my computer a background simulation like this takes a couple of minutes, which isn't too bad considering a normally played game can last around an hour. However, it's unfortunately still unacceptably slow. In real life there are over 100 football teams, which means I would need to simulate over 50 games at a time. I need all of these games to be simulated in seconds or minutes, not hours. Because of this I had to implement a second method of simulation, one that determines the outcomes of games based on statistical analysis instead of fully simulating all of the players and ball movements. With this method, I'm able to run all of the AI games in the background at a much faster speed (though there is still room for optimizations). The gif below shows multiple games involving different teams being simulated back-to-back.
I am also now keeping track of various statistics during games, which get saved to a database and can be viewed in the menus between games. I've added the ability to sort data in my table widgets by columns for easier browsing.
Lastly, I've implemented the ability to recruit new players to your team. For those that follow American Football at the college level, you know that this is a big part of a coach's responsibilities. You can research what kind of players your team needs and then search for available recruits that match your criteria. Once you find the recruits you want, you can start trying to convince them to join your team while competing against other teams trying to do the same thing. I won't post a gif for this one because it's just more menu interactions like my previous gif and isn't too visually exciting