I'm writing a simple physics based game in C++ using SFML. I want to trigger a scene change when my playerCharacter collides with a door. Since C++ does not have any native Event Sender/Listener system, I'm not sure how I should organize my architecture such that entities can trigger events within the world, or within other entities they are not colliding with directly. These are the only ways I can think of;
Entities all have a reference back to the scene/world. This is what I'm doing currently but I keep hearing it's horrible design.
Have the scene/world call methods on the entities to check if they are making changes. This seems like a terrible solution, I would have to check for any possible change.
I integrate a premade C++ Event system. I'm happy to do this, I just want to first make sure there isn't a more simple approach I'm missing.
Interfaces between classes. I keep hearing this a solution, but I don't know how ti really solves anything. If my Entity and Scene objects both have references to the interface, and have to base functionality around that- isn't that just as bad?
Messaging system. This actually seems like a good approach, but I'm not sure if it's intended to be a comprehensive solution. Here it is in detail: How to implement the interaction between engine parts?
Please let me know if you have any solutions for this specific issue, or perhaps some sort of class diagram that circumvents this issue completely. I've been looking a while and haven't found a solution for this issue. How do the major engines do it?