Skip to content

Commit 9735480

Browse files
committed
Upgrade TurboMacro to milliseconds. Make sure files are backwards compatible.
1 parent 3be200e commit 9735480

File tree

6 files changed

+146
-61
lines changed

6 files changed

+146
-61
lines changed

Common/Cpp/Options/TimeDurationOption.cpp

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ namespace PokemonAutomation{
2222
template <typename Type>
2323
struct TimeDurationCell<Type>::Data{
2424
const std::string m_units;
25+
const bool m_show_summary;
2526
const Type m_min_value;
2627
const Type m_max_value;
2728
const std::string m_default;
@@ -32,11 +33,12 @@ struct TimeDurationCell<Type>::Data{
3233
std::string m_error;
3334

3435
Data(
35-
std::string units,
36+
std::string units, bool show_summary,
3637
Type min_value, Type max_value,
3738
std::string default_value
3839
)
3940
: m_units(units)
41+
, m_show_summary(show_summary)
4042
, m_min_value(min_value)
4143
, m_max_value(max_value)
4244
, m_default(std::move(default_value))
@@ -122,15 +124,15 @@ template <typename Type>
122124
TimeDurationCell<Type>::~TimeDurationCell() = default;
123125
template <typename Type>
124126
TimeDurationCell<Type>::TimeDurationCell(
125-
std::string units,
127+
std::string units, bool show_summary,
126128
LockMode lock_while_running,
127129
Type min_value, Type max_value,
128130
std::string default_value
129131
)
130132
: ConfigOption(lock_while_running)
131133
, m_data(
132134
CONSTRUCT_TOKEN,
133-
std::move(units),
135+
std::move(units), show_summary,
134136
min_value, max_value,
135137
std::move(default_value)
136138
)
@@ -145,7 +147,7 @@ TimeDurationCell<Type>::TimeDurationCell(
145147
: ConfigOption(lock_while_running)
146148
, m_data(
147149
CONSTRUCT_TOKEN,
148-
std::move(units),
150+
std::move(units), true,
149151
Type(0), Type::max(),
150152
std::move(default_value)
151153
)
@@ -160,18 +162,38 @@ TimeDurationCell<Type>::TimeDurationCell(
160162
: ConfigOption(lock_while_running)
161163
, m_data(
162164
CONSTRUCT_TOKEN,
163-
std::move(units),
165+
std::move(units), true,
164166
min_value, Type::max(),
165167
std::move(default_value)
166168
)
167169
{}
168170

171+
template <typename Type>
172+
TimeDurationCell<Type>::TimeDurationCell(
173+
std::string units,
174+
LockMode lock_while_running,
175+
Type min_value, Type max_value,
176+
std::string default_value
177+
)
178+
: ConfigOption(lock_while_running)
179+
, m_data(
180+
CONSTRUCT_TOKEN,
181+
std::move(units), true,
182+
min_value, max_value,
183+
std::move(default_value)
184+
)
185+
{}
186+
169187

170188
template <typename Type>
171189
const std::string& TimeDurationCell<Type>::units() const{
172190
return m_data->m_units;
173191
}
174192
template <typename Type>
193+
bool TimeDurationCell<Type>::show_summary() const{
194+
return m_data->m_show_summary;
195+
}
196+
template <typename Type>
175197
Type TimeDurationCell<Type>::min_value() const{
176198
return m_data->m_min_value;
177199
}

Common/Cpp/Options/TimeDurationOption.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class TimeDurationCell : public ConfigOption{
2020
~TimeDurationCell();
2121
TimeDurationCell(const TimeDurationCell& x) = delete;
2222
TimeDurationCell(
23-
std::string units,
23+
std::string units, bool show_summary,
2424
LockMode lock_while_running,
2525
Type min_value, Type max_value,
2626
std::string default_value
@@ -38,10 +38,17 @@ class TimeDurationCell : public ConfigOption{
3838
Type min_value,
3939
std::string default_value
4040
);
41+
TimeDurationCell(
42+
std::string units,
43+
LockMode lock_while_running,
44+
Type min_value, Type max_value,
45+
std::string default_value
46+
);
4147

4248

4349
public:
4450
const std::string& units() const;
51+
bool show_summary() const;
4552
Type min_value() const;
4653
Type max_value() const;
4754
const std::string& default_value() const;

Common/Qt/Options/TimeDurationWidget.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,9 @@ TimeDurationOptionWidget<Type>::TimeDurationOptionWidget(QWidget& parent, TimeDu
9191

9292
m_box = new QLineEdit(QString::fromStdString(m_value.current_text()), this);
9393
row0->addWidget(m_box);
94-
row0->addWidget(new QLabel(QString::fromStdString(value.units()), this));
94+
if (value.show_summary()){
95+
row0->addWidget(new QLabel(QString::fromStdString(value.units()), this));
96+
}
9597
m_box->setToolTip(QString::fromStdString(
9698
"Time duration in " + value.units() +
9799
"<br><br>"
@@ -103,14 +105,20 @@ TimeDurationOptionWidget<Type>::TimeDurationOptionWidget(QWidget& parent, TimeDu
103105
"Wireless controllers have larger tick sizes and are imprecise due to wireless communication latency."
104106
));
105107

106-
QLabel* description = new QLabel(QString::fromStdString(m_value.time_string()), this);
107-
description->setAlignment(Qt::AlignHCenter);
108-
row1->addWidget(description);
108+
QLabel* description = nullptr;
109+
if (value.show_summary()){
110+
description = new QLabel(QString::fromStdString(m_value.time_string()), this);
111+
description->setAlignment(Qt::AlignHCenter);
112+
row1->addWidget(description);
113+
}
109114

110115
connect(
111116
m_box, &QLineEdit::editingFinished,
112117
this, [this, description](){
113118
std::string error = m_value.set(m_box->text().toStdString());
119+
if (description == nullptr){
120+
return;
121+
}
114122
if (error.empty()){
115123
description->setText(QString::fromStdString(m_value.time_string()));
116124
}else{
@@ -121,6 +129,9 @@ TimeDurationOptionWidget<Type>::TimeDurationOptionWidget(QWidget& parent, TimeDu
121129
connect(
122130
m_box, &QLineEdit::textChanged,
123131
this, [this, description](){
132+
if (description == nullptr){
133+
return;
134+
}
124135
std::string text = m_value.time_string(m_box->text().toStdString());
125136
description->setText(QString::fromStdString(text));
126137
}

SerialPrograms/Source/NintendoSwitch/Options/TurboMacroTable.cpp

Lines changed: 70 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@
1818
#include "Common/Cpp/Json/JsonTools.h"
1919
#include "NintendoSwitch/Options/TurboMacroTable.h"
2020

21-
#include <iostream>
22-
using std::cout;
23-
using std::endl;
21+
//#include <iostream>
22+
//using std::cout;
23+
//using std::endl;
2424

2525
namespace PokemonAutomation{
2626
namespace NintendoSwitch{
2727

28+
using namespace std::chrono_literals;
29+
2830

2931

3032
const EnumDropdownDatabase<TurboMacroAction>& TurboMacroAction_Database(){
@@ -63,42 +65,57 @@ TurboMacroCell::~TurboMacroCell(){
6365
void TurboMacroCell::operator=(const TurboMacroCell& x){
6466
x_axis.set(x.x_axis);
6567
y_axis.set(x.y_axis);
66-
button_hold_ticks.set(x.button_hold_ticks);
67-
button_release_ticks.set(x.button_release_ticks);
68-
wait_ticks.set(x.wait_ticks);
68+
button_hold.set(x.button_hold.current_text());
69+
button_release.set(x.button_release.current_text());
70+
wait.set(x.wait.current_text());
6971
}
7072
TurboMacroCell::TurboMacroCell(EnumDropdownCell<TurboMacroAction>& action)
7173
: BatchOption(LockMode::LOCK_WHILE_RUNNING, true)
7274
, m_action(action)
7375
, x_axis("X:", LockMode::LOCK_WHILE_RUNNING, 128)
7476
, y_axis("Y:", LockMode::LOCK_WHILE_RUNNING, 128)
75-
, button_hold_ticks("Ticks to Hold:", LockMode::LOCK_WHILE_RUNNING, 250)
76-
, button_release_ticks("Ticks to Release:", LockMode::LOCK_WHILE_RUNNING, 250)
77-
, wait_ticks("Ticks to Wait:", LockMode::LOCK_WHILE_RUNNING, 125)
77+
, button_hold(
78+
"Hold (ms):", false,
79+
LockMode::LOCK_WHILE_RUNNING,
80+
0ms, Milliseconds::max(),
81+
"2000 ms"
82+
)
83+
, button_release(
84+
"Release (ms):", false,
85+
LockMode::LOCK_WHILE_RUNNING,
86+
0ms, Milliseconds::max(),
87+
"2000 ms"
88+
)
89+
, wait(
90+
"Wait (ms):", false,
91+
LockMode::LOCK_WHILE_RUNNING,
92+
0ms, Milliseconds::max(),
93+
"1000 ms"
94+
)
7895
{
7996
PA_ADD_OPTION(x_axis);
8097
PA_ADD_OPTION(y_axis);
81-
PA_ADD_OPTION(button_hold_ticks);
82-
PA_ADD_OPTION(button_release_ticks);
83-
PA_ADD_OPTION(wait_ticks);
98+
PA_ADD_OPTION(button_hold);
99+
PA_ADD_OPTION(button_release);
100+
PA_ADD_OPTION(wait);
84101

85102
TurboMacroCell::value_changed(this);
86103
action.add_listener(*this);
87104
}
88105
void TurboMacroCell::value_changed(void* object){
89106
x_axis.set_visibility(ConfigOptionState::HIDDEN);
90107
y_axis.set_visibility(ConfigOptionState::HIDDEN);
91-
button_hold_ticks.set_visibility(ConfigOptionState::HIDDEN);
92-
button_release_ticks.set_visibility(ConfigOptionState::HIDDEN);
93-
wait_ticks.set_visibility(ConfigOptionState::HIDDEN);
108+
button_hold.set_visibility(ConfigOptionState::HIDDEN);
109+
button_release.set_visibility(ConfigOptionState::HIDDEN);
110+
wait.set_visibility(ConfigOptionState::HIDDEN);
94111
switch (m_action){
95112
case TurboMacroAction::LEFT_JOYSTICK:
96113
case TurboMacroAction::RIGHT_JOYSTICK:
97114
x_axis.set_visibility(ConfigOptionState::ENABLED);
98115
y_axis.set_visibility(ConfigOptionState::ENABLED);
99-
case TurboMacroAction::B:
100116
case TurboMacroAction::LEFT_JOY_CLICK:
101117
case TurboMacroAction::RIGHT_JOY_CLICK:
118+
case TurboMacroAction::B:
102119
case TurboMacroAction::A:
103120
case TurboMacroAction::Y:
104121
case TurboMacroAction::X:
@@ -112,11 +129,11 @@ void TurboMacroCell::value_changed(void* object){
112129
case TurboMacroAction::DPADRIGHT:
113130
case TurboMacroAction::DPADUP:
114131
case TurboMacroAction::DPADDOWN:
115-
button_hold_ticks.set_visibility(ConfigOptionState::ENABLED);
116-
button_release_ticks.set_visibility(ConfigOptionState::ENABLED);
132+
button_hold.set_visibility(ConfigOptionState::ENABLED);
133+
button_release.set_visibility(ConfigOptionState::ENABLED);
117134
break;
118135
case TurboMacroAction::WAIT:
119-
wait_ticks.set_visibility(ConfigOptionState::ENABLED);
136+
wait.set_visibility(ConfigOptionState::ENABLED);
120137
break;
121138
default:
122139
break;
@@ -165,14 +182,24 @@ void TurboMacroRow::load_json(const JsonValue& json){
165182
parameters.y_axis.load_json(*value);
166183
}
167184
value = obj->get_value("Hold");
185+
if (value != nullptr && value->is_integer()){
186+
parameters.button_hold.set(std::to_string(value->to_integer_default() * 8));
187+
}
188+
value = obj->get_value("HoldMs");
168189
if (value != nullptr){
169-
parameters.button_hold_ticks.load_json(*value);
190+
parameters.button_hold.load_json(*value);
170191
}
171192
value = obj->get_value("Release");
193+
if (value != nullptr && value->is_integer()){
194+
parameters.button_release.set(std::to_string(value->to_integer_default() * 8));
195+
}
196+
value = obj->get_value("ReleaseMs");
172197
if (value != nullptr){
173-
parameters.button_release_ticks.load_json(*value);
198+
parameters.button_release.load_json(*value);
174199
}
175200
break;
201+
case TurboMacroAction::LEFT_JOY_CLICK:
202+
case TurboMacroAction::RIGHT_JOY_CLICK:
176203
case TurboMacroAction::B:
177204
case TurboMacroAction::A:
178205
case TurboMacroAction::Y:
@@ -188,18 +215,30 @@ void TurboMacroRow::load_json(const JsonValue& json){
188215
case TurboMacroAction::DPADUP:
189216
case TurboMacroAction::DPADDOWN:
190217
value = obj->get_value("Hold");
218+
if (value != nullptr && value->is_integer()){
219+
parameters.button_hold.set(std::to_string(value->to_integer_default() * 8));
220+
}
221+
value = obj->get_value("HoldMs");
191222
if (value != nullptr){
192-
parameters.button_hold_ticks.load_json(*value);
223+
parameters.button_hold.load_json(*value);
193224
}
194225
value = obj->get_value("Release");
226+
if (value != nullptr && value->is_integer()){
227+
parameters.button_release.set(std::to_string(value->to_integer_default() * 8));
228+
}
229+
value = obj->get_value("ReleaseMs");
195230
if (value != nullptr){
196-
parameters.button_release_ticks.load_json(*value);
231+
parameters.button_release.load_json(*value);
197232
}
198233
break;
199234
case TurboMacroAction::WAIT:
200235
value = obj->get_value("Wait");
236+
if (value != nullptr && value->is_integer()){
237+
parameters.wait.set(std::to_string(value->to_integer_default() * 8));
238+
}
239+
value = obj->get_value("WaitMs");
201240
if (value != nullptr){
202-
parameters.wait_ticks.load_json(*value);
241+
parameters.wait.load_json(*value);
203242
}
204243
break;
205244
default:
@@ -210,6 +249,8 @@ JsonValue TurboMacroRow::to_json() const{
210249
JsonObject obj;
211250
obj["Action"] = action.to_json();
212251
switch (action){
252+
case TurboMacroAction::LEFT_JOY_CLICK:
253+
case TurboMacroAction::RIGHT_JOY_CLICK:
213254
case TurboMacroAction::B:
214255
case TurboMacroAction::A:
215256
case TurboMacroAction::Y:
@@ -224,18 +265,18 @@ JsonValue TurboMacroRow::to_json() const{
224265
case TurboMacroAction::DPADRIGHT:
225266
case TurboMacroAction::DPADUP:
226267
case TurboMacroAction::DPADDOWN:
227-
obj["Hold"] = parameters.button_hold_ticks.to_json();
228-
obj["Release"] = parameters.button_release_ticks.to_json();
268+
obj["HoldMs"] = parameters.button_hold.to_json();
269+
obj["ReleaseMs"] = parameters.button_release.to_json();
229270
break;
230271
case TurboMacroAction::LEFT_JOYSTICK:
231272
case TurboMacroAction::RIGHT_JOYSTICK:
232273
obj["MoveDirectionX"] = parameters.x_axis.to_json();
233274
obj["MoveDirectionY"] = parameters.y_axis.to_json();
234-
obj["Hold"] = parameters.button_hold_ticks.to_json();
235-
obj["Release"] = parameters.button_release_ticks.to_json();
275+
obj["HoldMs"] = parameters.button_hold.to_json();
276+
obj["ReleaseMs"] = parameters.button_release.to_json();
236277
break;
237278
case TurboMacroAction::WAIT:
238-
obj["Wait"] = parameters.wait_ticks.to_json();
279+
obj["WaitMs"] = parameters.wait.to_json();
239280
break;
240281
default:
241282
break;

SerialPrograms/Source/NintendoSwitch/Options/TurboMacroTable.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
#include "Common/Cpp/Options/BatchOption.h"
1111
#include "Common/Cpp/Options/SimpleIntegerOption.h"
12+
#include "Common/Cpp/Options/TimeDurationOption.h"
1213
#include "Common/Cpp/Options/EnumDropdownOption.h"
1314
#include "Common/Cpp/Options/EditableTableOption.h"
1415

@@ -56,9 +57,12 @@ class TurboMacroCell : public BatchOption, private ConfigOption::Listener{
5657
SimpleIntegerOption<uint8_t> x_axis;
5758
SimpleIntegerOption<uint8_t> y_axis;
5859

59-
SimpleIntegerOption<uint16_t> button_hold_ticks;
60-
SimpleIntegerOption<uint16_t> button_release_ticks;
61-
SimpleIntegerOption<uint16_t> wait_ticks;
60+
MillisecondsOption button_hold;
61+
MillisecondsOption button_release;
62+
MillisecondsOption wait;
63+
// SimpleIntegerOption<uint16_t> button_hold_ticks;
64+
// SimpleIntegerOption<uint16_t> button_release_ticks;
65+
// SimpleIntegerOption<uint16_t> wait_ticks;
6266
};
6367

6468

0 commit comments

Comments
 (0)