im really liking my track ir. the only gripe i have is the fairly closed sdk. i hear they will practically give it to anyone who asks for a copy, however youre only allowed to use it for comercial games (i havent read the eula on it yet). but d2xxl is using it so i figure the scp could too.
It was considered acceptable to use it for BTRL. I was going to implement it, before time issues got in the way, and I eventually sent the device back without getting much chance to try it out.
However, while I did have it, I took a look at the SDK and given the features of the device, I can't think of anything that would be immediately easier to use. Adding a scripting interface for it would be incredibly easy, at least relatively speaking.
The biggest issue is that it's closed source, so none of the code could be added to CVS. Basically this means that you would have to have a separate source code file containing all direct references to the API, and/or an entirely separate DLL loaded by Freespace 2. (It's Windows only, anyway, so it wouldn't be like you would be breaking compatibility if you wrote the DLL loading procedure correctly.)
There would probably be some conversion issues, too, to translate the values from the TiR SDK into FS2 equivalents, but that's more a process of trial and error than design.
I believe the SDK itself is free, so long as you have the device already.
Native support is definitely preferable though, due to the features that TiR offers through 6dof that a mouse simply cannot ever emulate (Not the kinds of mice that I use, anyway).
Now it would be nice if some thought was put into the scripting interface, so you could have some kind of unified device control and be able to pass a joystick, mouse, keyboard, TrackIR or whatever to a function and have it work with it in the same way without recoding, if appropriate. Basically have some kind of base class and make it extendable for extra dimensions, and then have the individual derived classes.
Individual devices could then be accessed through an array, and you could transparently offer the ability to upgrade the API to support multiple devices. (Why the hell you would want multiple TrackIR headpieces is not beyond me, you could probably do something pretty cool by attaching them to your arms or something and implementing a virtual reality thing. But that's the kind of thing that would take a lot of hard work and might land you on Slashdot.) I don't think the TrackIR API supports that sort of thing atm, but you could still do something like have the array and only have the first value return a valid entry eg
cs.TrackIR[1] = realThing
cs.TrackIR[2] = noThing
cs.Joystick[1] = realThing
cs.Joystick[2] = realThing --Pedals
cs.Joystick[3] = noThing
cs.Mouse[1] = realThing
-- etc etc...
Now the fun part of this would be if you wanted to make use of all this with hooks. With the keyboard, making hooks is easy if you ever figure out how to repeatedly use the values returned by the polling functions for the keyboard. You just have to translate them into ASCII, or translate the ASCII into keycodes, and compare the two.
$KeyPress: A
$On Key Press: [
--Do something interesting
]
Now with the TrackIR I'm not sure what you'd do. You have several different gradient movements you can make, but it has no definite buttons to press (a joystick would, and you'd have to do something similar to a keyboard). I'm guessing you'd just end up defining a generic TrackIR field, and ones for various axis
$TrackIR: 1 -- Only executes for first TrackIR device events
$On TrackIR: [
--Poll current device values and figure out what to do
]
$TrackIR Axis: Rotate X
$On TrackIR: [
--Poll current device values etc
]
In the first example, all events from the first TrackIR device would be captured. In the second example, all X rotation events would be captured. (For those of you not familiar with TrackIR, it's capable of distinguishing between rotating your head and actually moving it, in all three dimensions.
And just for the hell of it:
$Joystick: 1
$Joystick Button: 4
$On Joystick: [
--Fire ze missiles
]