// Copyright 2014 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include #include #include #include "common/common_types.h" #include "common/string_util.h" namespace Settings { enum class LayoutOption { Default, SingleScreen, LargeScreen, Custom, }; namespace NativeInput { enum Values { // directly mapped keys A, B, X, Y, L, R, ZL, ZR, START, SELECT, HOME, DUP, DDOWN, DLEFT, DRIGHT, CUP, CDOWN, CLEFT, CRIGHT, // indirectly mapped keys CIRCLE_UP, CIRCLE_DOWN, CIRCLE_LEFT, CIRCLE_RIGHT, NUM_INPUTS }; static const std::array Mapping = { { // directly mapped keys "pad_a", "pad_b", "pad_x", "pad_y", "pad_l", "pad_r", "pad_zl", "pad_zr", "pad_start", "pad_select", "pad_home", "pad_dup", "pad_ddown", "pad_dleft", "pad_dright", "pad_cup", "pad_cdown", "pad_cleft", "pad_cright", // indirectly mapped keys "pad_circle_up", "pad_circle_down", "pad_circle_left", "pad_circle_right" } }; static const std::array All = { { A, B, X, Y, L, R, ZL, ZR, START, SELECT, HOME, DUP, DDOWN, DLEFT, DRIGHT, CUP, CDOWN, CLEFT, CRIGHT, CIRCLE_UP, CIRCLE_DOWN, CIRCLE_LEFT, CIRCLE_RIGHT } }; } enum class DeviceFramework { SDL }; enum class Device { Keyboard, Gamepad }; struct InputDeviceMapping { DeviceFramework framework = DeviceFramework::SDL; int number = 0; Device device = Device::Keyboard; int key = -1; InputDeviceMapping() = default; explicit InputDeviceMapping(int key_) { key = key_; } explicit InputDeviceMapping(const std::string& input) { std::vector parts; Common::SplitString(input, '/', parts); if (parts.size() != 4) return; if (parts[0] == "SDL") framework = DeviceFramework::SDL; number = std::stoi(parts[1]); if (parts[2] == "Keyboard") device = Device::Keyboard; else if (parts[2] == "Gamepad") device = Device::Gamepad; Common::TryParse(parts[3], &key); } bool operator==(const InputDeviceMapping& rhs) const { return std::tie(device, framework, number) == std::tie(rhs.device, rhs.framework, rhs.number); } bool operator==(const std::string& rhs) const { return ToString() == rhs; } bool operator<(const InputDeviceMapping& rhs) const { return ToString() < rhs.ToString(); } void InitKey() { } std::string ToString() const { std::string result; if (framework == DeviceFramework::SDL) result = "SDL"; result += "/"; result += std::to_string(this->number); result += "/"; if (device == Device::Keyboard) result += "Keyboard"; else if (device == Device::Gamepad) result += "Gamepad"; result += "/"; result += key; return result; } }; struct Values { // CheckNew3DS bool is_new_3ds; // Controls std::array input_mappings; InputDeviceMapping pad_circle_modifier; float pad_circle_modifier_scale; float circle_pad_deadzone = 30; float c_stick_deadzone = 30; // Core bool use_cpu_jit; // Data Storage bool use_virtual_sd; // System Region int region_value; // Renderer bool use_hw_renderer; bool use_shader_jit; bool use_scaled_resolution; bool use_vsync; bool toggle_framelimit; LayoutOption layout_option; bool swap_screen; float bg_red; float bg_green; float bg_blue; std::string log_filter; // Audio std::string sink_id; bool enable_audio_stretching; // Debugging bool use_gdbstub; u16 gdbstub_port; }; extern Values values; void Apply(); }