Added an experimental way to rename the company.
This commit is contained in:
parent
932052ab0a
commit
4c0f1b8ce5
4 changed files with 84 additions and 1 deletions
|
@ -174,6 +174,36 @@ void EvtMainFrame::backupSelectedProfileEvent(wxCommandEvent&) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EvtMainFrame::companyRenameEvent(wxMouseEvent&) {
|
||||||
|
const static std::string error_prefix = "Rename failed:\n\n";
|
||||||
|
|
||||||
|
EvtNameChangeDialog dialog{this};
|
||||||
|
dialog.setName(_profileManager.currentProfile()->companyName());
|
||||||
|
int result = dialog.ShowModal();
|
||||||
|
|
||||||
|
if(result == wxID_OK) {
|
||||||
|
switch(_mbManager.gameState()) {
|
||||||
|
case GameState::Unknown:
|
||||||
|
errorMessage(error_prefix + "For security reasons, renaming the company is disabled if the game's status is unknown.");
|
||||||
|
break;
|
||||||
|
case GameState::NotRunning:
|
||||||
|
if(!_profileManager.currentProfile()->renameCompany(dialog.getName())) {
|
||||||
|
errorMessage(error_prefix + _profileManager.currentProfile()->lastError());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_profileChoice->SetString(_profileChoice->GetCurrentSelection(),
|
||||||
|
wxString::Format("%s%s",
|
||||||
|
_profileManager.currentProfile()->companyName(),
|
||||||
|
_profileManager.currentProfile()->type() == ProfileType::Demo ? " (Demo)" : ""));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GameState::Running:
|
||||||
|
errorMessage(error_prefix + "Renaming the company is disabled while the game is running.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EvtMainFrame::importMassEvent(wxCommandEvent&) {
|
void EvtMainFrame::importMassEvent(wxCommandEvent&) {
|
||||||
const static std::string error_prefix = "Importing failed:\n\n";
|
const static std::string error_prefix = "Importing failed:\n\n";
|
||||||
|
|
||||||
|
@ -537,7 +567,7 @@ void EvtMainFrame::screenshotFileEventHandler(int event_type, const wxString& ev
|
||||||
|
|
||||||
void EvtMainFrame::updateProfileStats() {
|
void EvtMainFrame::updateProfileStats() {
|
||||||
Profile* current_profile = _profileManager.currentProfile();
|
Profile* current_profile = _profileManager.currentProfile();
|
||||||
_companyName->SetLabel(current_profile->companyName());
|
_companyName->SetLabel(current_profile->getCompanyName());
|
||||||
_credits->SetLabel(wxString::Format("%i", current_profile->getCredits()));
|
_credits->SetLabel(wxString::Format("%i", current_profile->getCredits()));
|
||||||
_storyProgress->SetLabel(wxString::Format("%i", current_profile->getStoryProgress()));
|
_storyProgress->SetLabel(wxString::Format("%i", current_profile->getStoryProgress()));
|
||||||
_lastMissionId->SetLabel(wxString::Format("%s", mission_id_map.find(current_profile->getLastMissionId()) != mission_id_map.end() ? mission_id_map.at(current_profile->lastMissionId()) : std::to_string(current_profile->lastMissionId())));
|
_lastMissionId->SetLabel(wxString::Format("%s", mission_id_map.find(current_profile->getLastMissionId()) != mission_id_map.end() ? mission_id_map.at(current_profile->lastMissionId()) : std::to_string(current_profile->lastMissionId())));
|
||||||
|
|
|
@ -45,6 +45,7 @@ class EvtMainFrame: public MainFrame {
|
||||||
// Profile-related events
|
// Profile-related events
|
||||||
void profileSelectionEvent(wxCommandEvent&);
|
void profileSelectionEvent(wxCommandEvent&);
|
||||||
void backupSelectedProfileEvent(wxCommandEvent&);
|
void backupSelectedProfileEvent(wxCommandEvent&);
|
||||||
|
void companyRenameEvent(wxMouseEvent&);
|
||||||
|
|
||||||
// M.A.S.S.-related events
|
// M.A.S.S.-related events
|
||||||
void importMassEvent(wxCommandEvent&);
|
void importMassEvent(wxCommandEvent&);
|
||||||
|
|
|
@ -96,6 +96,56 @@ auto Profile::companyName() const -> std::string const& {
|
||||||
return _companyName;
|
return _companyName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto Profile::getCompanyName() -> std::string const& {
|
||||||
|
auto mmap = Utility::Directory::mapRead(Utility::Directory::join(_profileDirectory, _filename));
|
||||||
|
|
||||||
|
auto it = std::search(mmap.begin(), mmap.end(), &company_name_locator[0], &company_name_locator[27]);
|
||||||
|
|
||||||
|
if(it == mmap.end()) {
|
||||||
|
_lastError = "Couldn't find a company name in " + _filename;
|
||||||
|
_companyName = "";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_companyName = std::string{it + 41};
|
||||||
|
}
|
||||||
|
|
||||||
|
return _companyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto Profile::renameCompany(const std::string& new_name) -> bool {
|
||||||
|
char length_difference = static_cast<char>(_companyName.length() - new_name.length());
|
||||||
|
|
||||||
|
std::string profile_data = Utility::Directory::readString(Utility::Directory::join(_profileDirectory, _filename));
|
||||||
|
|
||||||
|
auto iter = std::search(profile_data.begin(), profile_data.end(), &company_name_locator[0], &company_name_locator[27]);
|
||||||
|
|
||||||
|
if(iter != profile_data.end()) {
|
||||||
|
|
||||||
|
*(iter + 0x1C) = *(iter + 0x1C) - length_difference;
|
||||||
|
*(iter + 0x25) = *(iter + 0x25) - length_difference;
|
||||||
|
|
||||||
|
while(*(iter + 0x29) != '\0') {
|
||||||
|
profile_data.erase(iter + 0x29);
|
||||||
|
}
|
||||||
|
|
||||||
|
profile_data.insert(iter + 0x29, new_name.cbegin(), new_name.cend());
|
||||||
|
|
||||||
|
if(!Utility::Directory::writeString(Utility::Directory::join(_profileDirectory, _filename), profile_data)) {
|
||||||
|
_lastError = "The file" + _filename + " couldn't be written to.";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
_companyName = new_name;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_lastError = "Couldn't find the company name in " + _filename;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
auto Profile::activeFrameSlot() const -> std::int8_t {
|
auto Profile::activeFrameSlot() const -> std::int8_t {
|
||||||
return _activeFrameSlot;
|
return _activeFrameSlot;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,8 @@ class Profile {
|
||||||
auto steamId() const -> std::string const&;
|
auto steamId() const -> std::string const&;
|
||||||
|
|
||||||
auto companyName() const -> std::string const&;
|
auto companyName() const -> std::string const&;
|
||||||
|
auto getCompanyName() -> std::string const&;
|
||||||
|
auto renameCompany(const std::string& new_name) -> bool;
|
||||||
|
|
||||||
auto activeFrameSlot() const -> std::int8_t;
|
auto activeFrameSlot() const -> std::int8_t;
|
||||||
auto getActiveFrameSlot() -> std::int8_t;
|
auto getActiveFrameSlot() -> std::int8_t;
|
||||||
|
|
Loading…
Reference in a new issue