No, you can’t skip declaring the world in the engine, this is merely giving the player entity a permanent reference to the world, cast as a Level object.
I’m not much with analogies, but I’ll give it a go.
Imagine that three people, Aaron, Beatrix and Cuthbert, are participating in an active survey about their pets. They each get a form to fill in. The form starts with basic questions about the pets - their names, their ages and stuff like that. That’s all fine, they fill them out - because all pets have names (analogy: the World class has methods like add, remove and collide that any class extending World will also have).
Now the problems start - A has a dog, B has a goldfish and C has a pet rock. The next part of the form says “Give your pet twice as much water to drink for two days, and report any changes.”. Well, A is fine - but B can’t do anything, because the instructions don’t make sense for a goldfish.
The next part - “walk your pet in the morning for a week, then in the evening for the next week”, again doesn’t make sense for B or C.
The next part - “are your pet’s gills larger in the morning than the evening” doesn’t make any sense for A or C, because only fish have gills.
The point here is that each pet owner needs a different form and list of instructions, specific to their pet. The pet-specific form is the typed (cast) pointer - Level
in your case, the generic form is the World
pointer.
I hope that made sense, it’s (relatively) early and I haven’t had my coffee yet.