Main changes:
Refactors the scenario representation to make it simulation agnostic. Now the `Scenario` object and its descendants (`Entity`, `Trajectory` etc) contain no simulation data or parameters. E.g. the current simulation time, the positions and velocities of entities, agents and historical poses. All simulation data is now stored in the `State` object. For example poses and velocities are accessed via:
python
ego = state.scenario.entities[0]
pose = state.poses[ego]
Each time a simulation is started a new `State` object is instantiated which will then contain all data from the simulation including historical times and poses. A simulation can be converted to a scenario via `state.to_scenario()`.
Minor changes
* `Agent`s do not have access to `State` inside `_step`. Now all information required by the agent must be passed into the `Observation` via the `Sensor`.
* `Observation` now is a dataclass.
* Adds `copy` and `deepcopy` methods of `Scenario`. Shallow copy will not deep copy the road network or catalog entries.
* `StateCallback`s now store information themselves rather than modifying the `State` object.
* Updates `scenario_gym` to use v2 of `shapely`. This allows faster processing for rendering and for collision detection and fixes bugs due to geometries not being hashable.
**Full Changelog**: https://github.com/driskai/scenario_gym/compare/v0.2.2...v0.3.0