In the BaseAgent class, before_simulation_step calls it's controller object's before_simulation_step. When that controller is of type DictController or its subclass CombinedController the controller inherits baseController's before_simulation_step, which is an empty function. When the agent calls a DictController's before_simulation_step it always calls the empty function. If anyone writes a custom controller requiring before_simulation_step and their robot requires a DictController or it's children, then they will be unable to call the custom controller's before_simulation_step. In this pull I added a function to DictController to fix this issue.
In the BaseAgent class, before_simulation_step calls it's controller object's before_simulation_step. When that controller is of type DictController or its subclass CombinedController the controller inherits baseController's before_simulation_step, which is an empty function. When the agent calls a DictController's before_simulation_step it always calls the empty function. If anyone writes a custom controller requiring before_simulation_step and their robot requires a DictController or it's children, then they will be unable to call the custom controller's before_simulation_step. In this pull I added a function to DictController to fix this issue.