A system to record entity states and replay them.
Entities with a
Recorded component would have their information registered each specific amount of time.
(ie: each frame, 30 times per second, each 5 frames).
The components that would get saved (using saveload) would be specified using a generic on the RecordSystem. Not all components on the entity should be saved.
The ReplaySystem would use the recorded data to set the components to what they were at the specified time.
If the time specified falls between two saved frames, the user can choose to either interpolate the data (if the component supports it) or to use the nearest data.
The ReplaySystem would use a resource called ReplayTracker. The tracker would contain the time at which we are currently reading.
That tracker can either be updated from user systems (clicking on a progress bar to jump through time), or by a system that covers most use cases, called ReplayProgressSystem.
The ReplayProgressSystem would simply read from a resource ReplaySpeed and would move the ReplayTracker time by the time.delta_seconds() * speed.