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
input_release(Input* self, InputType type)
{
for (KeyType key : INPUT_KEYS[type])
if (!key_release(&self->keyboard, (key)))
return false;
for (size_t i = 0; i < INPUT_KEYS[type].size(); i++) {
auto& key = INPUT_KEYS[type][i];
//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;
}

View File

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