Implemented rebinding inputs from UI (controller only so far) and built minimal UI for doing so

This commit is contained in:
Mr-Wiseguy
2024-01-15 21:06:52 -05:00
parent 457bc878e9
commit 6ebc7256eb
7 changed files with 426 additions and 116 deletions
+21 -1
View File
@@ -6,11 +6,14 @@
#include <vector>
#include <type_traits>
#include <span>
#include <string>
namespace recomp {
struct InputField {
uint32_t device_type;
uint32_t input_type;
int32_t input_id;
std::string to_string() const;
auto operator<=>(const InputField& rhs) const = default;
};
void poll_inputs();
@@ -18,6 +21,16 @@ namespace recomp {
float get_input_analog(const std::span<const recomp::InputField> fields);
bool get_input_digital(const InputField& field);
bool get_input_digital(const std::span<const recomp::InputField> fields);
enum class InputDevice {
Controller,
Keyboard,
COUNT
};
void start_scanning_input(InputDevice device);
void finish_scanning_input(InputField scanned_field);
InputField get_scanned_input();
struct DefaultN64Mappings {
std::vector<InputField> a;
@@ -46,13 +59,20 @@ namespace recomp {
extern const DefaultN64Mappings default_n64_keyboard_mappings;
extern const DefaultN64Mappings default_n64_controller_mappings;
constexpr size_t bindings_per_input = 2;
// Loads the user's saved controller mapping if one exists, loads the default mappings if no saved mapping exists.
void init_control_mappings();
size_t get_num_inputs();
const std::vector<std::string>& get_input_names();
InputField& get_input_binding(size_t input_index, size_t binding_index, InputDevice device);
void set_input_binding(size_t input_index, size_t binding_index, InputDevice device, InputField value);
void get_n64_input(uint16_t* buttons_out, float* x_out, float* y_out);
void handle_events();
bool game_input_disabled();
bool all_input_disabled();
// TODO move these
void quicksave_save();