If you are used to C++ these are a few strange things that you will find in Lua.
For those of you who are more familiar with C style syntax here are a few oddities that initially threw me off:
The not equals in lua has a tilde
self.entity ~= nil
if you want to "not" a boolean you have to use the keyword "not"
if not self.target then
All "if" statements you have to do include 3 keywords if, then, end
if self.stunned==true then return end
While loops have 3 keywords while, do, end
While x < 10 do x = x+1 end
This is what a for loop looks like:
for i = 0, 10, 2 do print ( i ) end
in C that same for loop would be:
for (i = 0; i <= 10, i += 2) { printf("%d \n",i); }
Notice in the Lua for loop that exit condition is always less than or equal to <= so be careful!
There are no +=, -=, /=, or *= in lua
String concatenation is ".." rather than +
There is no need to end each line with a semicolon although it can be used to break up lines of code. This way you don't have to dedicate a whole line to a small declaration.
x = 10 ; y = 10;
Lua uses tables for everything, instead of arrays and maps. (A table is basically a map though..)
tables are declared with {}
Script.state={}
you can add specific keys and values to this table by:
Script.state.idle=0 Script.state.walk=1 Script.state.chase=2 Script.state.attack=3 Script.state.hurt=4 Script.state.dying=5 Script.state.dead=6
Then if you want to know the size of the table use the symbol #
#self.state
will return 7
In Darkness awaits I always use the short hand function call.
Time:GetCurrent()
This is expanded to the long hand: (I think this is the correct syntax)
Time.GetCurrent(Time)
The short hand is cleaner but when you get an error in one of the parameters the debugger will be wrong in the argument number. For example say you called gotopoint with too many arguments (there should only be 5 not 6
self.entity:GoToPoint(20,2,0,0,1.4,1)
The debugger would complain and say "argument #7 is 'number';" and you'll think to yourself, there is no argument 7 you crazy debugger.... but this is because the function is expanded to the long hand form so it is actually calling
self.entity.GoToPoint(self.entity,20,2,0,0,1.4,1)
and you can see the extra argument is actually in the 7th position.
Well off the top of my head these are all I can think of. I know there are more. For more in depth lua info check out: http://www.lua.org/pil/contents.html#P1
- 1
2 Comments
Recommended Comments