Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/keyboard.cc')
-rw-r--r--src/client/keyboard.cc143
1 files changed, 136 insertions, 7 deletions
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)