Instead of using separate Commune and Think goals depending on
whether we're querying for or setting thoughts we now instead solely use
the Think op. This op wraps another op, which is then used to determine
what to do. The ops that are supported are: Set, Get, Delete and Look
Think(Set): sets new thoughts and updates existing ones, if an id is
supplied.
Think(Get): get all or specific thoughts (replaces Commune)
Think(Look): inspects a specific goal
Think(Delete): deletes all or a specific thoughts (i.e. both goals and
knowledge)
This is a mind which only registers the world, and then is responsible
to send what it knows about the world to any external mind that's
connected to the character.
Currently it only sends the thoughts that's been sent to the character.
We now register a an external mind with the ExternalMindsManager and
then let the manager make sure that there's an external mind connected.
When the external client is disconnected the manager will try to find a
new client to handle the mind.
The idea is that entities which aren't externally controlled at the
moment of death are put in limbo. Once they become externally controlled
again (i.e. the user logs in) they are respawned. This ought to fix the
issue with the graveyard being full of abandoned characters.
Instead of the root entity always being the default one (for new
entities being created etc.) we now can specify another entity which is
the default one.
If a character a wielded an entity b, and then was destroyed, and then b
was re-containered, it would result in segfault due to a lingering
connection. This fixes it, but it's a temporary fix until we've
transferred to using "outfit" for wielding.
The relay mechanism, through the new internal Relay operation, allows
one external client to relay an operation to another external client,
and get the response back.
This can currently only be used by Creator clients. It's main use is for
mind introspection.
All IG code should use the interface of LocatedEntity when dealing
with any entity, rather than sometimes requiring Entity. Add virtual
functions to the interface where required, and modify all other interfaces
to stop them using Entity. This makes the code way cleaner, and much better
de-coupled.
The Link reference provided is the object allowing direct communication
back to the external source of the operation. This allows us to handle
things more cleanly in some cases.