Re: [Celestia-developers] More scripting changes
Real-time 3D visualization of space
Status: Beta
Brought to you by:
cjlaurel
From: Fridger S. <t0...@ma...> - 2003-04-15 23:36:20
|
Chris Laurel wrote: > > On Tue, 15 Apr 2003, Christophe Teyssier wrote: > > > > > I've added a celestia:getchilds(object) which returns a table of all the > > childs of object, and here is a script that visits the entire solar system > > :-) > > > > function goto(o, t) > > local obs = celestia:getobserver() > > obs:goto(o, t) > > while (obs:travelling()) do > > wait(0) > > end > > end > > > > function visit(o) > > local i, v > > celestia:select(o) > > goto(o, 3) > > wait(0.5) > > local childs = celestia:getchilds(o) > > for i, v in ipairs(childs) do > > visit(v) > > end > > end > > > > sol = celestia:find("Sol") > > visit(sol) > > Very nice! > > Lua seems to be close to the optimal embedded scripting language. Small, > free, fast, portable, easily extensible, with powerful constructions like > closures and coroutines . . . One thing that /does/ appear to be missing > is a way to write iterators. With an iterator, instead of actually > filling a table with values, you could define a next function to produce > the next value in the sequence. This is especially useful for the stars > database, where you definitely do not want to generate a Lua object for > every single star. > But I guess you know that (circular) linked lists are included: list = {} -- creates an empty table current = list i = 0 while i < 10 do current.value = i current.next = {} current = current.next i = i+1 end current.value = i current.next = list or also colors = {} colors[1] = "blue"; colors[2] = "yellow"; colors[3] = "red" colors[4] = "green"; colors[5] = "black" being equivalent to colors = {"blue", "yellow", "red", "green", "black"} Finally, the ability to traverse tables, using the built-in function 'next', like so: function clone (o) local new_o = {} -- creates a new object local i, v = next(o,nil) -- get first index of "o" and its value while i do new_o[i] = v -- store them in new table i, v = next(o,i) -- get next index and its value end return new_o end Bye Fridger |