In This Posting, I wrote that I had completed my testing of ‘
Crystal Space 2.1‘ on the laptop I name ‘Klystron’ – for now, by installing the ‘
Blender‘ add-on script, that would actually allow a user to create content.
But there was yet another facet of this open-source game engine, which I have not yet tested. This is the ‘
CSEditing‘ extension. On the surface, this plug-in is supposed to permit in-game editing of content.
Digging a bit deeper reveals a flaw, in what my expectations were.
Crystal Space is not a game, but a set of libraries with an API, that allows its users to create games, but which also allows its users to create any type of application, which will then benefit from complex 3D-graphic output. If such a game or application has in-game editing, it will be because individual users gave their creations this ability. It is not as if any of the CS demos actually show off this ability, and thus, there are few or no 3D applications yet written, that use this additional API.
When we compile the libraries that comprise
CSEditing, we also compile an executable – a run-time program, which is meant just to prove that the API exists and can be used from an application. This actual run-time is not in itself a comprehensive editor.
In fact, the loading of the shared libraries, which make this feature work, still needs to be taken care of by the user, who wants to use
Crystal Space in C++ to create his application. AFAIK,
CSEditing does not depend on the
Crystal Entity Layer.
CSEditing API only has sparse documentation, which would be very valuable in the future, seeing as users will be trying to integrate such an advanced feature into their indie creations. But this also seems to suggest, that this is very much a work in progress.
What the demo application does show, is the stated capability of subdividing the window into panels, each of which either display a 3D view, or which display certain types of information panels, and which can be used to select elements of the 3D scene. Based on this last capability, a C++ program should also be able to grab more properties from each of the selected nodes, than this scant run-time does in practice.
But then, this run-time only display certain information about ‘the scene graph’ as it were, without allowing its user to edit anything. It would be up to the user himself, to design a better application that uses this API.
And so, users like me are more likely just to appreciate such full-featured applications as
Blender, to do actual editing. Without targeting an audience ourselves, with a transferred ability to edit content.
What the developers have shown is an ability that is impressive in itself, which is the use of ray-casting to allow the player to select a visible object from within the 3D view panels. In response, another panel can display – and therefore also alter – the properties of that object.
But what the developers have not shown so far, is an ability which
Blender has, by which the letter-key ‘S’ can be pressed, and by which to drag the mouse can then scale that property from within the 3D view panel. In fact with
Blender, the user can add another key to the ‘S’ to confine along which axes he wants to drag the size of the object.
Crystal Space developers offer instead, is that users offer their players a
CEGUI interface in the text-like properties panel, to change values. And then, because
CEGUI is itself quite strong, the users can assign spin-boxes or sliders to size attributes – for example – to make eventual resizing faster than it would be, if the player in turn always had to
type in numbers for the dimensions…
Mind you, if
CSEditing wanted to clone this one aspect of what
Blender does, a
Crystal Space application could use regular keyboard input sensitivity, to sense that an ‘S’ and then an ‘X’ had been sent, and could capture mouse-movement. This mouse-movement could then be applied by our application to rescale the selected object along the X-axis, until the user right-clicks. This would roughly be what
Blender does. The most important aspect that an API needs to solve, is to allow the player to select which model he wants to edit in this way, and to pass along this type of pointer to the application in a uniform way. Which I believe it already does.