exitcode_t CommandLine::HandleCommandConvert(CommandLineArgEnumerator * enumerator) { exitcode_t result = CommandLine::HandleCommandDefault(); if (result != EXITCODE_CONTINUE) { return result; } // Get the source path const utf8 * rawSourcePath; if (!enumerator->TryPopString(&rawSourcePath)) { Console::Error::WriteLine("Expected a source path."); return EXITCODE_FAIL; } utf8 sourcePath[MAX_PATH]; Path::GetAbsolute(sourcePath, sizeof(sourcePath), rawSourcePath); uint32 sourceFileType = get_file_extension_type(sourcePath); // Get the destination path const utf8 * rawDestinationPath; if (!enumerator->TryPopString(&rawDestinationPath)) { Console::Error::WriteLine("Expected a destination path."); return EXITCODE_FAIL; } utf8 destinationPath[MAX_PATH]; Path::GetAbsolute(destinationPath, sizeof(sourcePath), rawDestinationPath); uint32 destinationFileType = get_file_extension_type(destinationPath); // Validate target type if (destinationFileType != FILE_EXTENSION_SC6 && destinationFileType != FILE_EXTENSION_SV6) { Console::Error::WriteLine("Only conversion to .SC6 or .SV4 is supported."); return EXITCODE_FAIL; } // Validate the source type switch (sourceFileType) { case FILE_EXTENSION_SC4: case FILE_EXTENSION_SV4: break; case FILE_EXTENSION_SC6: if (destinationFileType == FILE_EXTENSION_SC6) { Console::Error::WriteLine("File is already a RollerCoaster Tycoon 2 scenario."); return EXITCODE_FAIL; } break; case FILE_EXTENSION_SV6: if (destinationFileType == FILE_EXTENSION_SV6) { Console::Error::WriteLine("File is already a RollerCoaster Tycoon 2 saved game."); return EXITCODE_FAIL; } break; default: Console::Error::WriteLine("Only conversion from .SC4, .SV4, .SC6 or .SV6 is supported."); return EXITCODE_FAIL; } // Perform conversion WriteConvertFromAndToMessage(sourceFileType, destinationFileType); gOpenRCT2Headless = true; // if (!openrct2_initialise()) // { // Console::Error::WriteLine("Error while initialising OpenRCT2."); // return EXITCODE_FAIL; // } try { auto importer = ParkImporter::Create(sourcePath); importer->Load(sourcePath); importer->Import(); } catch (const std::exception &ex) { Console::Error::WriteLine(ex.what()); return EXITCODE_FAIL; } if (sourceFileType == FILE_EXTENSION_SC4 || sourceFileType == FILE_EXTENSION_SC6) { // We are converting a scenario, so reset the park scenario_begin(); } try { auto exporter = std::make_unique<S6Exporter>(); // HACK remove the main window so it saves the park with the // correct initial view window_close_by_class(WC_MAIN_WINDOW); exporter->Export(); if (destinationFileType == FILE_EXTENSION_SC6) { exporter->SaveScenario(destinationPath); } else { exporter->SaveGame(destinationPath); } } catch (const std::exception &ex) { Console::Error::WriteLine(ex.what()); return EXITCODE_FAIL; } Console::WriteLine("Conversion successful!"); return EXITCODE_OK; }
void QSimTestGUI::SaveLastScenario(){ if(old_filename.isNull()) SaveScenario(); else SaveScenario(old_filename); }