Fio:LuaBinder
From Fio
Line 1: | Line 1: | ||
- | <font color=blue>''"Like a bridge over troubled water..."''</font> - Simon | + | <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