|
|
"MessyBlob" <nomail@nomail> wrote:
> Generally, we could go for partial OO implementation for the scene objects,
> which means that we don't carry per-instance methods, but instead just have the
> instances (with a single pointer) locate the methods for the class, along with
> the enumerated properties. The parser would be version-matched to the engine,
> which removes any opaque enumeration from the SDL source scripts.
I'd even go as far as to move the whole scene object handling into a separate
layer, with the SDL code only checking whether the object is *any* type of
scene object, and then deferring the handling to that "scene object wrapper"
layer.
That one could in turn be comprised of nothing more than a dynamic table with
objects and their respective actual types (with the core SDL implementation
handling only indices into that table; could be pointers though of course), and
a hard-coded lookup table for each type, mapping keywords to
pointers-to-members. Plus some wrap/unwrap code for some data types, if needs
be.
Thus, a statement like
MySphere.translate(<2,3,4>)
would be resolved to (roughly):
value = LookupName("MySphere");
if (value->type == SCENE_OBJECT)
{
SceneObjectLayer->Invoke(value->handle, "translate", Vector3d(2,3,4));
}
while SceneObjectLayer::Invoke(handle, name, param) would be implemented as
something like:
obj = (SceneObject*)handle;
objClass = obj->class();
member = LookupMember(objClass, name);
obj->member(Unwrap(param));
which would ultimately resolve to - in this case - a call to
Sphere::Translate(Vector3d v).
Post a reply to this message
|
|