Have not run this, almost certain things are broken.
The general idea is we mark entities with components and have a general
purpose "OnStateChange" trigger that marks all "active state" entities
as visible and all "inactive state" entities as invisible.
This should simplify state management -- unless of course there are
exceptions which there will be and will require having some sort of
"Sticky<T>" component that says "When this state transition occurs,
don't touch this one entity"
Two cameras only, one for 2d one for 3d -- none of this camera-per-state bs.
Still have a bug with switching while in the menu, but otherwise things
are working well.
The general idea is that we will have 2 cameras total, one for 2d and
one for 3d. Start with 2d and switch to 3d. Each camera will be marked
with it's state, and there will be a system which listens for some event
(or resource update) to change the camera.