Skip to content

Commit 9b348b2

Browse files
Alt keybinds option and pressing escape unsets a key
1 parent bb17ad7 commit 9b348b2

File tree

3 files changed

+474
-249
lines changed

3 files changed

+474
-249
lines changed

Encore/include/game/keybinds.h

+14-7
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,20 @@ std::unordered_map<int, std::string> keymap{
6666

6767
static std::string getKeyStr(int keycode)
6868
{
69-
auto it = keymap.find(keycode);
70-
if (it != keymap.end())
71-
{
72-
return it->second;
69+
if (keycode >= 39 && keycode < 96) {
70+
char chr = static_cast<char>(keycode);
71+
return std::string(1,chr);
7372
}
74-
else
75-
{
76-
return "UNKNOWN";
73+
else {
74+
auto it = keymap.find(keycode);
75+
if (it != keymap.end())
76+
{
77+
return it->second;
78+
}
79+
else
80+
{
81+
return keycode == -1 ? "" : "UNK";
82+
}
7783
}
84+
7885
}

Encore/include/game/settings.h

+150-7
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,49 @@ class Settings {
1818
}
1919
return array;
2020
}
21+
void ensureValuesExist() {
22+
rapidjson::Document::AllocatorType& allocator = settings.GetAllocator();
23+
if (!settings.HasMember("trackSpeed"))
24+
settings.AddMember("trackSpeed", rapidjson::Value(), allocator);
25+
if (!settings.HasMember("avOffset"))
26+
settings.AddMember("avOffset", rapidjson::Value(), allocator);
27+
if (!settings.HasMember("inputOffset"))
28+
settings.AddMember("inputOffset", rapidjson::Value(), allocator);
29+
if (!settings.HasMember("keybinds"))
30+
settings.AddMember("keybinds", rapidjson::kObjectType, allocator);
31+
if (!settings["keybinds"].HasMember("4k"))
32+
settings["keybinds"].AddMember("4k", rapidjson::kArrayType, allocator);
33+
if (!settings["keybinds"].HasMember("5k"))
34+
settings["keybinds"].AddMember("5k", rapidjson::kArrayType, allocator);
35+
if (!settings["keybinds"].HasMember("4kAlt"))
36+
settings["keybinds"].AddMember("4kAlt", rapidjson::kArrayType, allocator);
37+
if (!settings["keybinds"].HasMember("5kAlt"))
38+
settings["keybinds"].AddMember("5kAlt", rapidjson::kArrayType, allocator);
39+
if (!settings["keybinds"].HasMember("overdrive"))
40+
settings["keybinds"].AddMember("overdrive", rapidjson::Value(), allocator);
41+
if (!settings["keybinds"].HasMember("overdriveAlt"))
42+
settings["keybinds"].AddMember("overdriveAlt", rapidjson::Value(), allocator);
43+
}
2144
public:
2245
rapidjson::Document settings;
2346
std::vector<int> defaultKeybinds4K{ KEY_D,KEY_F,KEY_J,KEY_K };
2447
std::vector<int> defaultKeybinds5K{ KEY_D,KEY_F,KEY_J,KEY_K,KEY_L };
48+
std::vector<int> defaultKeybinds4KAlt{ -1,-1,-1,-1 };
49+
std::vector<int> defaultKeybinds5KAlt{ -1,-1,-1,-1,-1 };
50+
int defaultKeybindOverdrive = 32;
51+
int defaultKeybindOverdriveAlt = -1;
2552
std::vector<int> keybinds4K = defaultKeybinds4K;
2653
std::vector<int> keybinds5K = defaultKeybinds5K;
54+
std::vector<int> keybinds4KAlt = defaultKeybinds4KAlt;
55+
std::vector<int> keybinds5KAlt = defaultKeybinds5KAlt;
56+
int keybindOverdrive = defaultKeybindOverdrive;
57+
int keybindOverdriveAlt = defaultKeybindOverdriveAlt;
2758
std::vector<int> prev4k = keybinds4K;
2859
std::vector<int> prev5k = keybinds5K;
60+
std::vector<int> prev4kAlt = keybinds4KAlt;
61+
std::vector<int> prev5kAlt = keybinds5KAlt;
62+
int prevOverdrive = keybindOverdrive;
63+
int prevOverdriveAlt = keybindOverdriveAlt;
2964
std::vector<float> defaultTrackSpeedOptions = { 0.5f,0.75f,1.0f,1.25f,1.5f,1.75f,2.0f };
3065
std::vector<float> trackSpeedOptions = defaultTrackSpeedOptions;
3166
int trackSpeed = 4;
@@ -35,6 +70,7 @@ class Settings {
3570
int inputOffsetMS = 0;
3671
int prevInputOffsetMS = inputOffsetMS;
3772
bool changing4k = false;
73+
bool changingAlt = false;
3874
void writeDefaultSettings(std::filesystem::path settingsFile, bool migrate = false) {
3975
rapidjson::Document::AllocatorType& allocator = settings.GetAllocator();
4076
settings.SetObject();
@@ -52,17 +88,26 @@ class Settings {
5288
for (int& key : defaultKeybinds5K)
5389
array5K.PushBack(rapidjson::Value().SetInt(key), allocator);
5490
}
91+
rapidjson::Value array4KAlt(rapidjson::kArrayType);
92+
rapidjson::Value array5KAlt(rapidjson::kArrayType);
93+
for (int& key : defaultKeybinds4KAlt)
94+
array4KAlt.PushBack(rapidjson::Value().SetInt(key), allocator);
95+
for (int& key : defaultKeybinds5KAlt)
96+
array5KAlt.PushBack(rapidjson::Value().SetInt(key), allocator);
5597
settings.AddMember("keybinds", rapidjson::Value(rapidjson::kObjectType), allocator);
5698
settings["keybinds"].AddMember("4k", array4K, allocator);
5799
settings["keybinds"].AddMember("5k", array5K, allocator);
58-
rapidjson::Value avOffset;
59-
avOffset.SetInt(avOffsetMS);
100+
settings["keybinds"].AddMember("4kAlt", array4KAlt, allocator);
101+
settings["keybinds"].AddMember("5kAlt", array5KAlt, allocator);
102+
rapidjson::Value overdrive(keybindOverdrive);
103+
rapidjson::Value overdriveAlt(keybindOverdriveAlt);
104+
settings["keybinds"].AddMember("overdrive", overdrive, allocator);
105+
settings["keybinds"].AddMember("overdriveAlt", overdriveAlt, allocator);
106+
rapidjson::Value avOffset(avOffsetMS);
60107
settings.AddMember("avOffset", avOffset, allocator);
61-
rapidjson::Value inputOffset;
62-
inputOffset.SetInt(inputOffsetMS);
108+
rapidjson::Value inputOffset(inputOffsetMS);
63109
settings.AddMember("inputOffset", inputOffset, allocator);
64-
rapidjson::Value trackSpeedVal;
65-
trackSpeedVal.SetInt(4);
110+
rapidjson::Value trackSpeedVal(4);
66111
settings.AddMember("trackSpeed", trackSpeedVal, allocator);
67112
rapidjson::Value arrayTrackSpeedOptions(rapidjson::kArrayType);
68113
for (float& speed : defaultTrackSpeedOptions)
@@ -74,6 +119,10 @@ class Settings {
74119
bool keybindsError = false;
75120
bool keybinds4KError = false;
76121
bool keybinds5KError = false;
122+
bool keybinds4KAltError = false;
123+
bool keybinds5KAltError = false;
124+
bool keybindsOverdriveError = false;
125+
bool keybindsOverdriveAltError = false;
77126
bool avError = false;
78127
bool inputError = false;
79128
bool trackSpeedOptionsError = false;
@@ -124,6 +173,55 @@ class Settings {
124173
keybinds5KError = true;
125174
}
126175
}
176+
if (settings["keybinds"].HasMember("4kAlt") && settings["keybinds"]["4kAlt"].IsArray()) {
177+
const rapidjson::Value& arr = settings["keybinds"]["4kAlt"];
178+
if (arr.Size() == 4) {
179+
for (int i = 0; i < 4; i++) {
180+
if (arr[i].IsInt()) {
181+
keybinds4KAlt[i] = arr[i].GetInt();
182+
}
183+
else {
184+
keybinds4KAltError = true;
185+
}
186+
}
187+
prev4kAlt = keybinds4KAlt;
188+
}
189+
else {
190+
keybinds4KAltError = true;
191+
}
192+
}
193+
if (settings["keybinds"].HasMember("5kAlt") && settings["keybinds"]["5kAlt"].IsArray()) {
194+
const rapidjson::Value& arr = settings["keybinds"]["5kAlt"];
195+
if (arr.Size() == 5) {
196+
for (int i = 0; i < 5; i++) {
197+
if (arr[i].IsInt()) {
198+
keybinds5KAlt[i] = arr[i].GetInt();
199+
}
200+
else {
201+
keybinds5KAltError = true;
202+
}
203+
}
204+
prev5kAlt = keybinds5KAlt;
205+
}
206+
else {
207+
keybinds5KAltError = true;
208+
}
209+
}
210+
if (settings["keybinds"].HasMember("overdrive") && settings["keybinds"]["overdrive"].IsInt()) {
211+
keybindOverdrive = settings["keybinds"]["overdrive"].GetInt();
212+
prevOverdrive = keybindOverdrive;
213+
}
214+
else {
215+
keybindsOverdriveError = true;
216+
}
217+
218+
if (settings["keybinds"].HasMember("overdriveAlt") && settings["keybinds"]["overdriveAlt"].IsInt()) {
219+
keybindOverdriveAlt = settings["keybinds"]["overdriveAlt"].GetInt();
220+
prevOverdriveAlt = keybindOverdriveAlt;
221+
}
222+
else {
223+
keybindsOverdriveAltError = true;
224+
}
127225
}
128226
else {
129227
keybindsError = true;
@@ -206,6 +304,38 @@ class Settings {
206304
array5K.PushBack(rapidjson::Value().SetInt(key), allocator);
207305
settings["keybinds"].AddMember("5k", array5K, allocator);
208306
}
307+
if (keybinds4KAltError) {
308+
if (settings["keybinds"].HasMember("4kAlt"))
309+
settings["keybinds"].EraseMember("4kAlt");
310+
rapidjson::Document::AllocatorType& allocator = settings.GetAllocator();
311+
rapidjson::Value array4K(rapidjson::kArrayType);
312+
for (int& key : defaultKeybinds4KAlt)
313+
array4K.PushBack(rapidjson::Value().SetInt(key), allocator);
314+
settings["keybinds"].AddMember("4kAlt", array4K, allocator);
315+
}
316+
if (keybinds5KAltError) {
317+
if (settings["keybinds"].HasMember("5kAlt"))
318+
settings["keybinds"].EraseMember("5kAlt");
319+
rapidjson::Document::AllocatorType& allocator = settings.GetAllocator();
320+
rapidjson::Value array5K(rapidjson::kArrayType);
321+
for (int& key : defaultKeybinds5KAlt)
322+
array5K.PushBack(rapidjson::Value().SetInt(key), allocator);
323+
settings["keybinds"].AddMember("5kAlt", array5K, allocator);
324+
}
325+
if (keybindsOverdriveError) {
326+
if (settings["keybinds"].HasMember("overdrive"))
327+
settings["keybinds"].EraseMember("overdrive");
328+
rapidjson::Document::AllocatorType& allocator = settings.GetAllocator();
329+
rapidjson::Value overdriveKey(KEY_SPACE);
330+
settings["keybinds"].AddMember("overdrive", overdriveKey, allocator);
331+
}
332+
if (keybindsOverdriveAltError){
333+
if (settings["keybinds"].HasMember("overdriveAlt"))
334+
settings["keybinds"].EraseMember("overdriveAlt");
335+
rapidjson::Document::AllocatorType& allocator = settings.GetAllocator();
336+
rapidjson::Value overdriveKeyAlt(defaultKeybindOverdriveAlt);
337+
settings["keybinds"].AddMember("overdriveAlt", overdriveKeyAlt, allocator);
338+
}
209339
if (avError) {
210340
if (settings.HasMember("avOffset"))
211341
settings.EraseMember("avOffset");
@@ -240,7 +370,8 @@ class Settings {
240370
arrayTrackSpeedOptions.PushBack(rapidjson::Value().SetFloat(speed), allocator);
241371
settings.AddMember("trackSpeedOptions", arrayTrackSpeedOptions, allocator);
242372
}
243-
if (keybindsError || keybinds4KError || keybinds5KError || avError || inputError|| trackSpeedError || trackSpeedOptionsError) {
373+
if (keybindsError || keybinds4KError || keybinds5KError || keybinds4KAltError || keybinds5KAltError|| keybindsOverdriveError || keybindsOverdriveAltError || avError || inputError|| trackSpeedError || trackSpeedOptionsError) {
374+
ensureValuesExist();
244375
saveSettings(settingsFile);
245376
}
246377
}
@@ -350,6 +481,18 @@ class Settings {
350481
keybinds5KMember->value.Clear();
351482
for (int& key : keybinds5K)
352483
keybinds5KMember->value.PushBack(rapidjson::Value().SetInt(key), allocator);
484+
rapidjson::Value::MemberIterator keybinds4KAltMember = settings["keybinds"].FindMember("4kAlt");
485+
keybinds4KAltMember->value.Clear();
486+
for (int& key : keybinds4KAlt)
487+
keybinds4KAltMember->value.PushBack(rapidjson::Value().SetInt(key), allocator);
488+
rapidjson::Value::MemberIterator keybinds5KAltMember = settings["keybinds"].FindMember("5kAlt");
489+
keybinds5KAltMember->value.Clear();
490+
for (int& key : keybinds5KAlt)
491+
keybinds5KAltMember->value.PushBack(rapidjson::Value().SetInt(key), allocator);
492+
rapidjson::Value::MemberIterator overdriveKeyMember = settings["keybinds"].FindMember("overdrive");
493+
overdriveKeyMember->value.SetInt(keybindOverdrive);
494+
rapidjson::Value::MemberIterator overdriveKeyAltMember = settings["keybinds"].FindMember("overdriveAlt");
495+
overdriveKeyAltMember->value.SetInt(keybindOverdriveAlt);
353496
char writeBuffer[8192];
354497
FILE* fp = fopen(settingsFile.string().c_str(), "wb");
355498
rapidjson::FileWriteStream os(fp, writeBuffer, sizeof(writeBuffer));

0 commit comments

Comments
 (0)