I wrote: > OK, time for more stuff, mostly Nasal or Nasal related. Curt gave me > write access to the CVS repository so I've checked it in myself. > Shout if I broke something.
I broke something! :)
My commit died in the base package Nasal directory with the following error:
cvs [commit aborted]: could not open lock file `/var/cvs/FlightGear-0.9/data/Nasal/,bo105.nas,': Permission denied
The Aircraft/bo105 commit worked fine, however. Looks like an admin issue, I guess. Curt?
The new globals.nas file is attached; you will need the two new functions to run the bo105 code.
Andy
## # Returns true if the first object is an instance of the second # (class) object. Example: isa(someObject, props.Node) # isa = func { obj = arg[0]; class = arg[1]; if(!contains(obj, "parents")) { return 0; } foreach(c; obj.parents) { if(c == class) { return 1; } elsif(isa(obj, c)) { return 1; } } return 0; }
## # Invokes a FlightGear command specified by the first argument. The # second argument specifies the property tree to be passed to the # command as its argument. It may be either a props.Node object or a # string, in which case it specifies a path in the global property # tree. # fgcommand = func { if(isa(arg[1], props.Node)) { _fgcommand(arg[0], arg[1]._g) } _fgcommand(arg[0], propTree); } ## # Returns the SGPropertyNode argument to the currently executing # function. Wrapper for the internal _cmdarg function that retrieves # the ghost handlet to the argument and wraps it in a # props.Node object. # cmdarg = func { props.wrapNode(_cmdarg()) } ## # Utility. Does what it you think it does. # abs = func { if(arg[0] < 0) { -arg[0] } else { arg[0] } } ## # Convenience wrapper for the _interpolate function. Takes a # single string or props.Node object in arg[0] indicating a target # property, and a variable-length list of time/value pairs. Example: # # interpolate("/animations/radar/angle", # 180, 1, 360, 1, 0, 0, # 180, 1, 360, 1, 0, 0, # 180, 1, 360, 1, 0, 0, # 180, 1, 360, 1, 0, 0, # 180, 1, 360, 1, 0, 0, # 180, 1, 360, 1, 0, 0, # 180, 1, 360, 1, 0, 0, # 180, 1, 360, 1, 0, 0); # # This will swing the "radar dish" smoothly through 8 revolutions over # 16 seconds. Note the use of zero-time interpolation between 360 and # 0 to wrap the interpolated value properly. # interpolate = func { if(isa(arg[0], props.Node)) { arg[0] = arg[0]._g; } elsif(typeof(arg[0]) != "scalar") { return; } _interpolate(arg[0], subvec(arg, 1)); }
_______________________________________________ Flightgear-devel mailing list [EMAIL PROTECTED] http://mail.flightgear.org/mailman/listinfo/flightgear-devel