diff --git a/src/gba/input.c b/src/gba/input.c index 65cf7a650..14372bb68 100644 --- a/src/gba/input.c +++ b/src/gba/input.c @@ -348,6 +348,20 @@ enum GBAKey GBAInputMapKey(const struct GBAInputMap* map, uint32_t type, int key return GBA_KEY_NONE; } +int GBAInputMapKeyBits(const struct GBAInputMap* map, uint32_t type, uint32_t bits, unsigned offset) { + int keys = 0; + for (; bits; bits >>= 1, ++offset) { + if (bits & 1) { + enum GBAKey key = GBAInputMapKey(map, type, offset); + if (key == GBA_KEY_NONE) { + continue; + } + keys |= 1 << key; + } + } + return keys; +} + void GBAInputBindKey(struct GBAInputMap* map, uint32_t type, int key, enum GBAKey input) { struct GBAInputMapImpl* impl = _guaranteeMap(map, type); GBAInputUnbindKey(map, type, input); diff --git a/src/gba/input.h b/src/gba/input.h index 8610b6f24..04daba364 100644 --- a/src/gba/input.h +++ b/src/gba/input.h @@ -30,6 +30,7 @@ void GBAInputMapInit(struct GBAInputMap*); void GBAInputMapDeinit(struct GBAInputMap*); enum GBAKey GBAInputMapKey(const struct GBAInputMap*, uint32_t type, int key); +int GBAInputMapKeyBits(const struct GBAInputMap* map, uint32_t type, uint32_t bits, unsigned offset); void GBAInputBindKey(struct GBAInputMap*, uint32_t type, int key, enum GBAKey input); void GBAInputUnbindKey(struct GBAInputMap*, uint32_t type, enum GBAKey input); int GBAInputQueryBinding(const struct GBAInputMap*, uint32_t type, enum GBAKey input);