Eris, the WorldForge client entity library

by James Turner

Eris is designed to simplify client development (and avoid repeating the same work several times), by providing a common system to deal with the back end tasks. Notably, Eris encapsulates most of the work in getting Atlas entities available on your client, logging into a server, and managing updates from the server. Thus it can be considered as a session layer above Atlas, providing persistent (for the session) objects as opposed to transient Atlas entities. It handles the client-side implementation of the metaserver protocol, querying game servers, out-of-game (OOG) operations (via the Lobby and Rooms), and most important in-game (IG) operations such as entity creation, movement and updates.

Eris provides a generic 'Entity' class, which you can sub-class and provide to the system (by registering a factory with the World); thus you are free to create different classes to handle characters, walls, vehicles, etc as your client dictates. An alternative approach is to simply create peer classes, and connect them to Eris via callbacks. Eris makes extensive use of libSigc++, which must be correctly installed and functioning on your system. Familiarity with signal/slot programming concepts is essential for using Eris; the libSigc++ home-page has some examples. The Gtk+ or QT signal systems also provide a good introduction.

Note that Eris does NOT encapsulate Atlas for you! Your code must still perform the useful work, such as generating operations, and analysing attributes. Eris simply makes getting this informaton much easier. Also, an understanding of the Atlas Objects specification, and how it is applied in practice will make working with Eris much easier. Eris does permit you to ignore lower-level Atlas issues such as Codecs and connections (if you choose to).

For examples of using Eris, see 'silence' in forge/clients/silence; this is a simple NCurses based text client that demonstrates how to use Eris. Finally, Eris is a very open system; if you have an entity utilty, processing method or other concept you think is reusable in all WorldForge clients, please let me (James Turner) know about it for possible inclusion.