Hello,
find attached a patch for fgjs.cxx and jsinput.[h,cxx] (current CVS).
The changes are:
- automatic detection of axis directionality, so that axis inputs are
appropriately inverted only when necessary
- fixed trim axis names for better understandability
- fixed signs for flaps up/down property increments
- button 0 was previously used for skipping axes and buttons in both
loops. Now button 0 can be assigned a binding (e.g., brakes). Instead,
moving any axis during the button-assignment-loop indicates skipping.
- The user is now told how to skip a control.
I have tested it with a Logitech WingMan Force 3D, but I don't see any
reason why it should not work for other sticks ;-)
Regards,
Ralf
Index: src/Input/fgjs.cxx
===================================================================
RCS file: /var/cvs/FlightGear-0.9/source/src/Input/fgjs.cxx,v
retrieving revision 1.7
diff -u -r1.7 fgjs.cxx
--- src/Input/fgjs.cxx 25 Jun 2005 07:57:42 -0000 1.7
+++ src/Input/fgjs.cxx 18 Jul 2005 10:19:41 -0000
@@ -50,15 +50,18 @@
"/sim/current-view/goal-pitch-offset-deg"
};
+string axis_posdir[8]= { "right", "down/forward", "right", "forward",
"forward", "forward", "left", "upward" };
+
+
bool half_range[8]={ false,false,false,true,true,true,false,false };
bool repeatable[8]={ false,false,false,false,false,false,true,true };
-bool invert[8]= { false,true,false,false,false,false,false,true };
+bool invert[8]= { false,false,false,false,false,false,false,false };
string button_humannames[8]= { "Left Brake", "Right Brake",
"Flaps Up", "Flaps Down",
- "Elevator Trim Up", "Elevator Trim Down",
+ "Elevator Trim Forward", "Elevator Trim
Backward",
"Landing Gear Up", "Landing Gear Down"
};
@@ -76,7 +79,7 @@
bool button_boolean[8]={ false,false,false,false,false,false,true,true };
-float button_step[8]={ 1.0, 1.0, 0.34, -0.34, 0.001, -0.001, 0.0, 1.0 };
+float button_step[8]={ 1.0, 1.0, -0.34, 0.34, 0.001, -0.001, 0.0, 1.0 };
string button_repeat[8]={ "false", "false", "false", "false", "true", "true",
"false", "false" };
@@ -379,7 +382,8 @@
for(control=0;control<=7;control++) {
cout << "Move the control you wish to use for " <<
axes_humannames[control]
- << endl;
+ << " " << axis_posdir[control] << endl;
+ cout << "Pressing a button skips this axis\n";
fflush( stdout );
jsi->getInput();
@@ -397,6 +401,7 @@
if (strcmp(answer,"n")==0) {
control--;
} else {
+ invert[control]=!jsi->getInputAxisPositive();
if (usexml) {
writeAxisXML( xfs[jsi->getInputJoystick()], control,
jsi->getInputAxis() );
} else {
@@ -424,6 +429,7 @@
} else {
cout << "Press the button you wish to use for " <<
button_humannames[control] << endl;
}
+ cout << "Moving a joystick axis skips this button\n";
fflush( stdout );
jsi->getInput();
if(jsi->getInputButton() != -1) {
Index: src/Input/jsinput.cxx
===================================================================
RCS file: /var/cvs/FlightGear-0.9/source/src/Input/jsinput.cxx,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 jsinput.cxx
--- src/Input/jsinput.cxx 10 Sep 2002 01:14:08 -0000 1.1.1.1
+++ src/Input/jsinput.cxx 18 Jul 2005 10:19:41 -0000
@@ -29,7 +29,7 @@
jsInput::~jsInput(void) {}
-int jsInput::getInput(void){
+int jsInput::getInput(){
bool gotit=false;
@@ -37,6 +37,7 @@
int i, current_button = 0, button_bits = 0;
joystick=axis=button=-1;
+ axis_positive=false;
if(pretty_display) {
printf ( "+----------------------------------------------\n" ) ;
@@ -79,6 +80,7 @@
gotit=true;
joystick=jss->getCurrentJoystickId();
axis=i;
+ axis_positive=(delta>0);
} else if( current_button != 0 ) {
gotit=true;
joystick=jss->getCurrentJoystickId();
@@ -102,7 +104,7 @@
ulMilliSecondSleep(1);
}
if(button_bits != 0) {
- for(int i=1;i<=31;i++) {
+ for(int i=0;i<=31;i++) {
if( ( button_bits & (1 << i) ) > 0 ) {
button=i;
break;
Index: src/Input/jsinput.h
===================================================================
RCS file: /var/cvs/FlightGear-0.9/source/src/Input/jsinput.h,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 jsinput.h
--- src/Input/jsinput.h 10 Sep 2002 01:14:08 -0000 1.1.1.1
+++ src/Input/jsinput.h 18 Jul 2005 10:19:41 -0000
@@ -34,6 +34,7 @@
int button_iv[MAX_JOYSTICKS];
int joystick,axis,button;
+ bool axis_positive;
float axis_threshold;
@@ -48,6 +49,7 @@
inline int getInputJoystick(void) { return joystick; }
inline int getInputAxis(void) { return axis; }
inline int getInputButton(void) { return button; }
+ inline bool getInputAxisPositive(void) { return axis_positive; }
inline float getReturnThreshold(void) { return axis_threshold; }
inline void setReturnThreshold(float ff)
_______________________________________________
Flightgear-devel mailing list
[email protected]
http://mail.flightgear.org/mailman/listinfo/flightgear-devel
2f585eeea02e2c79d7b1d8c4963bae2d