For those who have the same problem, you can read here about the actual application that I came across and how I approached it. In short, I allowed all the stores to read randomly from each other (proposed solution No. 2).
Note that ES6 modules allow you to use circular dependencies to simplify implementation.
However, looking back, I am not sure if this was the right decision. If part of the business logic inherently contains a circular dependency, we should not try to apply a solution that does not actually support it just because someone says so. Flux is just one template, there are many other ways to structure your code. Therefore, perhaps I would recommend folding all the logic into one store and using one of the other ways to implement the store itself (for example, standard OOP methods).
I would also consider using redux with reselect instead of Flux. The problem with the original example is related to the StateStore, which depends on two different inputs. It can be changed either by the user explicitly pausing / resuming the game, or by the game situation reaching the game. The advantage of this approach is that you only need to check one store to get the current state of the game.
With reduction / reselection, you will have one pause / resume operation and another gear controlling the game situation. Then you will have a selector combining these two pieces of information into the final state of the game. Most of the business logic will be transferred from stores to action creators, i.e. In the action creator moveLeft() , you must use this selector to check the state of the game, and only then will you send the MOVE_LEFT action.
Please note that this is just an approximate idea, and I do not know if it is viable.
tobik source share