From 831f84a47bde0dc7b09ec5ec3039387c0e742da6 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Tue, 29 Jan 2013 16:40:46 +0900 Subject: [PATCH] Add my vkb config script. It's a bit ugly, but it does nicely demonstrate what can be done with QF's input system. --- doc/config/vkb.cfg | 211 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 doc/config/vkb.cfg diff --git a/doc/config/vkb.cfg b/doc/config/vkb.cfg new file mode 100644 index 000000000..0a448b161 --- /dev/null +++ b/doc/config/vkb.cfg @@ -0,0 +1,211 @@ +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +// This is an implementation of a virtual keyboard using the same scheme +// as Valve's Big Picture (apparently). This implementation uses only QF's +// IMT key binding system and joystick axis controls (to get buttons from +// analog inputs) and the standard id parser. +// +// At this stage, there is no support for backspace or enter. However, that +// requires only some modifications to in_type to support things like \h and +// \n. +// +// This probably could be done more elegantly using gib, and certainly using +// Ruamoko with just enough config to get the button presses into the VM. + +// The dpad on my gamepad (Elecom jc-u2312fsv) is only pseudo-digital, at +// least from Linux's point of view: -32767, 0, 32767. Axis 4 is horizontal +// and axis 5 is vertical. This setup makes it so j_axis1 = up/north, +// j_axis2 = right/east, j_axis3 = down/south, j_axis4 = left/west +in_joy 4 amp 1 pre_amp 1 deadzone 0 offset 0 type button 0 +in_joy 4 button add J_AXIS2 16384 +in_joy 4 button add J_AXIS4 -16384 +in_joy 5 amp 1 pre_amp 1 deadzone 0 offset 0 type button 0 +in_joy 5 button add J_AXIS1 -16384 +in_joy 5 button add J_AXIS3 16384 + +// create the imts +// the vkb imts form a compass rose around imt_vkb. imt_vkb0 is intended to be +// at north, imt_vkb2 at east, imt_vkb4 at south, imt_vkb6 at west, and the odd +// numbered vkb imts in between the even (eg, imt_vkb1 at NE, imt_vkb7 at NW). +imt_create key_console imt_vkb imt_console +imt_create key_console imt_vkb0 imt_vkb +imt_create key_console imt_vkb1 imt_vkb +imt_create key_console imt_vkb2 imt_vkb +imt_create key_console imt_vkb3 imt_vkb +imt_create key_console imt_vkb4 imt_vkb +imt_create key_console imt_vkb5 imt_vkb +imt_create key_console imt_vkb6 imt_vkb +imt_create key_console imt_vkb7 imt_vkb +// in case the imts already existed. clearing the tables isn't strictly +// necessary, but it means that we're always starting from a clean slate +imt_clear imt_vkb imt_vkb0 imt_vkb1 imt_vkb2 imt_vkb3 imt_vkb4 imt_vkb5 imt_vkb6 imt_vkb7 +// because key_console already has (or should have) imt_console, creating +// imt_vkb won't automatically switch to it. +imt_keydest key_console imt_vkb + +// Due to the way the event system works, it's not possible to jump straight +// from imt_vkb to any of the odd numbered vkb imts +in_bind imt_vkb j_axis1 "+goto_vkb0" +in_bind imt_vkb j_axis2 "+goto_vkb2" +in_bind imt_vkb j_axis3 "+goto_vkb4" +in_bind imt_vkb j_axis4 "+goto_vkb6" + +// when j_axis1 is pressed, we are in vkb0 (N) and thus pressing j_axis2 +// while holding j_axis1 gives NE thus vkb1 and j_axis4 gives NW thus vkb7 +in_bind imt_vkb0 j_axis2 "+goto_vkb1" +in_bind imt_vkb0 j_axis4 "+goto_vkb7" + +// from vkb2 (E) vkb1 (NE) and vkb3 (SE) can be reached +in_bind imt_vkb2 j_axis1 "+goto_vkb1" +in_bind imt_vkb2 j_axis3 "+goto_vkb3" + +// from vkb4 (S) vkb3 (SE) and vkb5 (SW) can be reached +in_bind imt_vkb4 j_axis2 "+goto_vkb3" +in_bind imt_vkb4 j_axis4 "+goto_vkb5" + +// from vkb6 (W) vkb5 (SW) and vkb7 (NW) can be reached +in_bind imt_vkb6 j_axis1 "+goto_vkb7" +in_bind imt_vkb6 j_axis3 "+goto_vkb5" + +// Releasing j_axis1 while in vkb1 makes only j_axis2 active thus we return +// to vkb2. Releasing j_axis2 means only j_axis1 is active thus back to vkb0. +// The encoding in the name for goto_vkb1_2 means "we're in vkb1 but will +// return to vkb2" +in_bind imt_vkb1 j_axis1 "+goto_vkb1_2" +in_bind imt_vkb1 j_axis2 "+goto_vkb1_0" + +// from vkb3, can return to either vkb4 or vkb2 +in_bind imt_vkb3 j_axis2 "+goto_vkb3_4" +in_bind imt_vkb3 j_axis3 "+goto_vkb3_2" + +// from vkb5, can return to either vkb6 or vkb4 +in_bind imt_vkb5 j_axis4 "+goto_vkb5_4" +in_bind imt_vkb5 j_axis3 "+goto_vkb5_6" + +// from vkb7, can return to either vkb0 or vkb6 +in_bind imt_vkb7 j_axis4 "+goto_vkb7_0" +in_bind imt_vkb7 j_axis1 "+goto_vkb7_6" + +// the buttons on my gamepad are arranged: +// 2 b +// 1 4 -> a c +// 3 d +in_bind imt_vkb0 j_button1 in_type a +in_bind imt_vkb0 j_button2 in_type b +in_bind imt_vkb0 j_button4 in_type c +in_bind imt_vkb0 j_button3 in_type d + +// f +// e g +// h +in_bind imt_vkb1 j_button1 in_type e +in_bind imt_vkb1 j_button2 in_type f +in_bind imt_vkb1 j_button4 in_type g +in_bind imt_vkb1 j_button3 in_type h + +// j +// i k +// l +in_bind imt_vkb2 j_button1 in_type i +in_bind imt_vkb2 j_button2 in_type j +in_bind imt_vkb2 j_button4 in_type k +in_bind imt_vkb2 j_button3 in_type l + +// n +// m o +// p +in_bind imt_vkb3 j_button1 in_type m +in_bind imt_vkb3 j_button2 in_type n +in_bind imt_vkb3 j_button4 in_type o +in_bind imt_vkb3 j_button3 in_type p + +// r +// q s +// t +in_bind imt_vkb4 j_button1 in_type q +in_bind imt_vkb4 j_button2 in_type r +in_bind imt_vkb4 j_button4 in_type s +in_bind imt_vkb4 j_button3 in_type t + +// v +// u w +// x +in_bind imt_vkb5 j_button1 in_type u +in_bind imt_vkb5 j_button2 in_type v +in_bind imt_vkb5 j_button4 in_type w +in_bind imt_vkb5 j_button3 in_type x + +// z +// y , +// . +in_bind imt_vkb6 j_button1 in_type y +in_bind imt_vkb6 j_button2 in_type z +in_bind imt_vkb6 j_button4 in_type , +in_bind imt_vkb6 j_button3 in_type . + +// / +// : @ +// _ +in_bind imt_vkb7 j_button1 in_type : +in_bind imt_vkb7 j_button2 in_type / +in_bind imt_vkb7 j_button4 in_type @ +in_bind imt_vkb7 j_button3 in_type _ + +// some aliases to clear up the code (and, for now, display which vkb has +// been entered) +alias enter_vkb "imt_keydest key_console imt_vkb; echo vkb" +alias enter_vkb0 "imt_keydest key_console imt_vkb0; echo vkb0" +alias enter_vkb1 "imt_keydest key_console imt_vkb1; echo vkb1" +alias enter_vkb2 "imt_keydest key_console imt_vkb2; echo vkb2" +alias enter_vkb3 "imt_keydest key_console imt_vkb3; echo vkb3" +alias enter_vkb4 "imt_keydest key_console imt_vkb4; echo vkb4" +alias enter_vkb5 "imt_keydest key_console imt_vkb5; echo vkb5" +alias enter_vkb6 "imt_keydest key_console imt_vkb6; echo vkb6" +alias enter_vkb7 "imt_keydest key_console imt_vkb7; echo vkb7" + +// The real implementation of the compass rose. the + version of +// goto_vkbN_R is not expected to execute (as repeat is not yet supported), +// but just in case, make them an effective no-op. Probably don't really need +// to define them as everthing seems to work without devinitions for +// -goto_vkbN for odd N. +alias +goto_vkb0 enter_vkb0 +alias +goto_vkb1 enter_vkb1 +alias +goto_vkb1_0 enter_vkb1 +alias +goto_vkb1_2 enter_vkb1 +alias +goto_vkb2 enter_vkb2 +alias +goto_vkb3 enter_vkb3 +alias +goto_vkb3_2 enter_vkb3 +alias +goto_vkb3_4 enter_vkb3 +alias +goto_vkb4 enter_vkb4 +alias +goto_vkb5 enter_vkb5 +alias +goto_vkb5_4 enter_vkb5 +alias +goto_vkb5_6 enter_vkb5 +alias +goto_vkb6 enter_vkb6 +alias +goto_vkb7 enter_vkb7 +alias +goto_vkb7_4 enter_vkb7 +alias +goto_vkb7_6 enter_vkb7 + +alias -goto_vkb0 enter_vkb +alias -goto_vkb1_0 enter_vkb0 +alias -goto_vkb1_2 enter_vkb2 +alias -goto_vkb2 enter_vkb +alias -goto_vkb3_2 enter_vkb2 +alias -goto_vkb3_4 enter_vkb4 +alias -goto_vkb4 enter_vkb +alias -goto_vkb5_4 enter_vkb4 +alias -goto_vkb5_6 enter_vkb6 +alias -goto_vkb6 enter_vkb +alias -goto_vkb7_0 enter_vkb0 +alias -goto_vkb7_6 enter_vkb6