|
5 | 5 | */ |
6 | 6 |
|
7 | 7 | #include "Common/Cpp/Json/JsonObject.h" |
8 | | -#include "NintendoSwitch_ProControllerState.h" |
| 8 | +#include "Common/Cpp/Options/SimpleIntegerOption.h" |
| 9 | +#include "Common/Cpp/Options/EnumDropdownOption.h" |
| 10 | +#include "Controllers/ControllerStateTable.h" |
9 | 11 | #include "NintendoSwitch_ProController.h" |
| 12 | +#include "NintendoSwitch_ProControllerState.h" |
10 | 13 |
|
11 | 14 | namespace PokemonAutomation{ |
12 | 15 | namespace NintendoSwitch{ |
@@ -58,45 +61,39 @@ bool ProControllerState::is_neutral() const{ |
58 | 61 | } |
59 | 62 |
|
60 | 63 |
|
61 | | -void ProControllerState::load_json(const JsonValue& json){ |
| 64 | +void ProControllerState::load_json(const JsonObject& json){ |
62 | 65 | clear(); |
63 | 66 |
|
64 | | - if (json.is_null()){ |
65 | | - return; |
66 | | - } |
67 | | - |
68 | | - const JsonObject& obj = json.to_object_throw(); |
69 | | - |
70 | 67 | // Backwards compatibility. |
71 | | - if (obj.get_boolean_default("is_neutral", false)){ |
| 68 | + if (json.get_boolean_default("is_neutral", false)){ |
72 | 69 | return; |
73 | 70 | } |
74 | 71 |
|
75 | 72 | { |
76 | 73 | std::string buttons_string; |
77 | | - if (obj.read_string(buttons_string, "buttons")){ |
| 74 | + if (json.read_string(buttons_string, "buttons")){ |
78 | 75 | buttons = string_to_button(buttons_string); |
79 | 76 | } |
80 | 77 | } |
81 | 78 | { |
82 | 79 | std::string dpad_string; |
83 | | - if (obj.read_string(dpad_string, "dpad")){ |
| 80 | + if (json.read_string(dpad_string, "dpad")){ |
84 | 81 | dpad = string_to_dpad(dpad_string); |
85 | 82 | } |
86 | 83 | } |
87 | 84 |
|
88 | 85 | // Backwards compatibility. |
89 | | - obj.read_integer(left_x, "left_x", 0, 255); |
90 | | - obj.read_integer(left_y, "left_y", 0, 255); |
91 | | - obj.read_integer(right_x, "right_x", 0, 255); |
92 | | - obj.read_integer(right_y, "right_y", 0, 255); |
93 | | - |
94 | | - obj.read_integer(left_x, "lx", 0, 255); |
95 | | - obj.read_integer(left_y, "ly", 0, 255); |
96 | | - obj.read_integer(right_x, "rx", 0, 255); |
97 | | - obj.read_integer(right_y, "ry", 0, 255); |
| 86 | + json.read_integer(left_x, "left_x", 0, 255); |
| 87 | + json.read_integer(left_y, "left_y", 0, 255); |
| 88 | + json.read_integer(right_x, "right_x", 0, 255); |
| 89 | + json.read_integer(right_y, "right_y", 0, 255); |
| 90 | + |
| 91 | + json.read_integer(left_x, "lx", 0, 255); |
| 92 | + json.read_integer(left_y, "ly", 0, 255); |
| 93 | + json.read_integer(right_x, "rx", 0, 255); |
| 94 | + json.read_integer(right_y, "ry", 0, 255); |
98 | 95 | } |
99 | | -JsonValue ProControllerState::to_json() const{ |
| 96 | +JsonObject ProControllerState::to_json() const{ |
100 | 97 | JsonObject obj; |
101 | 98 | if (buttons != BUTTON_NONE){ |
102 | 99 | obj["buttons"] = button_to_string(buttons); |
@@ -194,6 +191,74 @@ std::string ProControllerState::to_cpp(Milliseconds hold, Milliseconds release) |
194 | 191 |
|
195 | 192 |
|
196 | 193 |
|
| 194 | +#if 0 |
| 195 | + |
| 196 | + |
| 197 | +const EnumDropdownDatabase<DpadPosition>& DPAD_DATABASE(){ |
| 198 | + static EnumDropdownDatabase<DpadPosition> database{ |
| 199 | + {DpadPosition::DPAD_NONE, "none", "---"}, |
| 200 | + {DpadPosition::DPAD_UP, "up", "Up"}, |
| 201 | + {DpadPosition::DPAD_UP_RIGHT, "up-right", "Up+Right"}, |
| 202 | + {DpadPosition::DPAD_RIGHT, "right", "Right"}, |
| 203 | + {DpadPosition::DPAD_DOWN_RIGHT, "down-right", "Down+Right"}, |
| 204 | + {DpadPosition::DPAD_DOWN, "down", "Down"}, |
| 205 | + {DpadPosition::DPAD_DOWN_LEFT, "down-left", "Down+Left"}, |
| 206 | + {DpadPosition::DPAD_LEFT, "left", "Left"}, |
| 207 | + {DpadPosition::DPAD_UP_LEFT, "up-left", "Up+Left"}, |
| 208 | + }; |
| 209 | + return database; |
| 210 | +} |
| 211 | + |
| 212 | + |
| 213 | + |
| 214 | +class ProControllerStateRow : public ControllerStateRow{ |
| 215 | +public: |
| 216 | + ProControllerStateRow(EditableTableOption& parent_table) |
| 217 | + : ControllerStateRow(parent_table) |
| 218 | + , DPAD( |
| 219 | + DPAD_DATABASE(), |
| 220 | + LockMode::UNLOCK_WHILE_RUNNING, |
| 221 | + DpadPosition::DPAD_NONE |
| 222 | + ) |
| 223 | + , LEFT_JOYSTICK(LockMode::UNLOCK_WHILE_RUNNING, 128, 0, 255) |
| 224 | + { |
| 225 | + PA_ADD_OPTION(DPAD); |
| 226 | + PA_ADD_OPTION(LEFT_JOYSTICK); |
| 227 | + } |
| 228 | + |
| 229 | + virtual std::unique_ptr<EditableTableRow> clone() const override{ |
| 230 | + std::unique_ptr<ProControllerStateRow> ret(new ProControllerStateRow(parent())); |
| 231 | + ret->m_state = m_state; |
| 232 | + return ret; |
| 233 | + } |
| 234 | + |
| 235 | + virtual void load_json(const JsonValue& json) override{ |
| 236 | + const JsonObject& obj = json.to_object_throw(); |
| 237 | + m_milliseconds = Milliseconds(obj.get_integer_throw("duration_in_ms")); |
| 238 | + m_state.load_json(obj); |
| 239 | + } |
| 240 | + virtual JsonValue to_json() const override{ |
| 241 | + JsonObject json = m_state.to_json(); |
| 242 | + json["duration_in_ms"] = m_milliseconds.count(); |
| 243 | + return json; |
| 244 | + } |
| 245 | + |
| 246 | + virtual const ControllerState& get_state() const override{ |
| 247 | + return m_state; |
| 248 | + } |
| 249 | + |
| 250 | +private: |
| 251 | + ProControllerState m_state; |
| 252 | + |
| 253 | + EnumDropdownCell<DpadPosition> DPAD; |
| 254 | + SimpleIntegerCell<uint8_t> LEFT_JOYSTICK; |
| 255 | +}; |
| 256 | + |
| 257 | + |
| 258 | + |
| 259 | +#endif |
| 260 | + |
| 261 | + |
197 | 262 |
|
198 | 263 |
|
199 | 264 |
|
|
0 commit comments