Fio:LuaBinder

From Fio

(Difference between revisions)
Line 1: Line 1:
-
<font color=blue>''"Like a bridge over troubled water..."''</font> - Simon And Garfunkel
+
<font color=blue>''"Like a bridge over troubled water..."''</font> - Simon and Garfunkel
<font color=red>still in ctoring</font>
<font color=red>still in ctoring</font>
==Lua Binder==
==Lua Binder==
 +
Fio use [http://www.lua.org Lua] as scripting language to implement the game logic which include(in a broad sense):
 +
* UI design and switching
 +
* event handler
 +
* combat scheduler
 +
* npc behavior
 +
 +
All the logics/policies are build on the mechanims carried out by c++ classes which will do the real work of rendering, timing, event dispatching etc. This seperate is to make the game fully data driven - thru scripting the logic itself is taken as data which can be easily modified without the compile-link of the mechanism part(or the engine).
 +
 +
Lua has provided a bunch of API for "the host program to communicate with Lua". For each function call from lua into c++, we have to:
 +
* extract the arguments from lua stack;
 +
* check the argument/return value type;
 +
* call c++ function;
 +
* push the return value onto lua stack;
 +
* take care the return value life time.
 +
 +
thru Lua APIs.
 +
 +
As the number of classes need to be embedded into lua increases, these routine work will be a burden to write and maintain for each function call. There're quite a few [http://lua-users.org/wiki/LuaAddons binders] out there to make the embedding easier. In Fio we implement a home brew binder - LuaUtil.
===Quick Tour===
===Quick Tour===

Revision as of 15:24, 15 September 2006

"Like a bridge over troubled water..." - Simon and Garfunkel

still in ctoring

Contents

Lua Binder

Fio use Lua as scripting language to implement the game logic which include(in a broad sense):

  • UI design and switching
  • event handler
  • combat scheduler
  • npc behavior

All the logics/policies are build on the mechanims carried out by c++ classes which will do the real work of rendering, timing, event dispatching etc. This seperate is to make the game fully data driven - thru scripting the logic itself is taken as data which can be easily modified without the compile-link of the mechanism part(or the engine).

Lua has provided a bunch of API for "the host program to communicate with Lua". For each function call from lua into c++, we have to:

  • extract the arguments from lua stack;
  • check the argument/return value type;
  • call c++ function;
  • push the return value onto lua stack;
  • take care the return value life time.

thru Lua APIs.

As the number of classes need to be embedded into lua increases, these routine work will be a burden to write and maintain for each function call. There're quite a few binders out there to make the embedding easier. In Fio we implement a home brew binder - LuaUtil.

Quick Tour

The Lua Application Program Interface

Construct An Object

  • normal
  • lightweight

Method Invoking

  • method wrap

from lua into c++

  • traits
  • Overload

from c++ into lua

callback?

Type Checking

LSP

Destruct & Object Lifetime in the 2 Worlds

Misc

  • const
  • panic
  • utility functions
Personal tools