mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-22 22:33:43 -07:00
Implement Config::SetBlock()
.
Implement Apply. Implement Delete. Some json structure changes.
This commit is contained in:
parent
75fbb46297
commit
8ac717525d
3 changed files with 53 additions and 32 deletions
|
@ -1 +1 @@
|
|||
Subproject commit ffc062cbf44ce8dc07ac9fc0185224010bd78cc5
|
||||
Subproject commit 1d7c3386928fdb919a99e62c2f44ea4942d153e1
|
|
@ -113,13 +113,17 @@ enum PresetSection {
|
|||
|
||||
struct PresetInfo {
|
||||
nlohmann::json presetValues;
|
||||
|
||||
std::string fileName;
|
||||
bool applySettings = true, applyEnhancements = true, applyAudio = true, applyCosmetics = true, applyRando = true, applyTrackers = true;
|
||||
};
|
||||
|
||||
static std::map<std::string, PresetInfo> presets;
|
||||
static std::string presetFolder;
|
||||
|
||||
std::string FormatPresetPath(std::string name) {
|
||||
return fmt::format("{}/{}.json", presetFolder, name);
|
||||
}
|
||||
|
||||
void DrawSectionCheck(const std::string& name, bool empty, bool* pointer, std::string section) {
|
||||
ImGui::AlignTextToFramePadding();
|
||||
if (empty) {
|
||||
|
@ -152,20 +156,25 @@ void LoadPresets() {
|
|||
return;
|
||||
}
|
||||
presets[json["presetName"]].presetValues = json;
|
||||
presets[json["presetName"]].fileName = preset.path().filename().stem().string();
|
||||
} catch (...) {}
|
||||
ifs.close();
|
||||
}
|
||||
}
|
||||
|
||||
void SavePreset(std::string& presetName) {
|
||||
std::string folderPath = Ship::Context::GetInstance()->GetPathRelativeToAppDirectory("presets");
|
||||
if (!fs::exists(folderPath)) {
|
||||
fs::create_directory(folderPath);
|
||||
if (!fs::exists(presetFolder)) {
|
||||
fs::create_directory(presetFolder);
|
||||
}
|
||||
presets[presetName].presetValues["presetName"] = presetName;
|
||||
std::ofstream file(fmt::format("{}/{}.json", folderPath, presetName));
|
||||
std::ofstream file(fmt::format("{}/{}.json", presetFolder, presetName));
|
||||
file << presets[presetName].presetValues.dump(4);
|
||||
file.close();
|
||||
}
|
||||
|
||||
std::vector<std::string> sections = { CVAR_PREFIX_SETTING, CVAR_PREFIX_WINDOW, CVAR_PREFIX_ENHANCEMENT, CVAR_PREFIX_RANDOMIZER_ENHANCEMENT,
|
||||
CVAR_PREFIX_AUDIO, CVAR_PREFIX_COSMETIC, CVAR_PREFIX_RANDOMIZER_SETTING, CVAR_PREFIX_TRACKER, CVAR_PREFIX_CHEAT };
|
||||
|
||||
static std::string newPresetName;
|
||||
static bool newPresetSettings = true, newPresetEnhancements = true, newPresetAudio = true, newPresetCosmetics = true, newPresetRando = true, newPresetTrackers = true;
|
||||
|
||||
|
@ -195,28 +204,28 @@ void PresetsCustomWidget(WidgetInfo& info) {
|
|||
presets[newPresetName] = {};
|
||||
auto config = Ship::Context::GetInstance()->GetConfig()->GetNestedJson();
|
||||
if (newPresetSettings) {
|
||||
presets[newPresetName].presetValues["settings"] = config["CVars"][CVAR_PREFIX_SETTING];
|
||||
presets[newPresetName].presetValues["windows"] = config["CVars"][CVAR_PREFIX_WINDOW];
|
||||
presets[newPresetName].presetValues["blocks"]["settings"][CVAR_PREFIX_SETTING] = config["CVars"][CVAR_PREFIX_SETTING];
|
||||
presets[newPresetName].presetValues["blocks"]["windows"][CVAR_PREFIX_WINDOW] = config["CVars"][CVAR_PREFIX_WINDOW];
|
||||
}
|
||||
if (newPresetEnhancements) {
|
||||
presets[newPresetName].presetValues["enhancements"] = config["CVars"][CVAR_PREFIX_ENHANCEMENT];
|
||||
presets[newPresetName].presetValues["randoEnhancements"] = config["CVars"][CVAR_PREFIX_RANDOMIZER_ENHANCEMENT];
|
||||
presets[newPresetName].presetValues["blocks"]["enhancements"][CVAR_PREFIX_ENHANCEMENT] = config["CVars"][CVAR_PREFIX_ENHANCEMENT];
|
||||
presets[newPresetName].presetValues["blocks"]["randoEnhancements"][CVAR_PREFIX_RANDOMIZER_ENHANCEMENT] = config["CVars"][CVAR_PREFIX_RANDOMIZER_ENHANCEMENT];
|
||||
}
|
||||
if (newPresetAudio) {
|
||||
presets[newPresetName].presetValues["audio"] = config["CVars"][CVAR_PREFIX_AUDIO];
|
||||
presets[newPresetName].presetValues["blocks"]["audio"][CVAR_PREFIX_AUDIO] = config["CVars"][CVAR_PREFIX_AUDIO];
|
||||
}
|
||||
if (newPresetCosmetics) {
|
||||
presets[newPresetName].presetValues["cosmetics"] = config["CVars"][CVAR_PREFIX_COSMETIC];
|
||||
presets[newPresetName].presetValues["blocks"]["cosmetics"][CVAR_PREFIX_COSMETIC] = config["CVars"][CVAR_PREFIX_COSMETIC];
|
||||
}
|
||||
if (newPresetRando) {
|
||||
presets[newPresetName].presetValues["rando"] = config["CVars"][CVAR_PREFIX_RANDOMIZER_SETTING];
|
||||
presets[newPresetName].presetValues["blocks"]["rando"][CVAR_PREFIX_RANDOMIZER_SETTING] = config["CVars"][CVAR_PREFIX_RANDOMIZER_SETTING];
|
||||
}
|
||||
if (newPresetTrackers) {
|
||||
presets[newPresetName].presetValues["trackers"] = config["CVars"][CVAR_PREFIX_TRACKER];
|
||||
presets[newPresetName].presetValues["blocks"]["trackers"][CVAR_PREFIX_TRACKER] = config["CVars"][CVAR_PREFIX_TRACKER];
|
||||
}
|
||||
presets[newPresetName].fileName = newPresetName;
|
||||
SavePreset(newPresetName);
|
||||
newPresetName = "";
|
||||
newPresetSettings = newPresetEnhancements = newPresetAudio = newPresetCosmetics = newPresetRando = newPresetTrackers = false;
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
if (UIWidgets::Button("Cancel", UIWidgets::ButtonOptions().Padding({6.0f, 6.0f}).Color(THEME_COLOR))) {
|
||||
|
@ -274,27 +283,39 @@ void PresetsCustomWidget(WidgetInfo& info) {
|
|||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text(name.c_str());
|
||||
ImGui::TableNextColumn();
|
||||
DrawSectionCheck(name, !info.presetValues.contains("settings"), &info.applySettings, "settings");
|
||||
DrawSectionCheck(name, !info.presetValues["blocks"].contains("settings"), &info.applySettings, "settings");
|
||||
ImGui::TableNextColumn();
|
||||
DrawSectionCheck(name, !info.presetValues.contains("enhancements"), &info.applyEnhancements, "enhancements");
|
||||
DrawSectionCheck(name, !info.presetValues["blocks"].contains("enhancements"), &info.applyEnhancements, "enhancements");
|
||||
ImGui::TableNextColumn();
|
||||
DrawSectionCheck(name, !info.presetValues.contains("audio"), &info.applyAudio, "audio");
|
||||
DrawSectionCheck(name, !info.presetValues["blocks"].contains("audio"), &info.applyAudio, "audio");
|
||||
ImGui::TableNextColumn();
|
||||
DrawSectionCheck(name, !info.presetValues.contains("cosmetics"), &info.applyCosmetics, "cosmetics");
|
||||
DrawSectionCheck(name, !info.presetValues["blocks"].contains("cosmetics"), &info.applyCosmetics, "cosmetics");
|
||||
ImGui::TableNextColumn();
|
||||
DrawSectionCheck(name, !info.presetValues.contains("rando"), &info.applyRando, "rando");
|
||||
DrawSectionCheck(name, !info.presetValues["blocks"].contains("rando"), &info.applyRando, "rando");
|
||||
ImGui::TableNextColumn();
|
||||
DrawSectionCheck(name, !info.presetValues.contains("trackers"), &info.applyTrackers, "trackers");
|
||||
DrawSectionCheck(name, !info.presetValues["blocks"].contains("trackers"), &info.applyTrackers, "trackers");
|
||||
ImGui::TableNextColumn();
|
||||
UIWidgets::PushStyleButton(THEME_COLOR);
|
||||
if (UIWidgets::Button(("Apply##" + name).c_str(), UIWidgets::ButtonOptions().Padding({6.0f, 6.0f}))) {
|
||||
if (info.applySettings && info.presetValues.contains("gSettings")) {
|
||||
for (auto& section : info.presetValues["blocks"]) {
|
||||
for (auto& item : section.items()) {
|
||||
if (section[item.key()].is_null()) {
|
||||
CVarClearBlock(item.key().c_str());
|
||||
} else {
|
||||
Ship::Context::GetInstance()->GetConfig()->SetBlock(fmt::format("{}.{}", "CVars", item.key()), item.value());
|
||||
Ship::Context::GetInstance()->GetConsoleVariables()->Load();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
UIWidgets::PopStyleButton();
|
||||
ImGui::TableNextColumn();
|
||||
UIWidgets::PushStyleButton(THEME_COLOR);
|
||||
if (UIWidgets::Button(("Delete##" + name).c_str(), UIWidgets::ButtonOptions().Padding({6.0f, 6.0f}))) {
|
||||
auto path = FormatPresetPath(info.fileName);
|
||||
if (fs::exists(path)) {
|
||||
fs::remove(path);
|
||||
}
|
||||
presets.erase(name);
|
||||
UIWidgets::PopStyleButton();
|
||||
break;
|
||||
|
|
|
@ -280,16 +280,16 @@ void SohMenu::AddMenuEnhancements() {
|
|||
.SameLine(true)
|
||||
.Options(ButtonOptions().Size(Sizes::Inline))
|
||||
.Callback([](WidgetInfo& info) {
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Intro"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Entrances"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.LearnSong"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.BossIntro"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.QuickBossDeaths"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.OnePoint"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipOwlInteractions"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.DisableTitleCard"), false);
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Intro"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Entrances"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.LearnSong"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.BossIntro"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.QuickBossDeaths"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.OnePoint"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipOwlInteractions"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.DisableTitleCard"));
|
||||
|
||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue