input: hacky way of handling multikey shortcuts

This commit is contained in:
im-tem
2025-07-01 17:45:04 +03:00
parent 34443ebf35
commit daefc91a72
2 changed files with 14 additions and 6 deletions

View File

@@ -109,9 +109,17 @@ input_held(Input* self, InputType type)
bool bool
input_release(Input* self, InputType type) input_release(Input* self, InputType type)
{ {
for (KeyType key : INPUT_KEYS[type]) for (size_t i = 0; i < INPUT_KEYS[type].size(); i++) {
if (!key_release(&self->keyboard, (key))) auto& key = INPUT_KEYS[type][i];
return false; //below is some hackery to ensure that multikey shortcuts work...
//ideally would split this into a separate function or rename this?
if (i != INPUT_KEYS[type].size()) {
if (!key_held(&self->keyboard, key)) return false;
}
// last key in the shortcut chain, so in a mod1-mod2-...-key it won't be a mod key
// todo: introduce a list of modifer keys as a more reliable solution
else if (!key_release(&self->keyboard, (key))) return false;
};
return true; return true;
} }

View File

@@ -273,13 +273,13 @@ const std::vector<KeyType> INPUT_KEYS[INPUT_COUNT] =
{ KEY_2 }, { KEY_2 },
{ KEY_Z }, { KEY_Z },
{ KEY_Y }, { KEY_Y },
{ KEY_LCTRL } { KEY_LCTRL , KEY_S}
}; };
struct Keyboard struct Keyboard
{ {
bool current[KEY_COUNT]; bool current[KEY_COUNT] = { 0 };
bool previous[KEY_COUNT]; bool previous[KEY_COUNT] = { 0 };
}; };
struct Mouse struct Mouse