Repository navigation
Expand file tree
/
Copy pathMultiConsoleSystemOption.cpp
More file actions
79 lines (68 loc) · 1.97 KB
/
Copy pathMultiConsoleSystemOption.cpp
File metadata and controls
79 lines (68 loc) · 1.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* Multi-Console System Option
*
* From: https://github.com/PokemonAutomation/
*
*/
#include "Common/Cpp/Json/JsonValue.h"
#include "Common/Cpp/Json/JsonArray.h"
#include "Common/Cpp/Json/JsonObject.h"
#include "Common/Cpp/Containers/FixedLimitVector.tpp"
#include "MultiConsoleSystemOption.h"
namespace PokemonAutomation{
namespace GameConsole{
MultiConsoleSystemOption::~MultiConsoleSystemOption(){
}
MultiConsoleSystemOption::MultiConsoleSystemOption(
size_t min_consoles,
size_t max_consoles,
size_t consoles,
const OptionFactory& option_factory
)
: m_min_consoles(std::max(min_consoles, (size_t)1))
, m_max_consoles(std::min(max_consoles, (size_t)MAX_CONSOLES))
, m_active_consoles(0)
, m_consoles(m_max_consoles)
{
for (size_t c = 0; c < m_max_consoles; c++){
m_consoles.emplace_back(option_factory(c));
}
consoles = std::max(consoles, m_min_consoles);
consoles = std::min(consoles, m_max_consoles);
m_active_consoles = consoles;
}
JsonValue MultiConsoleSystemOption::to_json() const{
JsonObject obj;
obj["ActiveDevices"] = m_active_consoles;
{
JsonArray array;
for (const auto& item : m_consoles){
array.push_back(item->to_json());
}
obj["DeviceList"] = std::move(array);
}
return obj;
}
void MultiConsoleSystemOption::load_json(const JsonValue& json){
const JsonObject* obj = json.to_object();
if (obj == nullptr){
return;
}
obj->read_integer(
m_active_consoles,
"ActiveDevices",
m_min_consoles,
m_max_consoles
);
{
const JsonArray* array = obj->get_array("DeviceList");
if (array != nullptr){
size_t c = 0;
size_t stop = std::min(m_max_consoles, array->size());
for (; c < stop; c++){
m_consoles[c]->load_json((*array)[c]);
}
}
}
}
}
}