So, the new TI-Nspire OS 3.2 is out. What does that mean for Lua developers ?
Well, a lot ! There are some important changes that you all should know about, in order to make your applications works perfectly on 3.2.
TI has done a great job keeping compatibility, but there are some tiny stuff that might cause certain programs not to run (properly).
Compatibility modeLet me first begin with the compatibility mode. TI has 2 "apiLevel's" in 3.2. apiLevel 1.0 provides backwards compatibility for <3.2 OS's by keeping the old API structure.
All documents created for 3.1 and previous will run in that apiLevel by default. This is because some changes in the XML structure of the document. So most programs and games should run fine by default.
Then there is apiLevel 2.0. This apiLevel has some big changes to the API structure, so you will have to update some of your code in order to have some of they new 3.2 stuff. However, it is currently not possible to create apiLevel 2.0 documents with Luna due to changes in the XML structure. I have given the details of the changes to ExtendeD so he will probably update Luna soon.
For the best support and guarantee that you are using the correct apiLevel, you should add the following to the top of new Lua documents you create:
platform.apilevel = '1.0'
or
platform.apilevel = '2.0'
Please note that using apiLevel 2.0 with the current Luna will result in an error. (I have a little customized version myself, but I'm not going to release it because it's Linux only, and I'm sure ExtendeD will update Luna soon.)
Events*
on.create is removed in apiLevel 2.0 and replaced with
on.construction. This event handler is guaranteed to run before all others.
*
on.getFocus is called when the script receives user input focus.
*
on.loseFocus is called when the script loses user input focus.
*
on.getSymbolList is called when the script app symbol list is being serialized to the clipboard.
Graphical operations* Most graphical operations are now anti-aliased. This makes that applications look more pretty
*
gc:setColorRGB now supports one number as input (as well as the old style). For example, you can do
gc:setColorRGB(0xFF00CC) or
gc:setColorRGB(0)* You can not use coordinates for drawing to the screen above/under (-) 32 000. Normally this shouldn't affect anyone, but because of this Cubefield refuses to run.
* In apiLevel 2.0
platform.gc() is removed and replaced with
platform.withGC(). An example of it:
function getStringWidth(str, gc)
return gc:getStringWidth(str)
end
function on.construction()
local strw = platform.withGC(getStringWidth, "The game")
end
So what it does it call the function you give as first argument and pass a dummy GC to it as
last argument.
D2EditorD2Editor is greatly improved, and it finally useful
requireThere are three modules that you can 'require': physics, color, and strict.
The physics module is the chipmunk physics engine.
color is just a table containing colors. color.red (or color["red"]) will return the color code for red.
I have no idea what strict is or does
Usage:
require 'modulename'PhysicsMaybe the best part of it of. OS 3.2 now includes the Open Source Chipmunk physics engine, and you can use it right from Lua!
This will allow some great games and applications
However it's is far to complex to detail in this post, so I will probably write a tutorial about it soon
ImageNormally 3.2 would have many updates to the image, but sadly enough they did not make 3.2 and are pushed for the next OS.
However, there is one function that made it, and that is
image.rotate. This allows you to rotate images in anyway.
But beware, it is not the fastest function out there.
Mathmath.eval has got some friends:
math.evalStr,
math.getEvalSettings and
math.setEvalSettings.
PlatformI already mentioned
platform.withGC, but there are still two other newcomers:
*
platform.registerErrorHandler, this allows you to take actions when an error occurs in your document. Pretty nice
*
platform.window:setFocus, regain focus in your script.
*
platform.hw(), returns a number corresponding to the device the scripts is running on.
Variable*
var.recallAt, fetch data from a certain spot in a list or matrix
*
var.makeNumericList, create a list in the symbol table. The create list will work much more efficient with other var functions.
ToolpaletteIn apiLevel 2.0 the names of toolpalette items may be changed dynamically while the program is running. Calling
toolpalette.register(nil) deactivates the toolpalette.
Well, that's about it. I'm sure there are some stuff I forgot, but you can find them all in the API documentation here
http://education.ti.com/downloads/guidebooks/ti-nspire/3.2/TI-Nspire_Scripting_API_Reference_Guide/TI-Nspire_Scripting_API_Reference_Guide_EN.pdf .
Good luck and may the coding force be with you!
Links:
Wiki version of this post with more details