fix: EngineController::reconfigPacks
This commit is contained in:
@@ -223,7 +223,8 @@ void EngineController::reconfigPacks(
|
|||||||
|
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
for (const auto& id : packsToRemove) {
|
for (const auto& id : packsToRemove) {
|
||||||
if (content->getPackRuntime(id)->getStats().hasSavingContent()) {
|
auto runtime = content->getPackRuntime(id);
|
||||||
|
if (runtime && runtime->getStats().hasSavingContent()) {
|
||||||
if (hasIndices) {
|
if (hasIndices) {
|
||||||
ss << ", ";
|
ss << ", ";
|
||||||
}
|
}
|
||||||
@@ -234,13 +235,22 @@ void EngineController::reconfigPacks(
|
|||||||
|
|
||||||
runnable removeFunc = [=]() {
|
runnable removeFunc = [=]() {
|
||||||
if (controller == nullptr) {
|
if (controller == nullptr) {
|
||||||
|
try {
|
||||||
auto manager = engine->createPacksManager(fs::path(""));
|
auto manager = engine->createPacksManager(fs::path(""));
|
||||||
manager.scan();
|
manager.scan();
|
||||||
std::vector<std::string> names = engine->getBasePacks();
|
std::vector<std::string> names = PacksManager::getNames(engine->getContentPacks());
|
||||||
for (auto& name : packsToAdd) {
|
for (const auto& id : packsToAdd) {
|
||||||
names.push_back(name);
|
names.push_back(id);
|
||||||
}
|
}
|
||||||
|
for (const auto& id : packsToRemove) {
|
||||||
|
manager.exclude(id);
|
||||||
|
names.erase(std::find(names.begin(), names.end(), id));
|
||||||
|
}
|
||||||
|
names = manager.assembly(names);
|
||||||
engine->getContentPacks() = manager.getAll(names);
|
engine->getContentPacks() = manager.getAll(names);
|
||||||
|
} catch (const contentpack_error& err) {
|
||||||
|
throw std::runtime_error(std::string(err.what())+" ["+err.getPackId()+"]");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
auto world = controller->getLevel()->getWorld();
|
auto world = controller->getLevel()->getWorld();
|
||||||
auto wfile = world->wfile.get();
|
auto wfile = world->wfile.get();
|
||||||
|
|||||||
Reference in New Issue
Block a user