diff options
| author | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2022-06-12 22:34:23 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2022-06-12 23:18:57 +0200 |
| commit | 5226dc466354cd15dd50b3c11660db7cb38eabed (patch) | |
| tree | a885b4af03b88cb08709f87a1bb643241c505616 /src/peripheral/inc | |
| parent | b2af4c6bccc4263e5c7aa96efd0f94e1b7a38231 (diff) | |
| download | jancity-5226dc466354cd15dd50b3c11660db7cb38eabed.tar.gz | |
Split peripheral-related logic into its own component
This has several advantages:
- `camera` no longer needs to define public functions for each
peripheral type.
- Peripheral-related is now no longer tighly coupled to human_player,
so peripheral logic can be reused elsewhere e.g.: on menus.
- Makes camera_update_touch consistent compared to equivalent functions,
since now `pan` has now been moved to `camera` (as it should be).
Diffstat (limited to 'src/peripheral/inc')
| -rw-r--r-- | src/peripheral/inc/peripheral.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/peripheral/inc/peripheral.h b/src/peripheral/inc/peripheral.h new file mode 100644 index 0000000..c405c3c --- /dev/null +++ b/src/peripheral/inc/peripheral.h @@ -0,0 +1,64 @@ +#ifndef PERIPHERAL_H +#define PERIPHERAL_H + +#include <pad.h> +#include <keyboard.h> +#include <mouse.h> +#include <util.h> +#include <stddef.h> +#include <stdbool.h> + +#ifdef __cplusplus +extern "C" +{ +#endif + +enum peripheral_type +{ + PERIPHERAL_TYPE_PAD, + PERIPHERAL_TYPE_TOUCH, + PERIPHERAL_TYPE_KEYBOARD_MOUSE +}; + +union peripheral +{ + struct peripheral_common + { + enum peripheral_type type; + } common; + + struct peripheral_pad + { + struct peripheral_common common; + struct pad pad; + } pad; + + struct peripheral_kbm + { + struct peripheral_common common; + struct mouse mouse; + struct keyboard keyboard; + bool long_press; + unsigned int lp_t; + } kbm; +}; + +struct peripheral_cfg +{ + enum peripheral_type type; + int padn; +}; + +UTIL_STATIC_ASSERT(!offsetof(struct peripheral_pad, common), + "unexpected offsetof for struct peripheral_pad"); +UTIL_STATIC_ASSERT(!offsetof(struct peripheral_kbm, common), + "unexpected offsetof for struct peripheral_kbm"); + +void peripheral_init(const struct peripheral_cfg *cfg, union peripheral *p); +void peripheral_update(union peripheral *p); + +#ifdef __cplusplus +} +#endif + +#endif /* PERIPHERAL_H */ |
