I think I understand whhat you're saying, and no, I don't know of anything like that. The thing about software is mine is always better than yours or theirs. Everybody touts their own software as being the ultimate solution, so your best bet is to just evaluate everything yourself.
Something else you may want to consider as part of your design is passing the time between logic updates to the update function of your game objects.
float logicTime = 1.0f/25 ;// 25 logical ticks per second is really all you will ever need.
float elapsedTime = 0;
elapsedTime += TimeBetweenFrames();
if(elapsedTime > logicTime)
player->Update(elapsedTime); // because the true elapsed time between logical updates can vary, you want the game objects to know about it so they can decide what to do with it.
elapsedTime = 0;
For associative arrays in my game engine, I have an interface that does not declare any functions called "IObject". In the compiled code I have a thin wrapper around the std::map that takes asIScriptObject as both template parameters. So basically, it allows me to hash any IObject with any other IObject in a similar way to how Java containers work. So far it has worked extremely well, especially for the scripted AI in my game engine.
If there are multiple instances of the Script class, it may be that the error is in you registering the "Entity" type multiple times, as well as the "World" in RegisterEntity and RegisterWorld. The script engine instance only needs to have types registered to it once, and they are then available globally.
[EDIT]: Sorry about that, just realized that _engine is unique per script. In that case, you have a design issue on your hands, as I can see that being horribly inefficient.
Beside that, I can see you doing some angelscript operations there without checking what is returned. Most Angelscript operations return an int which you can check for errors. I myself have a nice little macro that handles this for me.
GetErrorString is just a function that reads from a hash table stored somewhere in global scope to convert the numerous error codes into a string. It gives me a good indication of what happened and has reduced my debug time by a fair margin.
It's been far too long coming. He was a threat not only to America, but to the entire world. If he had succeeded in destroying us, he would have only found someone else to hate. Such was the sorry bastard's mentality.
For freedom, and rest in pieces you sorry sack of ****.