Is this a good approach for a MMORPG entity handling on different maps?
Map Structure and entity existece:
A map is basically a parent node in a scene graph. There's one map for each town, room etc. In each of these maps the entities or actors (split up into localplayer/NPC/remoteplayer) exist with their own coordinates in respect to map size. Each map has it's own position in worldmap, it's id and it's own update() method which calls update() on each entity.
Server has 2 Hashmaps with key being map_Id and value being according map reference. One is a pool for every map possible, the other one is currently active (or populated) maps. Also an eventqueue is available containing 2 queues, one for current events and one for new events resulting from current event processing. Events are collected in between ticks by a event fetcher thread accepting incoming events from remote (inbox) and are distributed by a extra event distributor thread (outbox).
Each tick/render server processes the eventqueue and given a actorupdate event calls update() on each affected map (calling update() on every entity). Before/while this processing happens each relevant event in inbox is being distributed to each relevant client. Relevant means the event is of interest to the particular client (e.g. events concerning actors on map1, each client on map1 is then relevant) and the event was not sent by receiver client itself. Each n-ticks sanity check is sent to all clients.
Client stores current map and possible new map preloaded in reference (if player is in transition zone). Events are processed similar to server but include local only events like AnimationStarted and a event fetcher thread saves all incoming events from server in an inbox.
Each tick the inbox is being put in local current eventqueue, local built server relevant events like ActorMove are being send to the server and all events are being processed just like server does with 2 queues putting new queue into current queue etc. Regardless of own latency client will at some point in time have the sanity check in inbox and must process it.