Compare commits
5 commits
fa81d2428e
...
1421257c4f
Author | SHA1 | Date | |
---|---|---|---|
1421257c4f | |||
df5fa7a39e | |||
c5b4747685 | |||
7ddc8e0748 | |||
7392d961c7 |
13 changed files with 69 additions and 92 deletions
|
@ -136,10 +136,6 @@ SaveTool::SaveTool(const Arguments& arguments):
|
|||
case Framelimit::HalfVsync:
|
||||
setSwapInterval(2);
|
||||
break;
|
||||
case Framelimit::FpsCap:
|
||||
setSwapInterval(0);
|
||||
setMinimalLoopPeriod(1000/_fpsCap);
|
||||
break;
|
||||
}
|
||||
|
||||
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||
|
@ -184,9 +180,8 @@ SaveTool::~SaveTool() {
|
|||
case Framelimit::HalfVsync:
|
||||
_conf.setValue("frame_limit"_s, "half_vsync"_s);
|
||||
break;
|
||||
case Framelimit::FpsCap:
|
||||
_conf.setValue<UnsignedInt>("frame_limit"_s, _fpsCap);
|
||||
break;
|
||||
default:
|
||||
_conf.setValue("frame_limit"_s, "vsync"_s);
|
||||
}
|
||||
|
||||
_conf.save();
|
||||
|
@ -329,11 +324,11 @@ void SaveTool::drawDisclaimer() {
|
|||
|
||||
ImGui::TextUnformatted("Before you start using the app, there are a few things you should know:");
|
||||
|
||||
ImGui::PushTextWrapPos(windowSize().x() * 0.67f);
|
||||
ImGui::PushTextWrapPos(float(windowSize().x()) * 0.67f);
|
||||
|
||||
ImGui::Bullet();
|
||||
ImGui::SameLine();
|
||||
ImGui::TextUnformatted("For this application to work properly, it is recommended to disable Steam Cloud syncing for the game. To disable it, right-click the game in your Steam library, click \"Properties\", go to the \"General\" tab, and uncheck \"Keep game saves in the Steam Cloud for M.A.S.S. Builder\".");
|
||||
ImGui::TextUnformatted(R"(For this application to work properly, it is recommended to disable Steam Cloud syncing for the game. To disable it, right-click the game in your Steam library, click "Properties", go to the "General" tab, and uncheck "Keep game saves in the Steam Cloud for M.A.S.S. Builder".)");
|
||||
|
||||
ImGui::Bullet();
|
||||
ImGui::SameLine();
|
||||
|
|
|
@ -262,10 +262,8 @@ class SaveTool: public Platform::Sdl2Application, public efsw::FileWatchListener
|
|||
|
||||
enum class Framelimit: UnsignedByte {
|
||||
Vsync,
|
||||
HalfVsync,
|
||||
FpsCap
|
||||
HalfVsync
|
||||
} _framelimit{Framelimit::Vsync};
|
||||
UnsignedInt _fpsCap{60};
|
||||
|
||||
bool _skipDisclaimer{false};
|
||||
bool _checkUpdatesOnStartup{true};
|
||||
|
|
|
@ -38,8 +38,8 @@ void SaveTool::initEvent(SDL_Event& event) {
|
|||
ImGui::CloseCurrentPopup();
|
||||
break;
|
||||
case ProfileManagerFailure:
|
||||
Utility::Error{} << "Error initialising ProfileManager:" << _profileManager->lastError();
|
||||
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error initialising ProfileManager", _profileManager->lastError().data(), window());
|
||||
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error ",
|
||||
_profileManager->lastError().data(), window());
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
default:
|
||||
|
@ -73,15 +73,11 @@ void SaveTool::initialiseConfiguration() {
|
|||
|
||||
if(_conf.hasValue("frame_limit"_s)) {
|
||||
std::string frame_limit = _conf.value("frame_limit"_s);
|
||||
if(frame_limit == "vsync"_s) {
|
||||
_framelimit = Framelimit::Vsync;
|
||||
}
|
||||
else if(frame_limit == "half_vsync"_s) {
|
||||
if(frame_limit == "half_vsync"_s) {
|
||||
_framelimit = Framelimit::HalfVsync;
|
||||
}
|
||||
else {
|
||||
_framelimit = Framelimit::FpsCap;
|
||||
_fpsCap = std::stoul(frame_limit);
|
||||
_framelimit = Framelimit::Vsync;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -102,7 +98,8 @@ void SaveTool::initialiseGui() {
|
|||
ImFontConfig font_config;
|
||||
font_config.FontDataOwnedByAtlas = false;
|
||||
std::strcpy(font_config.Name, "Source Sans Pro");
|
||||
io.Fonts->AddFontFromMemoryTTF(const_cast<char*>(reg_font.data()), reg_font.size(), 20.0f, &font_config);
|
||||
io.Fonts->AddFontFromMemoryTTF(const_cast<char*>(reg_font.data()), int(reg_font.size()),
|
||||
20.0f, &font_config);
|
||||
|
||||
auto icon_font = _rs.getRaw(FONT_ICON_FILE_NAME_FAS);
|
||||
static const ImWchar icon_range[] = { ICON_MIN_FA, ICON_MAX_FA, 0 };
|
||||
|
@ -112,11 +109,13 @@ void SaveTool::initialiseGui() {
|
|||
icon_config.PixelSnapH = true;
|
||||
icon_config.OversampleH = icon_config.OversampleV = 1;
|
||||
icon_config.GlyphMinAdvanceX = 18.0f;
|
||||
io.Fonts->AddFontFromMemoryTTF(const_cast<char*>(icon_font.data()), icon_font.size(), 16.0f, &icon_config, icon_range);
|
||||
io.Fonts->AddFontFromMemoryTTF(const_cast<char*>(icon_font.data()), int(icon_font.size()),
|
||||
16.0f, &icon_config, icon_range);
|
||||
|
||||
auto brand_font = _rs.getRaw(FONT_ICON_FILE_NAME_FAB);
|
||||
static const ImWchar brand_range[] = { ICON_MIN_FAB, ICON_MAX_FAB, 0 };
|
||||
io.Fonts->AddFontFromMemoryTTF(const_cast<char*>(brand_font.data()), brand_font.size(), 16.0f, &icon_config, brand_range);
|
||||
io.Fonts->AddFontFromMemoryTTF(const_cast<char*>(brand_font.data()), int(brand_font.size()),
|
||||
16.0f, &icon_config, brand_range);
|
||||
|
||||
auto mono_font = _rs.getRaw("SourceCodePro-Regular.ttf"_s);
|
||||
ImVector<ImWchar> range;
|
||||
|
@ -124,7 +123,8 @@ void SaveTool::initialiseGui() {
|
|||
builder.AddRanges(io.Fonts->GetGlyphRangesDefault());
|
||||
builder.AddChar(u'š'); // This allows displaying Vladimír Vondruš' name in Corrade's and Magnum's licences.
|
||||
builder.BuildRanges(&range);
|
||||
io.Fonts->AddFontFromMemoryTTF(const_cast<char*>(mono_font.data()), mono_font.size(), 18.0f, &font_config, range.Data);
|
||||
io.Fonts->AddFontFromMemoryTTF(const_cast<char*>(mono_font.data()), int(mono_font.size()),
|
||||
18.0f, &font_config, range.Data);
|
||||
|
||||
_imgui = ImGuiIntegration::Context(*ImGui::GetCurrentContext(), windowSize());
|
||||
|
||||
|
|
|
@ -203,7 +203,7 @@ void SaveTool::drawGeneralInfo() {
|
|||
ImGui::Text("Last mission: 0x%x", _currentProfile->lastMissionId());
|
||||
}
|
||||
drawTooltip("This is the last mission selected in the mission selection screen, not the last mission played.",
|
||||
windowSize().x() * 0.35f);
|
||||
float(windowSize().x()) * 0.35f);
|
||||
|
||||
const Float footer_height_to_reserve = ImGui::GetStyle().ItemSpacing.y + ImGui::GetFrameHeightWithSpacing();
|
||||
ImGui::Dummy({ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y - footer_height_to_reserve});
|
||||
|
@ -643,7 +643,7 @@ auto SaveTool::drawDeleteMassPopup(int mass_index) -> ImGuiID {
|
|||
return 0;
|
||||
}
|
||||
|
||||
ImGui::PushTextWrapPos(windowSize().x() * 0.40f);
|
||||
ImGui::PushTextWrapPos(float(windowSize().x()) * 0.40f);
|
||||
if(_massManager->hangar(mass_index).state() == Mass::State::Invalid) {
|
||||
ImGui::Text("Are you sure you want to delete the invalid M.A.S.S. data in hangar %.2i ? This operation is irreversible.",
|
||||
mass_index + 1);
|
||||
|
@ -687,7 +687,7 @@ auto SaveTool::drawDeleteStagedMassPopup(Containers::StringView filename) -> ImG
|
|||
return ImGui::GetID("Confirmation##DeleteStagedMassConfirmation");
|
||||
}
|
||||
|
||||
ImGui::PushTextWrapPos(windowSize().x() * 0.40f);
|
||||
ImGui::PushTextWrapPos(float(windowSize().x()) * 0.40f);
|
||||
ImGui::Text("Are you sure you want to delete the staged M.A.S.S. named %s ? This operation is irreversible.",
|
||||
_massManager->stagedMasses().at(filename).data());
|
||||
ImGui::PopTextWrapPos();
|
||||
|
|
|
@ -90,7 +90,7 @@ void SaveTool::drawMassViewer() {
|
|||
_selectedWeaponPart = 0;
|
||||
_selectedWeaponDecal = 0;
|
||||
_selectedWeaponAccessory = 0;
|
||||
};
|
||||
}
|
||||
|
||||
ImGui::EndTable();
|
||||
}
|
||||
|
@ -166,7 +166,7 @@ void SaveTool::drawGlobalStyles() {
|
|||
ImGui::TextWrapped("In-game values are multiplied by 100. For example, 0.500 here is equal to 50 in-game.");
|
||||
|
||||
for(UnsignedInt i = 0; i < _currentMass->globalStyles().size(); i++) {
|
||||
ImGui::PushID(i);
|
||||
ImGui::PushID(int(i));
|
||||
DCSResult result;
|
||||
result = drawCustomStyle(_currentMass->globalStyles()[i]);
|
||||
switch(result) {
|
||||
|
|
|
@ -43,7 +43,7 @@ void SaveTool::drawArmour() {
|
|||
};
|
||||
|
||||
for(UnsignedInt i = 0; i < _currentMass->armourParts().size(); i++) {
|
||||
ImGui::PushID(i);
|
||||
ImGui::PushID(int(i));
|
||||
|
||||
auto& part = _currentMass->armourParts()[i];
|
||||
|
||||
|
@ -126,7 +126,7 @@ void SaveTool::drawArmour() {
|
|||
drawAlignedText("Showing/editing decal");
|
||||
for(UnsignedInt j = 0; j < part.decals.size(); j++) {
|
||||
ImGui::SameLine();
|
||||
ImGui::RadioButton(std::to_string(j + 1).c_str(), &_selectedArmourDecals[i], j);
|
||||
ImGui::RadioButton(std::to_string(j + 1).c_str(), &_selectedArmourDecals[i], int(j));
|
||||
}
|
||||
|
||||
drawDecalEditor(part.decals[_selectedArmourDecals[i]]);
|
||||
|
@ -141,7 +141,7 @@ void SaveTool::drawArmour() {
|
|||
drawAlignedText("Showing/editing accessory");
|
||||
for(UnsignedInt j = 0; j < part.accessories.size(); j++) {
|
||||
ImGui::SameLine();
|
||||
ImGui::RadioButton(std::string{char(65 + j)}.c_str(), &_selectedArmourAccessories[i], j);
|
||||
ImGui::RadioButton(std::string{char(65 + j)}.c_str(), &_selectedArmourAccessories[i], int(j));
|
||||
}
|
||||
|
||||
drawAccessoryEditor(part.accessories[_selectedArmourAccessories[i]], _currentMass->armourCustomStyles());
|
||||
|
@ -301,7 +301,7 @@ void SaveTool::drawCustomArmourStyles() {
|
|||
ImGui::TextWrapped("In-game values are multiplied by 100. For example, 0.500 here is equal to 50 in-game.");
|
||||
|
||||
for(UnsignedInt i = 0; i < _currentMass->armourCustomStyles().size(); i++) {
|
||||
ImGui::PushID(i);
|
||||
ImGui::PushID(int(i));
|
||||
DCSResult result;
|
||||
result = drawCustomStyle(_currentMass->armourCustomStyles()[i]);
|
||||
switch(result) {
|
||||
|
|
|
@ -291,7 +291,7 @@ void SaveTool::drawCustomFrameStyles() {
|
|||
ImGui::TextWrapped("In-game values are multiplied by 100. For example, 0.500 here is equal to 50 in-game.");
|
||||
|
||||
for(UnsignedInt i = 0; i < _currentMass->frameCustomStyles().size(); i++) {
|
||||
ImGui::PushID(i);
|
||||
ImGui::PushID(int(i));
|
||||
DCSResult result;
|
||||
result = drawCustomStyle(_currentMass->frameCustomStyles()[i]);
|
||||
switch(result) {
|
||||
|
|
|
@ -269,7 +269,7 @@ void SaveTool::drawWeaponCategory(Containers::StringView name, Containers::Array
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
|
||||
ImGui::PushID(i);
|
||||
ImGui::PushID(int(i));
|
||||
|
||||
if(ImGui::Selectable(weapon.name.data(), _currentWeapon == &weapon)) {
|
||||
_currentWeapon = &weapon;
|
||||
|
@ -309,7 +309,7 @@ void SaveTool::drawWeaponCategory(Containers::StringView name, Containers::Array
|
|||
|
||||
ImGui::PopID();
|
||||
|
||||
if(weapon.attached == true) {
|
||||
if(weapon.attached) {
|
||||
ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, 0x1F008CFFu);
|
||||
}
|
||||
}
|
||||
|
@ -454,7 +454,9 @@ void SaveTool::drawWeaponEditor(Weapon& weapon) {
|
|||
return nullptr;
|
||||
}();
|
||||
|
||||
CORRADE_INTERNAL_ASSERT(map);
|
||||
if(!map) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(map->find(part.id) != map->cend()) {
|
||||
ImGui::TextUnformatted(map->at(part.id).data());
|
||||
|
@ -531,7 +533,7 @@ void SaveTool::drawWeaponEditor(Weapon& weapon) {
|
|||
drawAlignedText("Showing/editing decal");
|
||||
for(UnsignedLong i = 0; i < part.decals.size(); i++) {
|
||||
ImGui::SameLine();
|
||||
ImGui::RadioButton(std::to_string(i + 1).c_str(), &_selectedWeaponDecal, i);
|
||||
ImGui::RadioButton(std::to_string(i + 1).c_str(), &_selectedWeaponDecal, int(i));
|
||||
}
|
||||
|
||||
drawDecalEditor(part.decals[_selectedWeaponDecal]);
|
||||
|
@ -546,7 +548,7 @@ void SaveTool::drawWeaponEditor(Weapon& weapon) {
|
|||
drawAlignedText("Showing/editing accessory");
|
||||
for(UnsignedLong i = 0; i < part.accessories.size(); i++) {
|
||||
ImGui::SameLine();
|
||||
ImGui::RadioButton(std::string{char(65 + i)}.c_str(), &_selectedWeaponAccessory, i);
|
||||
ImGui::RadioButton(std::string{char(65 + i)}.c_str(), &_selectedWeaponAccessory, int(i));
|
||||
}
|
||||
|
||||
drawAccessoryEditor(part.accessories[_selectedWeaponAccessory], weapon.customStyles);
|
||||
|
|
|
@ -85,7 +85,7 @@ void SaveTool::drawProfileManager() {
|
|||
ImGui::TableNextRow();
|
||||
|
||||
ImGui::TableSetColumnIndex(0);
|
||||
ImGui::PushID(i);
|
||||
ImGui::PushID(int(i));
|
||||
if(ImGui::Selectable(profile.companyName().data(), false,
|
||||
ImGuiSelectableFlags_SpanAllColumns|ImGuiSelectableFlags_AllowItemOverlap))
|
||||
{
|
||||
|
@ -138,7 +138,7 @@ auto SaveTool::drawBackupListPopup() -> ImGuiID {
|
|||
if(ImGui::BeginPopupModal("Restore backup", nullptr,
|
||||
ImGuiWindowFlags_NoCollapse|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_AlwaysAutoResize))
|
||||
{
|
||||
ImGui::PushTextWrapPos(windowSize().x() * 0.40f);
|
||||
ImGui::PushTextWrapPos(float(windowSize().x()) * 0.40f);
|
||||
ImGui::Text("Are you sure you want to restore the %s backup from %.4i-%.2i-%.2i %.2i:%.2i:%.2i ? Any existing data will be overwritten.",
|
||||
_profileManager->backups()[backup_index].company.data(),
|
||||
_profileManager->backups()[backup_index].timestamp.year,
|
||||
|
@ -181,7 +181,7 @@ auto SaveTool::drawBackupListPopup() -> ImGuiID {
|
|||
if(ImGui::BeginPopupModal("Delete backup", nullptr,
|
||||
ImGuiWindowFlags_NoCollapse|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_AlwaysAutoResize))
|
||||
{
|
||||
ImGui::PushTextWrapPos(windowSize().x() * 0.40f);
|
||||
ImGui::PushTextWrapPos(float(windowSize().x()) * 0.40f);
|
||||
ImGui::Text("Are you sure you want to delete the %s backup from %.4i-%.2i-%.2i %.2i:%.2i:%.2i ? This operation is irreversible.",
|
||||
_profileManager->backups()[backup_index].company.data(),
|
||||
_profileManager->backups()[backup_index].timestamp.year,
|
||||
|
@ -284,7 +284,7 @@ auto SaveTool::drawBackupListPopup() -> ImGuiID {
|
|||
ImGui::TextUnformatted(backup.type == ProfileType::Demo ? "Demo" : "Full");
|
||||
|
||||
ImGui::TableSetColumnIndex(3);
|
||||
ImGui::PushID(i);
|
||||
ImGui::PushID(int(i));
|
||||
if(ImGui::SmallButton(ICON_FA_UNDO)) {
|
||||
backup_index = i;
|
||||
ImGui::OpenPopup(restore_backup_popup_id);
|
||||
|
@ -380,7 +380,7 @@ auto SaveTool::drawDeleteProfilePopup(std::size_t profile_index) -> ImGuiID {
|
|||
delete_builds = false;
|
||||
}
|
||||
|
||||
ImGui::PushTextWrapPos(windowSize().x() * 0.40f);
|
||||
ImGui::PushTextWrapPos(float(windowSize().x()) * 0.40f);
|
||||
ImGui::Text("Are you sure you want to delete the %s profile named %s ? This operation is irreversible.",
|
||||
_profileManager->profiles()[profile_index].isDemo() ? "demo" : "full game",
|
||||
_profileManager->profiles()[profile_index].companyName().data());
|
||||
|
|
|
@ -75,7 +75,7 @@ void SaveTool::updateCheckEvent(SDL_Event& event) {
|
|||
}
|
||||
bool operator>(const Version& other) const {
|
||||
if((fullVersion > other.fullVersion) ||
|
||||
(fullVersion == other.fullVersion && prerelease == false && other.prerelease == true))
|
||||
(fullVersion == other.fullVersion && !prerelease && other.prerelease))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ void SaveTool::updateCheckEvent(SDL_Event& event) {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
operator Containers::String() const {
|
||||
explicit operator Containers::String() const {
|
||||
return Utility::format("{}.{}.{}{}", major, minor, patch, prerelease ? "-pre" : "");
|
||||
}
|
||||
};
|
||||
|
@ -99,14 +99,14 @@ void SaveTool::updateCheckEvent(SDL_Event& event) {
|
|||
_queue.addToast(Toast::Type::Warning, "Your version is out of date.\nCheck the settings for more information."_s,
|
||||
std::chrono::milliseconds{5000});
|
||||
_updateAvailable = true;
|
||||
_latestVersion = latest_ver;
|
||||
_latestVersion = Containers::String{latest_ver};
|
||||
_releaseLink = Utility::format("https://williamjcm.ovh/git/williamjcm/MassBuilderSaveTool/releases/tag/v{}", components.front());
|
||||
_downloadLink = components.back();
|
||||
}
|
||||
else if(latest_ver == current_ver || (current_ver > latest_ver && current_ver.prerelease == true)) {
|
||||
else if(latest_ver == current_ver || (current_ver > latest_ver && current_ver.prerelease)) {
|
||||
_queue.addToast(Toast::Type::Success, "The application is already up to date."_s);
|
||||
}
|
||||
else if(current_ver > latest_ver && current_ver.prerelease == false) {
|
||||
else if(current_ver > latest_ver && !current_ver.prerelease) {
|
||||
_queue.addToast(Toast::Type::Warning, "Your version is more recent than the latest one in the repo. How???"_s);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
#include "SaveTool.h"
|
||||
|
||||
#include <Corrade/version.h>
|
||||
#include <Corrade/Containers/StringView.h>
|
||||
|
||||
#include <Magnum/version.h>
|
||||
#include <Magnum/versionIntegration.h>
|
||||
|
@ -32,7 +31,7 @@ extern const ImVec2 center_pivot;
|
|||
|
||||
void SaveTool::drawAbout() {
|
||||
ImGui::SetNextWindowPos(ImVec2{Vector2{windowSize() / 2.0f}}, ImGuiCond_Always, center_pivot);
|
||||
ImGui::SetNextWindowSize({windowSize().x() * 0.8f, windowSize().y() * 0.75f}, ImGuiCond_Always);
|
||||
ImGui::SetNextWindowSize({float(windowSize().x()) * 0.8f, float(windowSize().y()) * 0.75f}, ImGuiCond_Always);
|
||||
|
||||
ImGui::OpenPopup("About##AboutPopup");
|
||||
if(!ImGui::BeginPopupModal("About##AboutPopup", &_aboutPopup,
|
||||
|
@ -84,7 +83,7 @@ void SaveTool::drawAbout() {
|
|||
if(ImGui::CollapsingHeader("Licence")) {
|
||||
ImGui::TextWrapped("This application is made available under the terms of the GNU General Public License, version 3, the full text of which is available below:");
|
||||
|
||||
if(ImGui::BeginChild("##GPL", {0.0f, windowSize().y() * 0.3f}, true)) {
|
||||
if(ImGui::BeginChild("##GPL", {0.0f, float(windowSize().y()) * 0.3f}, true)) {
|
||||
static auto licence = _rs.getRaw("COPYING");
|
||||
ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[1]);
|
||||
ImGui::TextEx(licence.data(), licence.data() + licence.size(), ImGuiTextFlags_None);
|
||||
|
@ -114,7 +113,7 @@ void SaveTool::drawAbout() {
|
|||
ImGui::TextUnformatted("Licence: MIT");
|
||||
|
||||
static auto corrade_licence = _rs.getRaw("COPYING.Corrade");
|
||||
if(ImGui::BeginChild("##CorradeLicence", {0.0f, windowSize().y() * 0.3f}, true)) {
|
||||
if(ImGui::BeginChild("##CorradeLicence", {0.0f, float(windowSize().y()) * 0.3f}, true)) {
|
||||
ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[1]);
|
||||
ImGui::TextEx(corrade_licence.data(), corrade_licence.data() + corrade_licence.size(), ImGuiTextFlags_None);
|
||||
ImGui::PopFont();
|
||||
|
@ -142,7 +141,7 @@ void SaveTool::drawAbout() {
|
|||
ImGui::TextUnformatted("Licence: MIT");
|
||||
|
||||
static auto magnum_licence = _rs.getRaw("COPYING.Magnum");
|
||||
if(ImGui::BeginChild("##MagnumLicence", {0.0f, windowSize().y() * 0.3f}, true)) {
|
||||
if(ImGui::BeginChild("##MagnumLicence", {0.0f, float(windowSize().y()) * 0.3f}, true)) {
|
||||
ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[1]);
|
||||
ImGui::TextEx(magnum_licence.data(), magnum_licence.data() + magnum_licence.size(), ImGuiTextFlags_None);
|
||||
ImGui::PopFont();
|
||||
|
@ -168,7 +167,7 @@ void SaveTool::drawAbout() {
|
|||
ImGui::TextUnformatted("Licence: MIT");
|
||||
|
||||
static auto imgui_licence = _rs.getRaw("LICENSE.ImGui");
|
||||
if(ImGui::BeginChild("##ImGuiLicence", {0.0f, windowSize().y() * 0.3f}, true)) {
|
||||
if(ImGui::BeginChild("##ImGuiLicence", {0.0f, float(windowSize().y()) * 0.3f}, true)) {
|
||||
ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[1]);
|
||||
ImGui::TextEx(imgui_licence.data(), imgui_licence.data() + imgui_licence.size(), ImGuiTextFlags_None);
|
||||
ImGui::PopFont();
|
||||
|
@ -194,7 +193,7 @@ void SaveTool::drawAbout() {
|
|||
ImGui::TextUnformatted("Licence: zlib");
|
||||
|
||||
static auto sdl_licence = _rs.getRaw("LICENSE.SDL");
|
||||
if(ImGui::BeginChild("##SDLLicence", {0.0f, windowSize().y() * 0.3f}, true)) {
|
||||
if(ImGui::BeginChild("##SDLLicence", {0.0f, float(windowSize().y()) * 0.3f}, true)) {
|
||||
ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[1]);
|
||||
ImGui::TextEx(sdl_licence.data(), sdl_licence.data() + sdl_licence.size(), ImGuiTextFlags_None);
|
||||
ImGui::PopFont();
|
||||
|
@ -220,7 +219,7 @@ void SaveTool::drawAbout() {
|
|||
ImGui::TextUnformatted("Licence: 3-clause BSD");
|
||||
|
||||
static auto libzip_licence = _rs.getRaw("LICENSE.libzip");
|
||||
if(ImGui::BeginChild("##libzipLicence", {0.0f, windowSize().y() * 0.3f}, true)) {
|
||||
if(ImGui::BeginChild("##libzipLicence", {0.0f, float(windowSize().y()) * 0.3f}, true)) {
|
||||
ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[1]);
|
||||
ImGui::TextEx(libzip_licence.data(), libzip_licence.data() + libzip_licence.size(), ImGuiTextFlags_None);
|
||||
ImGui::PopFont();
|
||||
|
@ -245,7 +244,7 @@ void SaveTool::drawAbout() {
|
|||
ImGui::TextUnformatted("Licence: MIT");
|
||||
|
||||
static auto efsw_licence = _rs.getRaw("LICENSE.efsw");
|
||||
if(ImGui::BeginChild("##efswLicence", {0.0f, windowSize().y() * 0.3f}, true)) {
|
||||
if(ImGui::BeginChild("##efswLicence", {0.0f, float(windowSize().y()) * 0.3f}, true)) {
|
||||
ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[1]);
|
||||
ImGui::TextEx(efsw_licence.data(), efsw_licence.data() + efsw_licence.size(), ImGuiTextFlags_None);
|
||||
ImGui::PopFont();
|
||||
|
@ -270,7 +269,7 @@ void SaveTool::drawAbout() {
|
|||
ImGui::TextUnformatted("Licence: MIT/X derivative");
|
||||
|
||||
static auto curl_licence = _rs.getRaw("LICENSE.curl");
|
||||
if(ImGui::BeginChild("##libcurlLicence", {0.0f, windowSize().y() * 0.3f}, true)) {
|
||||
if(ImGui::BeginChild("##libcurlLicence", {0.0f, float(windowSize().y()) * 0.3f}, true)) {
|
||||
ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[1]);
|
||||
ImGui::TextEx(curl_licence.data(), curl_licence.data() + curl_licence.size(), ImGuiTextFlags_None);
|
||||
ImGui::PopFont();
|
||||
|
|
|
@ -58,11 +58,10 @@ void SaveTool::drawMainMenu() {
|
|||
drawAlignedText("Frame limiter:");
|
||||
ImGui::SameLine();
|
||||
|
||||
static UnsignedByte selection = static_cast<UnsignedByte>(_framelimit);
|
||||
static const char* framelimit_labels[3] = {
|
||||
static auto selection = static_cast<UnsignedByte>(_framelimit);
|
||||
static const char* framelimit_labels[2] = {
|
||||
"V-sync",
|
||||
"Half V-sync",
|
||||
"FPS cap, no V-sync"
|
||||
"Half V-sync"
|
||||
};
|
||||
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvailWidth());
|
||||
|
@ -77,26 +76,10 @@ void SaveTool::drawMainMenu() {
|
|||
_framelimit = Framelimit::HalfVsync;
|
||||
setSwapInterval(2);
|
||||
}
|
||||
if(ImGui::Selectable(framelimit_labels[2], _framelimit == Framelimit::FpsCap)) {
|
||||
selection = 2;
|
||||
_framelimit = Framelimit::FpsCap;
|
||||
setSwapInterval(0);
|
||||
setMinimalLoopPeriod(1000 / _fpsCap);
|
||||
}
|
||||
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
|
||||
if(_framelimit == Framelimit::FpsCap) {
|
||||
static constexpr UnsignedInt min_fps = 15;
|
||||
static constexpr UnsignedInt max_fps = 150;
|
||||
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvailWidth());
|
||||
if(ImGui::SliderScalar("##FpsSlider", ImGuiDataType_U32, &_fpsCap, &min_fps, &max_fps, "%u FPS", ImGuiSliderFlags_AlwaysClamp)) {
|
||||
setMinimalLoopPeriod(1000 / _fpsCap);
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Cheat mode", &_cheatMode);
|
||||
ImGui::SameLine();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
|
@ -149,11 +132,11 @@ void SaveTool::drawMainMenu() {
|
|||
|
||||
if(ImGui::BeginMenu(ICON_FA_DISCORD " Discord communities")) {
|
||||
if(ImGui::MenuItem("Official server")) {
|
||||
openUri("https://discord.gg/quS7E46");
|
||||
openUri("https://discord.gg/sekai-project");
|
||||
}
|
||||
|
||||
if(ImGui::MenuItem("Community server")) {
|
||||
openUri("https://discord.gg/YSSRTRB");
|
||||
openUri("https://discord.gg/massbuildercommunity");
|
||||
}
|
||||
|
||||
ImGui::EndMenu();
|
||||
|
|
|
@ -36,7 +36,7 @@ int main(int argc, char** argv) {
|
|||
Warning warning_intercept{&warning_intercept_stream};
|
||||
Error error_intercept{&error_intercept_stream};
|
||||
|
||||
LOG_INFO("M.A.S.S. Builder Save Tool version " SAVETOOL_VERSION);
|
||||
LOG_INFO("Initialising M.A.S.S. Builder Save Tool version " SAVETOOL_VERSION ".");
|
||||
|
||||
auto str = std::setlocale(LC_ALL, ".utf-8");
|
||||
if(str) {
|
||||
|
|
Loading…
Reference in a new issue