• News
  • OldBlog

Marching Orders

In my last post, I compared objects in the Mana internal directory structure to the files residing in folders on your computer. Taking that a step further, Mana objects have something else in common with files. They can be put into one of two general categories – data or executable (functional).

Most files on your computer are simply data that is read in by applications. Similarly, most objects in Mana are merely containers. Models, widgets, lights, cameras, and so forth are all basically data associated with names. But applications are driven by functions that carry out instructions on those objects.

In Mana, functions are objects like any other and, in a sense, most objects act like functions.

Confused? I don’t blame you!

Mana operates something like a set of dominoes. One object of your choosing is the start of a chain of events that unfolds the purpose of your application. Every object has a set of things in common and chief among those is an Update method.

That is important! So I shall reiterate!

Every object has an Update method and all objects are linked in a hierarchy. Updating an object cascades down through all of its children and their children and so on. Like dominoes! If you want your application to run in a loop, use a looping function at the top of your chain.

Now, back to functions! Here is a simple, and rather silly, one written in Lua.

function MakeMultipleWindows( n )
 for i = 1, n, 1 do
  mkWindow( “Window” .. i, 0, i * 110, 200, 100 )
 end
end

It expects one integer parameter and makes that many windows. Functions written like this are available only in Lua and there’s nothing wrong with that. Entire applications can be written this way and there’s nothing stopping anyone from sharing scripts!

However, if a function is to be executed as part of a chain, it is best registered as an object. That declaration looks something like this.

MANA.RegisterFunction(
 function MakeMultipleWindows( n )
  for i = 1, n, 1 do
   mkWindow( “Window” .. i, 0, i * 110, 200, 100 )
  end
 end,
 ”MyFunctions/MakeMultipleWindows”,
 {MANA.META.INT},
 {}
)

The MakeMultipleWindows function is registered as a function object that can be cloned and attached to other objects and have children of its own. I’ll leave the breakdown of the syntax for later. One other benefit of registering functions is that they are packaged as part of the module and that makes distribution simpler.

As you may have guessed, linking functions together in combinations can have powerful results!

Comments are closed.