I have a game engine which only has one actual singleton, being an AssetManager manifesting as a static instance you return with it's Get() method. I've considered switching to a non-singleton asset managing system, so that I don't stumble into issues if I would benefit from having several asset managers. Things like assetmanagers, drawing managers, input managers, etc are things that are actually pretty widely used all over the program, so I end up passing a lot of things through consturctors. The thing though, is that the things you need to pass through the constructors gets pretty repetitive to write, so I have made classes to suit my needs. In-game objects are assumed to be instantiated in a level, so over time I developed special objects with methods, that are designed specifically to instantiate that kind of entity. However, this doesn't seem to cover all my main cases. For example, no one entity needs both a drawing manager (whatever object has the drawing functions), an input manager, a pointer to the level, AND an assetmanager. So is there a way to make this more pain-free? I can't use globals, but I really think that things like "game_ptr", "id++", and "asset_manager" should be passed in implicitly by some sort of instantiation class, where I assign some things by direct assignment instead of through the constructor. They just work way too closely with what I have designed them for. And there's more, there are layertags, and other stuff. I think this direction would make sense if it's predictable enough.
Any advice as for how to refine this?