What is often used is an intermediate Intent System which abstracts the input and keeps track of the context and relevant gamestates.
The Intent system will stop transmitting inputs when the simulation is paused for example. It also handles the mapping between controller events and intents (move in direction, run, shoot, reload...).
This way your other conponents are not dependent on specific gamepads/inputs (BUTTON_A, BUTTON_B vs BUTTON_X, BUTTON_O...) but they all react to the same intents (IntentRun, IntentReload...).
Another advantage is that the intent system can be aware of available controllers being added/removed, as it can send intents to any subscriber even outside the simulation you can handle intents like AddPlayer(controllerID).
How much information about the game state you provide to the system either through events/message or directly is up to you. But the time invested in the Intent system is usually worth it.
You can manage Intent Contexts which will generate intents when they are attached to the system.
The context can be prioritized, i.e.:
- SimulationAvailableContext sends intents to the simulation while it is available (but not running) for example move the camera, zoom in zoom out, add/remove player...
- SimulationRunningContext sends intents to the simulation while it is not paused move player, send unit to position, shoot...
This way you can add and remove the contexts which are currently relevant.
And one thing about the whole intent systems is that it should run while the simulation is paused.
One way which is often used to play/pause the game simulation without breaking non simulation related updates is to use a different sets of times. i.e. GenericSystem::onTime(Long time, Long deltaTime, Long simTime, Long simDeltaTime).
With this approach your intent systemengine can simply block the increments on the games's simTime which in turn will block updates on the relevant animation & physics engines which use simTime and simDeltaTime while allowing continuous updates of your camera spring effect if it has to move even during pause, the animation of the loading effect on a virtual in-game billboard while data is being downloaded...