Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2015-01-03 16:54:18 +0000
committerStijn Buys <ingar@osirion.org>2015-01-03 16:54:18 +0000
commit85671408eed36060f5ff4799f2ee153d66e16282 (patch)
treef76d052c751507953996cf32f578b6d15ca172f5 /src/client
parent87db4deac81853737d7fb7c44a4e5eaecc3bc2bd (diff)
Minor cleanup of client::Action and client::Keyboard code,
added Action::FreeLook defintions.
Diffstat (limited to 'src/client')
-rw-r--r--src/client/action.cc23
-rw-r--r--src/client/action.h80
-rw-r--r--src/client/input.cc18
-rw-r--r--src/client/keyboard.cc150
-rw-r--r--src/client/keyboard.h50
5 files changed, 187 insertions, 134 deletions
diff --git a/src/client/action.cc b/src/client/action.cc
index 7c7a34c..2f54dc3 100644
--- a/src/client/action.cc
+++ b/src/client/action.cc
@@ -9,23 +9,28 @@
namespace client
{
-Action::Action(const char *name, Identifier action, const char *info)
+Action::Action(const char *name, Identifier action, const char *description)
{
- action_name.assign(name);
- action_id = action;
+ _name.assign(name);
+ _id = action;
- set_info(info);
+ set_description(description);
}
Action::~Action()
{
}
-void Action::set_info(const char *info)
+void Action::set_description(const char *description)
{
- if (info)
- action_info.assign(info);
+ if (description)
+ {
+ _description.assign(description);
+ }
else
- action_info.clear();
-}
+ {
+ _description.clear();
+ }
}
+
+} // namespace client
diff --git a/src/client/action.h b/src/client/action.h
index 00ef210..0a7e247 100644
--- a/src/client/action.h
+++ b/src/client/action.h
@@ -20,48 +20,70 @@ namespace client
class Action
{
public:
- /// actions
- enum Identifier {None = 0,
- Console,
- Left, Right, Up, Down,
- RollLeft, RollRight,
- StrafeUp, StrafeDown,
- StrafeLeft, StrafeRight,
- ThrustUp, ThrustDown,
- Afterburner, Reverse,
- Control,
- CamLeft, CamRight, CamUp, CamDown,
- ZoomIn, ZoomOut,
- Fire
+ /**
+ * @brief type definition for the action type identifier
+ * */
+ enum Identifier
+ {
+ None = 0,
+ Console,
+ Left, Right, Up, Down,
+ RollLeft, RollRight,
+ StrafeUp, StrafeDown,
+ StrafeLeft, StrafeRight,
+ ThrustUp, ThrustDown,
+ Afterburner, Reverse,
+ Control,
+ CamLeft, CamRight, CamUp, CamDown,
+ ZoomIn, ZoomOut,
+ Fire,
+ FreeLook
};
- /// define a new action
- Action(const char *name, Identifier action, const char *info = 0);
+ /**
+ * @brief define a new action
+ * */
+ Action(const char *name, Identifier action, const char *description = 0);
+
+ /**
+ * @brief default destructor
+ * */
~Action();
- /// name
- inline std::string const & name() const {
- return action_name;
+ /**
+ * @brief action name
+ * */
+ inline std::string const & name() const
+ {
+ return _name;
}
- /// identifier
- inline Identifier id() const {
- return action_id;
+ /**
+ * @brief action type identifier
+ * */
+ inline Identifier id() const
+ {
+ return _id;
}
- /// text description
- inline std::string const & info() const {
- return action_info;
+ /**
+ * @brief text description
+ * */
+ inline std::string const & description() const
+ {
+ return _description;
}
- /// set info
- void set_info(const char *info);
+ /**
+ * @brief set the action's description
+ * */
+ void set_description(const char *description);
private:
- std::string action_name;
- std::string action_info;
- Identifier action_id;
+ std::string _name;
+ std::string _description;
+ Identifier _id;
};
} // namespace client
diff --git a/src/client/input.cc b/src/client/input.cc
index fed76c9..ab0c847 100644
--- a/src/client/input.cc
+++ b/src/client/input.cc
@@ -434,6 +434,9 @@ void action_press(Key *key)
case Action::ZoomOut:
render::Camera::set_zoom(+0.1f);
break;
+ case Action::FreeLook:
+ // TODO freelook
+ break;
/* -- fire control -------------------------------- */
@@ -537,6 +540,10 @@ void action_release(Key *key)
break;
case Action::ZoomOut:
break;
+ case Action::FreeLook:
+ // TODO freelook
+ break;
+
/* -- fire control -------------------------------- */
@@ -716,14 +723,7 @@ void reset()
mouse_control_override_time = 0;
targets::reset();
- for (Keyboard::iterator it = keyboard->begin(); it != keyboard->end(); it++) {
- Key *key = (*it).second;
- if (key) {
- key->key_pressed = 0;
- key->key_lastpressed = 0;
- key->key_waspressed = 0;
- }
- }
+ keyboard->reset();
last_key = 0;
mouse_lastmoved = 0;
@@ -852,7 +852,7 @@ void frame()
repeat /= 1000.0f;
delay /= 1000.0f;
- for (Keyboard::iterator it = keyboard->begin(); it != keyboard->end(); it++) {
+ for (Keyboard::Keys::iterator it = keyboard->keys().begin(); it != keyboard->keys().end(); it++) {
key = (*it).second;
if (key && (key->sym() < 512) && key->pressed()) {
if ((key->pressed() + delay < core::application()->time()) && (key->lastpressed() + repeat < core::application()->time())) {
diff --git a/src/client/keyboard.cc b/src/client/keyboard.cc
index c762a29..70bca9e 100644
--- a/src/client/keyboard.cc
+++ b/src/client/keyboard.cc
@@ -25,9 +25,6 @@ http://docs.mandragor.org/files/Common_libs_documentation/SDL/SDL_Documentation_
Keyboard::Keyboard()
{
- numlock = false;
- capslock = false;
-
// ------------------ ACTIONS
// FIXME actions should be state keys and not use key repeat
@@ -63,6 +60,8 @@ Keyboard::Keyboard()
add_action("+control", Action::Control, "enable mouse control while pressed");
add_action("+fire", Action::Fire, "fire weapons");
+
+ add_action("+freelook", Action::FreeLook, "free look");
// ------------------ KEYS
Key *key = 0;
@@ -254,17 +253,21 @@ Keyboard::Keyboard()
Keyboard::~Keyboard()
{
// clear key map
- for (iterator it = begin(); it != end(); it++)
+ for (Keys::iterator it = _keys.begin(); it != _keys.end(); ++it)
+ {
delete(*it).second;
- keys.clear();
+ }
+ _keys.clear();
// clear action list
- for (std::list<Action *>::iterator ait = actions.begin(); ait != actions.end(); ait++)
+ for (Actions::iterator ait = _actions.begin(); ait != _actions.end(); ++ait)
+ {
delete(*ait);
- actions.clear();
+ }
+ _actions.clear();
}
-void Keyboard::save_binds()
+void Keyboard::save_binds() const
{
std::string filename(filesystem::writedir());
filename.append("binds.cfg");
@@ -281,8 +284,8 @@ void Keyboard::save_binds()
ofs << "# this file is automaticly generated" << std::endl;
ofs << std::endl;
- iterator it;
- for (it = begin(); it != end(); it++) {
+ for (Keys::const_iterator it = _keys.begin(); it != _keys.end(); ++it)
+ {
Key *key = (*it).second;
if (key->bind(Key::None).size()) {
ofs << "bind " << key->name() << " \"" << key->bind(Key::None) << '\"' << std::endl;
@@ -305,7 +308,7 @@ void Keyboard::save_binds()
ofs.close();
}
-void Keyboard::load_binds()
+void Keyboard::load_binds() const
{
std::string filename(filesystem::writedir());
filename.append("binds.cfg");
@@ -326,6 +329,19 @@ void Keyboard::load_binds()
}
}
+void Keyboard::reset()
+{
+ for (Keys::iterator it = _keys.begin(); it != _keys.end(); ++it)
+ {
+ Key *key = (*it).second;
+ if (key) {
+ key->key_pressed = 0;
+ key->key_lastpressed = 0;
+ key->key_waspressed = 0;
+ }
+ }
+}
+
Key * Keyboard::release(unsigned int sym)
{
Key *key = find(sym);
@@ -363,8 +379,10 @@ Key * Keyboard::press(Key *key)
Key *Keyboard::find(std::string const & name)
{
Key *key = 0;
- for (iterator it = begin(); it != end() && !key; it++) {
- if ((*it).second->name().compare(name) == 0) {
+ for (Keys::iterator it = _keys.begin(); it != _keys.end(); ++it)
+ {
+ if ((*it).second->name().compare(name) == 0)
+ {
key = (*it).second;
}
}
@@ -373,11 +391,15 @@ Key *Keyboard::find(std::string const & name)
Key *Keyboard::find(unsigned int keysym)
{
- iterator it = keys.find(keysym);
- if (it == end())
+ Keys::iterator it = _keys.find(keysym);
+ if (it == _keys.end())
+ {
return 0;
+ }
else
+ {
return (*it).second;
+ }
}
void Keyboard::bind(std::string const &name, const std::string str)
@@ -411,7 +433,7 @@ void Keyboard::bind(std::string const &name, const std::string str)
// assign new bind of requested
if (str.size()) {
Action *action = 0;
- for (std::list<Action *>::iterator it = actions.begin(); it != actions.end(); it++) {
+ for (Actions::iterator it = _actions.begin(); it != _actions.end(); ++it) {
if ((*it)->name().compare(str) == 0) {
action = (*it);
}
@@ -482,7 +504,8 @@ void Keyboard::unbind(std::string const &name)
void Keyboard::unbindall()
{
- for (iterator it = begin(); it != end(); it++) {
+ for (Keys::iterator it = _keys.begin(); it != _keys.end(); ++it)
+ {
Key *key = (*it).second;
key->clear();
}
@@ -490,56 +513,64 @@ void Keyboard::unbindall()
Key * Keyboard::add_key(const char *name, const unsigned int keysym, const char ascii, const char *bind)
{
- Key *newkey = new Key(name, keysym, ascii);
- keys[keysym] = newkey;
- if (bind) {
+ Key *key = new Key(name, keysym, ascii);
+ _keys[keysym] = key;
+ if (bind)
+ {
std::string bindstr(bind);
- this->bind(newkey->name(), bindstr);
+ this->bind(key->name(), bindstr);
}
- return newkey;
+ return key;
}
-Action * Keyboard::add_action(const char *name, Action::Identifier action, const char *info)
+Action * Keyboard::add_action(const char *name, Action::Identifier id, const char *description)
{
- Action *newaction = new Action(name, action, info);
- actions.push_back(newaction);
- return newaction;
+ Action *action = new Action(name, id, description);
+ _actions.push_back(action);
+ return action;
}
-void Keyboard::list_actions()
+void Keyboard::list_actions() const
{
- for (std::list<Action *>::iterator it = actions.begin(); it != actions.end(); it++) {
- con_print << " " << (*it)->name() << " " << (*it)->info() << std::endl;
+ for (Actions::const_iterator it = _actions.begin(); it != _actions.end(); ++it)
+ {
+ con_print << " " << (*it)->name() << " " << (*it)->description() << std::endl;
}
- con_print << actions.size() << " registered actions" << std::endl;
+ con_print << _actions.size() << " registered actions" << std::endl;
}
-void Keyboard::list_keys()
+void Keyboard::list_keys() const
{
- for (iterator it = begin(); it != end(); it++) {
+ for (Keys::const_iterator it = _keys.begin(); it != _keys.end(); ++it)
+ {
con_print << " " << aux::pad_left((*it).second->name(), 6) << " " << (*it).second->bind(Key::None) << std::endl;
}
- con_print << keys.size() << " registered keys" << std::endl;
+ con_print << _keys.size() << " registered keys" << std::endl;
}
-void Keyboard::list_binds()
+void Keyboard::list_binds() const
{
size_t n = 0;
- for (iterator it = begin(); it != end(); it++) {
- if ((*it).second->bind(Key::None).size()) {
+ for (Keys::const_iterator it = _keys.begin(); it != _keys.end(); ++it)
+ {
+ if ((*it).second->bind(Key::None).size())
+ {
con_print << " " << aux::pad_right((*it).second->name(), 6) << " " << (*it).second->bind(Key::None) << std::endl;
n++;
}
- if ((*it).second->bind(Key::Shift).size()) {
+ if ((*it).second->bind(Key::Shift).size())
+ {
con_print << " shift+" << aux::pad_right((*it).second->name(), 6) << " " << (*it).second->bind(Key::Shift) << std::endl;
n++;
}
- if ((*it).second->bind(Key::Ctrl).size()) {
+ if ((*it).second->bind(Key::Ctrl).size())
+ {
con_print << " ctrl+" << aux::pad_right((*it).second->name(), 6) << " " << (*it).second->bind(Key::Ctrl) << std::endl;
n++;
}
- if ((*it).second->bind(Key::Alt).size()) {
+ if ((*it).second->bind(Key::Alt).size())
+ {
con_print << " alt+" << aux::pad_right((*it).second->name(), 6) << " " << (*it).second->bind(Key::Alt) << std::endl;
n++;
}
@@ -548,13 +579,15 @@ void Keyboard::list_binds()
con_print << n << " registered binds" << std::endl;
}
-unsigned int Keyboard::translate_keysym(int keysym, int modifier)
+unsigned int Keyboard::translate_keysym(const int keysym, const int modifiers)
{
bool shift = false;
// keypad keys
- if (modifier & KMOD_NUM) {
- switch (keysym) {
+ if (modifiers & KMOD_NUM)
+ {
+ switch (keysym)
+ {
case SDLK_KP0:
return '0';
break;
@@ -589,8 +622,11 @@ unsigned int Keyboard::translate_keysym(int keysym, int modifier)
return '.';
break;
}
- } else {
- switch (keysym) {
+ }
+ else
+ {
+ switch (keysym)
+ {
case SDLK_KP0:
return SDLK_INSERT;
break;
@@ -625,7 +661,8 @@ unsigned int Keyboard::translate_keysym(int keysym, int modifier)
}
// special keys
- switch (keysym) {
+ switch (keysym)
+ {
case SDLK_ESCAPE:
return SDLK_ESCAPE;
break;
@@ -650,16 +687,21 @@ unsigned int Keyboard::translate_keysym(int keysym, int modifier)
}
// caps lock
- if (modifier & KMOD_CAPS)
+ if (modifiers & KMOD_CAPS)
+ {
shift = true;
+ }
// left/right shift
- if ((KMOD_LSHIFT + KMOD_RSHIFT) & modifier) {
+ if ((KMOD_LSHIFT + KMOD_RSHIFT) & modifiers)
+ {
shift = !shift;
}
- if (shift) {
- if ((keysym >= 'a' && keysym <= 'z')) {
+ if (shift)
+ {
+ if ((keysym >= 'a' && keysym <= 'z'))
+ {
return keysym + 'A' - 'a';
}
@@ -736,14 +778,4 @@ unsigned int Keyboard::translate_keysym(int keysym, int modifier)
return keysym;
}
-/*
-void setkeyboardmode(bool input)
-{
- if(input)
- SDL_EnableKeyRepeat(250, SDL_DEFAULT_REPEAT_INTERVAL);
- else
- SDL_EnableKeyRepeat(10, SDL_DEFAULT_REPEAT_INTERVAL);
-
-}
-*/
} // namespace client
diff --git a/src/client/keyboard.h b/src/client/keyboard.h
index f533838..0742b9c 100644
--- a/src/client/keyboard.h
+++ b/src/client/keyboard.h
@@ -21,7 +21,11 @@ namespace client
class Keyboard
{
-public:
+public:
+ typedef std::map<unsigned int, Key *> Keys;
+
+ typedef std::list<Action *> Actions;
+
Keyboard();
~Keyboard();
@@ -39,21 +43,24 @@ public:
/// celar all key binds
void unbindall();
+
+ /// reset key states
+ void reset();
/// list keyboard key names
- void list_keys();
+ void list_keys() const;
/// list actions
- void list_actions();
+ void list_actions() const;
/// list keyboard binds
- void list_binds();
+ void list_binds() const;
/// load keyboard binds
- void load_binds();
+ void load_binds() const;
/// save keyboard binds
- void save_binds();
+ void save_binds() const;
/// a key has been pressed
Key *press(unsigned int sym);
@@ -64,36 +71,23 @@ public:
/// a key has been pressed
Key *release(unsigned int sym);
- typedef std::map<unsigned int, Key *>::iterator iterator;
-
- inline iterator begin() {
- return keys.begin();
- }
-
- inline iterator end() {
- return keys.end();
- }
-
/// convert SDL_keysym to a keystroke
- static unsigned int translate_keysym(int keysym, int modifier);
+ static unsigned int translate_keysym(const int keysym, const int modifiers);
+
+ inline Keys & keys()
+ {
+ return _keys;
+ }
private:
Key *add_key(const char *name, const unsigned int keysym, const char ascii = 0, const char *bind = 0);
- Action *add_action(const char *name, Action::Identifier action, const char *info = 0);
+ Action *add_action(const char *name, Action::Identifier id, const char *description = 0);
- std::map<unsigned int, Key *> keys;
- std::list<Action *> actions;
-
- bool numlock;
- bool capslock;
+ Keys _keys;
+ Actions _actions;
};
-/// set the keyboard input mode
-/** @param input true for console input, false for game input
- */
-//void setkeyboardmode(bool input);
-
}
#endif // __INCLUDED_CLIENT_KEYBOARD_H__