Let's start by introducing the structures that participate in this example:
- PlayerStatus is an enumerator for maintaining a global state on the player's instance. The variants are:
- Loading, which is the initial state
- Default, which is applied after we are done loading the player's stats
- Jumping is a special state that won't allow us to add points to the player's scoreboard due to the rules of the game
- Player holds our player's main attributes, along with a special attribute called ticks that stores the amount of cycles that we want to run through with poll() before assigning the player's status from Loading to Default.
Now, onto our implementations:
- Jumping down to the fn set_status(&mut self, status: PlayerStatus) -> FutureResult<&mut Self, Never> function on our Player structure, we will notice a return value of FutureResult, which tells futures that this function will immediately return a computed value...