From 77d877160d5c3b8a7e9c30e81bd6ca1f4060b5f9 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 8 Feb 2015 21:51:53 +0000 Subject: Added a menu to configure key controls. --- src/client/keyboard.cc | 143 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 136 insertions(+), 7 deletions(-) (limited to 'src/client/keyboard.cc') diff --git a/src/client/keyboard.cc b/src/client/keyboard.cc index bb3b20d..75cc5cb 100644 --- a/src/client/keyboard.cc +++ b/src/client/keyboard.cc @@ -152,11 +152,12 @@ Keyboard::Keyboard() add_key(SDL_SCANCODE_KP_ENTER, "kpenter", '\n', "ui_chat"); add_key(SDL_SCANCODE_KP_EQUALS, "kpequal", '='); add_key(SDL_SCANCODE_KP_LESS, "kpless", '<'); - - add_key(SDL_SCANCODE_UP, "up", 0, "+camup"); - add_key(SDL_SCANCODE_DOWN, "down", 0, "+camdown"); - add_key(SDL_SCANCODE_RIGHT, "right", 0, "+camright"); - add_key(SDL_SCANCODE_LEFT, "left", 0, "+camleft"); + + add_key(SDL_SCANCODE_LEFT, "left", 0, "+ lookleft"); + add_key(SDL_SCANCODE_RIGHT, "right", 0, "+lookright"); + add_key(SDL_SCANCODE_UP, "up", 0, "+lookup"); + add_key(SDL_SCANCODE_DOWN, "down", 0, "+lookdown"); + add_key(SDL_SCANCODE_INSERT, "insert"); add_key(SDL_SCANCODE_HOME, "home"); @@ -234,6 +235,74 @@ Keyboard::Keyboard() add_key(1037, "joy13"); add_key(1038, "joy14"); add_key(1039, "joy15"); + + // ------------------ CONTROLS + add_control("Toggle mouse control", "ui_control", "space"); + add_control("Mouse control", "+control", "mouse1"); + + add_control("Turn left", "+left", "kp4"); + add_control("Turn right", "+right", "kp6"); + add_control("Turn up", "+up", "kp8"); + add_control("Turn down", "+down", "kp2"); + + add_control("Strafe left", "+strafeleft", "a"); + add_control("Strafe right", "+straferight", "d"); + add_control("Strafe up", "+strafeup", "r"); + add_control("Strafe down", "+strafedown", "f"); + + add_control("Roll left", "+rollleft", "q"); + add_control("Roll right", "+rollright", "e"); + + add_control("Decrease thruster", "+thrustdown", "kpmin"); + add_control("Increase thruster", "+thrustup", "kpplus"); + + add_control("Aferburner", "+afterburner", "w"); + add_control("Reverse engine", "+reverse", "s"); + + add_control("Impulse engine", "impulse", "tab"); + + add_control("Fire weapons", "+fire", "mouse2"); + + add_control("Beam cargo", "beam", "b"); + + add_control("Open inventory", "ui_inventory", "i"); + add_control("Open map", "ui_map", "m"); + add_control("Open chat", "ui_chat", "enter"); + add_control("Open talk", "ui_chatbar", "t"); + + add_control("Target next object", "target_next", "n"); + add_control("Target previous object", "target_prev", "shift+n"); + add_control("Target none", "target_none", "ctrl+n"); + add_control("Target next ship", "target_controlable_next", "x"); + add_control("Target previous ship", "target_controlable_prev", "shift+x"); + add_control("Target center", "target_center", "ctrl+x"); + + add_control("Camera next", "view_next", "v"); + add_control("Camera previous", "view_prev", "shift+v"); + add_control("Camera zoom in", "+zoomin", "kpdiv"); + add_control("Camera zoom out", "+zoomout", "kpmul"); + + add_control("Camera turn left", "+lookleft", "left"); + add_control("Camera turn right", "+lookright", "right"); + add_control("Camera turn up", "+lookup", "up"); + add_control("Camera turn down", "+lookdown", "down"); + + add_control("Freelook", "+freelook", "lshift"); + + add_control("Free flight", "freeflight", "f1"); + add_control("Autopilot goto", "@goto", "f2"); + add_control("Autopilot dock", "@dock", "f3"); + add_control("Autopilot formation", "@formation", "f4"); + + add_control("Quicksave", "savegame", "f5"); + add_control("Quickload", "loadgame", "f9"); + + add_control("Wingmen toggle recall", "wingmen recall", "shift+c"); + add_control("Wingmen toggle combat", "wingmen combat", "shift+b"); + + add_control("Screenshot", "screenshot", "print"); + add_control("Toggle fullscreen", "toggle r_fullscreen", "alt+enter"); + add_control("Toggle console", "+console", "`"); } Keyboard::~Keyboard() @@ -251,6 +320,13 @@ Keyboard::~Keyboard() delete(*ait); } _actions.clear(); + + // clear control list + for (Controls::iterator cit = _controls.begin(); cit != _controls.end(); ++cit) + { + delete(*cit); + } + _controls.clear(); } void Keyboard::save_binds() const @@ -294,7 +370,7 @@ void Keyboard::save_binds() const ofs.close(); } -void Keyboard::load_binds() const +void Keyboard::load_binds() { std::string filename(filesystem::writedir()); filename.append("binds.cfg"); @@ -313,6 +389,53 @@ void Keyboard::load_binds() const core::CommandBuffer::exec(line); } } + + load_controls(); +} + +void Keyboard::load_controls() +{ + for (Controls::iterator cit = _controls.begin(); cit != _controls.end(); ++cit) + { + Control *control = *cit; + bool found = false; + for (Keys::iterator kit = _keys.begin(); kit != _keys.end();) + { + Key *key = (*kit).second; + if (control->command().compare(key->bind(Key::None)) == 0) + { + control->set_keyname(key->name()); + kit = _keys.end(); + found = true; + } + else if (control->command().compare(key->bind(Key::Shift)) == 0) + { + control->set_keyname("shift+" + key->name()); + kit = _keys.end(); + found = true; + } + else if (control->command().compare(key->bind(Key::Ctrl)) == 0) + { + control->set_keyname("ctrl+" + key->name()); + kit = _keys.end(); + found = true; + } + else if (control->command().compare(key->bind(Key::Alt)) == 0) + { + control->set_keyname("alt+" + key->name()); + kit = _keys.end(); + found = true; + } + else + { + ++kit; + } + } + if (!found) + { + control->set_keyname(""); + } + } } void Keyboard::reset() @@ -506,7 +629,6 @@ Key * Keyboard::add_key(const unsigned int scancode, const char *name, const cha std::string bindstr(bind); this->bind(key->name(), bindstr); } - return key; } @@ -517,6 +639,13 @@ Action * Keyboard::add_action(const char *name, Action::Identifier id, const cha return action; } +Control *Keyboard::add_control(const char *name, const char *command, const char *keyname) +{ + Control *control = new Control(name, command, keyname); + _controls.push_back(control); + return control; +} + void Keyboard::list_actions() const { for (Actions::const_iterator it = _actions.begin(); it != _actions.end(); ++it) -- cgit v1.2.3