Joysticks and gamepads support
Recently I was working on implementing support of joysticks and gamepads, and now it may be considered as 'ready'. Above is my test configuration (Logitech Extreme 3D Pro, 3D Connection SpaceNavigator, and XBox360 controller). Now SE supports up to 16 controllers simultaneously. You can assign each axis and button for any action in SE (axes can be assigned to 'analog' actions like rotation or aileraons control, buttons - for any, including 'analog' ones). This is the screenshots of new controls menu. In the first tab, 'Common controls', almost nothing changed, except that 3 new columns was added for binding the joysticks buttons (yes, you may bind any button for any action):
Next two tabs, 'Camera controls' and 'Ship controls', are changed a lot (and there is no more separate 'Ship in space' and 'Ship in atmosphere' tabs):
The table now have 2 parts - 'analog' controls in the top, and 'button' controls in the bottom. Buttons also may control analog actions, for example W key moves camera forward, altogether with controller stick. 'Button' controls like 'Center object' cannot be controlled by sticks or mouse, so 'analog' columns for them are empty. And yes, you may bind mouse axis for camera movement, this look cool but very weird smile
At the very bottom, there are sensitivity controls for mouse axes and all joysticks axes. I can implement sensitivity control for any action (for example, 'turn left' with joystick 1 have sensitivity of 1.5, while 'turn up' with the same joystick have sensitivity of 0.75), but I found this useless and extremely overloading the menu. So you can adjust sensitivity only per joystick. In addition, there are 'sensitivity' settings for keyboard/buttons (i.e. rotation rate - different for turn left/right/up/down and roll CW/CCW, because these actions really needed different speed settings).
Similar controls you can found on the 'Ship controls' tab, however it have more controls than the camera:
You may set the same sticks/buttons for avionics controls (elevator, rudder, ailerons) as for space controls (turn in all direction with thrusters), because ship cannot use both together, it switches between them automatically, based on its speed and air density. The new cool capability for ships - is controlling the engines thrust, what may be binded on the throttle stick (the black feature in front of the main stick on the Logitech joystick). It is cool to bind this throttle stick to the 'Move forward' action for the free camera - you can smoothly control you speed with it. But it may confuse if you switch from the ship mode to the free mode, and forget to disable the engines first smile I also want to make the mouse wheel available for binding, but probably not in this version.
The new keyboard/button commands what was asked for implementing many times - is a look back/left/right/down. They smoothly rotates the camera on 90° in the chosen direction (look back rotates by 180° of course) when you pressing the key, and returned its orientation back when you releasing the key. it is just like the middle-mouse drag. It is handy to assign the joystick hat on this actions (hat is the 'mini-joystick' on the top of the Logitech's main stick). However, I prefer to use the hat to move camera left/right/up/down, because that joystick have only one stick. What else? I usually bind the most usable actions to the joystick/gamepad buttons. Those are increasing/decreasing the velocity and switching to the next velocity preset (1, 10, 100 km/s, etc).
The 'Ship controls' tab have its own axes/buttons sensitivity, that saved in the config separately off the 'Camera controls'. The config format is changed a bit too, but I think you will never edit it manually smile To bind a new button, you simply click in the table's cell and press the button. To bind the axis, you click in the table's cell and move selected joystick stick to the end or move the mouse a bit.
Here the video where I trying to fly with all my 3 controllers:
Note the more smooth rotations with the Logitech joystick compared to the XBox gamepad - this is because it have bigger size and bigger 'working area', that allow to make more precise rotations. SpaceNavigator is a cool 6D controller - it detects movements and rotations of its single stick in all directions. It is possible to perform a natural-looking flights with it, but it is quite tricky. It have very small 'working area', so you must strain your hand to keep the motion/rotation direction.
I designed the new system for selecting the objects with joystick (not show in this video). You press the button - I usually bind it to the main (fire) button - and the crosshair appearing in the center of the screen. Next you rotate the camera or the ship with joystick, to match the crosshair with the star or planet, and release the button. This method may confuse for the first time, but you can adapt to it very quickly. Bind another button to the 'Goto' command, and you may perform basic navigation in SE with a single joystick/gamepad only! It is very handy when you sit far from the keyboard, for example on your sofa:). It is also good for playing in the Oculus Rift, because you cannot see you keyboard.
Also, joystick binding for Oculus Rift must be completely different that for the regular display. It is very, very bad idea to rotate your view with the mouse or joystick while you are in the Oculus. You must rotate yourself only with your head, or you will get motion sickness very quickly. So, for Oculus, you must bind sticks for motion only. SE will support joystick profiles in the future, maybe in the next version.
PS: BTW, I quit my job, and now work on SE full time. It is thanks to your donations!