mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-23 09:01:08 +03:00
Update optional mods.. Again... (#66)
Поддержка многослойного дерева вложенности / новая механика выбора одного из национальных модов. Сортировка дерева производится так же, как и в прошлой версии (Сначала всё как config.js, потом всё остальное). Необходимо соблюдать порядок, это важно. Т.к. дерево на нём завязано. То есть модификации должны быть по порядку {Кор-мод}{Мод}{Аддон}, с соответствующими им уровнями вложенности. Теперь выбор "одного из" работает со всеми модами/субмодами. (К примеру: При включении миникарты - отключится неи со всеми его аддонами. Т.к. NEI и миникарта имели общий флаг группы [onlyOneGroup] и соответственно включенный параметр [onlyOne]) Видео с демонстрацией работы вложенности/зависимости и функции выбора "одного из": https://lww.page.link/FKec
This commit is contained in:
parent
93ab36477e
commit
7c58959e24
1 changed files with 43 additions and 25 deletions
|
@ -99,20 +99,25 @@ var options = {
|
||||||
var modConfigKeys = Object.keys(optModNames.modInfo);
|
var modConfigKeys = Object.keys(optModNames.modInfo);
|
||||||
var dModsIds = [];
|
var dModsIds = [];
|
||||||
|
|
||||||
|
modConfigKeys.forEach(function(key, id) {//По умолчанию индекс у ветви = 1. Выставляем его у всех неуказанных.
|
||||||
|
if(optModNames.modInfo[key].subTreeLevel == null)
|
||||||
|
optModNames.modInfo[key].subTreeLevel = 1;
|
||||||
|
});
|
||||||
|
|
||||||
for (var ik = 0, l = modConfigKeys.length + 1; ik <= l; ik++) {
|
for (var ik = 0, l = modConfigKeys.length + 1; ik <= l; ik++) {
|
||||||
list.forEach(function(modFile) {
|
list.forEach(function(modFile) {
|
||||||
if((modConfigKeys[ik] === modFile.string) || (ik == modConfigKeys.length+1 && dModsIds.indexOf(modFile.string) == -1)) {
|
if((modConfigKeys[ik] === modFile.string) || (ik == modConfigKeys.length+1 && dModsIds.indexOf(modFile.string) == -1)) {
|
||||||
dModsIds.push(modFile.string);
|
dModsIds.push(modFile.string);
|
||||||
|
|
||||||
var modName = modFile.string, modDescription = "", subm = false;
|
var modName = modFile.string, modDescription = "", subLevel = 1;
|
||||||
if(optModNames.modInfo[modFile.string] != null){//Есть ли хоть какое-нибудь представление описания модификации?
|
if(optModNames.modInfo[modFile.string] != null){//Есть ли хоть какое-нибудь представление описания модификации?
|
||||||
var optModN = optModNames.modInfo[modFile.string];
|
var optModN = optModNames.modInfo[modFile.string];
|
||||||
if(optModN.name != null)//Есть ли у модификации имя?
|
if(optModN.name != null)//Есть ли у модификации имя?
|
||||||
modName = optModN.name;
|
modName = optModN.name;
|
||||||
if(optModN.description != null) //Есть ли описание?
|
if(optModN.description != null) //Есть ли описание?
|
||||||
modDescription = optModN.description;
|
modDescription = optModN.description;
|
||||||
if(optModN.subMod != null && optModN.subMod == true)//Это суб-модификация?
|
if(optModN.subTreeLevel != null && optModN.subTreeLevel > 1)//Это суб-модификация?
|
||||||
subm = true;
|
subLevel = optModN.subTreeLevel;
|
||||||
} else if(optModNames.optAutoModName) {
|
} else if(optModNames.optAutoModName) {
|
||||||
//Попытка автоматически создать представляемое имя модификации.
|
//Попытка автоматически создать представляемое имя модификации.
|
||||||
modName = modName.replace(new RegExp("(.*?(\/))",'g'),'');
|
modName = modName.replace(new RegExp("(.*?(\/))",'g'),'');
|
||||||
|
@ -122,8 +127,9 @@ var options = {
|
||||||
}
|
}
|
||||||
var testMod = new javafx.scene.control.CheckBox(modName);
|
var testMod = new javafx.scene.control.CheckBox(modName);
|
||||||
|
|
||||||
if(subm)//Это суб-модификация?
|
if(subLevel > 1)
|
||||||
testMod.setTranslateX(25);
|
for(var i = 1; i < subLevel; i++)//Выделение субмодификаций сдвигом.
|
||||||
|
testMod.setTranslateX(25*i);
|
||||||
|
|
||||||
testMod.setSelected(modFile.mark);
|
testMod.setSelected(modFile.mark);
|
||||||
testMod.setOnAction(function(event) {
|
testMod.setOnAction(function(event) {
|
||||||
|
@ -146,12 +152,14 @@ var options = {
|
||||||
|
|
||||||
if(modDescription != "") { //Добавляем описание?
|
if(modDescription != "") { //Добавляем описание?
|
||||||
textDescr = new javafx.scene.text.Text(modDescription);
|
textDescr = new javafx.scene.text.Text(modDescription);
|
||||||
if(subm){//Это суб-модификация?
|
if(subLevel > 1) {
|
||||||
textDescr.setWrappingWidth(345);
|
for(var i = 1; i < subLevel; i++){
|
||||||
textDescr.setTranslateX(50);
|
textDescr.setWrappingWidth(370-(25*i));
|
||||||
|
textDescr.setTranslateX(25+(25*i));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
textDescr.setWrappingWidth(370);
|
textDescr.setWrappingWidth(370);
|
||||||
textDescr.setTranslateX(25);
|
textDescr.setTranslateX(25);
|
||||||
}
|
}
|
||||||
textDescr.setTextAlignment(javafx.scene.text.TextAlignment.JUSTIFY);
|
textDescr.setTextAlignment(javafx.scene.text.TextAlignment.JUSTIFY);
|
||||||
textDescr.getStyleClass().add("description-text");
|
textDescr.getStyleClass().add("description-text");
|
||||||
|
@ -171,37 +179,47 @@ var options = {
|
||||||
if(optModNames.modInfo[ImodFile] != null) {
|
if(optModNames.modInfo[ImodFile] != null) {
|
||||||
var modInfo = optModNames.modInfo[ImodFile];
|
var modInfo = optModNames.modInfo[ImodFile];
|
||||||
var modList = optModNames.modInfo;
|
var modList = optModNames.modInfo;
|
||||||
|
var modIDs = Object.keys(modList);
|
||||||
|
|
||||||
if(modInfo.group != null && modInfo.subMod != null) {
|
if(modInfo.subTreeLevel != null) {
|
||||||
|
|
||||||
if(modInfo.subMod == false){//Отключение core-модификации
|
if(modInfo.subTreeLevel >= 1){//Отключение core-модификации
|
||||||
Object.keys(modList).forEach(function(key, id) {
|
var stop = false;
|
||||||
if(modList[key] != null && modList[key].group != null && modList[key].subMod != null) {
|
modIDs.forEach(function(key, id) {
|
||||||
if(modList[key].group == modInfo.group && modList[key].subMod == true && enable == false) {
|
if(modList[key] != null && modList[key].subTreeLevel != null) {
|
||||||
|
if( modList[key].subTreeLevel > modInfo.subTreeLevel && modIDs.indexOf(key) > modIDs.indexOf(ImodFile) && enable == false && stop == false) {
|
||||||
profile.unmarkOptional(key);
|
profile.unmarkOptional(key);
|
||||||
LogHelper.debug("Unselected subMod %s", key);
|
LogHelper.debug("Unselected subMod %s", key);
|
||||||
|
} else if(modIDs.indexOf(key) > modIDs.indexOf(ImodFile) && modList[key].subTreeLevel <= modInfo.subTreeLevel && stop == false) {
|
||||||
|
//LogHelper.debug("STOP disable!! " + key);
|
||||||
|
stop = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if(modInfo.subMod == false){//Включение core-модификации (Все core-модификации с той же группой будут отключены. К примеру 2 миникарты)
|
if(modInfo.onlyOne == true){//Включение onlyOne-модификации (Все onlyOne-модификации с той же группой будут отключены. К примеру 2 миникарты)
|
||||||
Object.keys(modList).forEach(function(key, id) {
|
modIDs.forEach(function(key, id) {
|
||||||
if(modList[key] != null && modList[key].group != null) {
|
if(modList[key] != null && modList[key].onlyOneGroup != null) {
|
||||||
if(modList[key].group == modInfo.group && modList[key].subMod == false && enable == true && key != ImodFile) {
|
if(modList[key].onlyOneGroup == modInfo.onlyOneGroup && modList[key].onlyOne == true && enable == true && key != ImodFile) {
|
||||||
profile.unmarkOptional(key);
|
profile.unmarkOptional(key);
|
||||||
LogHelper.debug("Unselected coreMod %s", key);
|
LogHelper.debug("Unselected Mod (onlyOne toggle) %s", key);
|
||||||
|
options.treeToggle(false, key); //И все его подмодификации канут в Лету..
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if(modInfo.subMod == true){//Включение суб-модификации (Без core суб-моды работать не будут, так что его нужно включать)
|
if(modInfo.subTreeLevel > 1){//Включение суб-модификации (Без core суб-моды работать не будут, так что его нужно включать) (Включаем всю ветку зависимости)
|
||||||
Object.keys(modList).forEach(function(key, id) {
|
var reverseModList = Object.keys(modList).reverse();
|
||||||
if(modList[key] != null && modList[key].group != null && modList[key].subMod != null) {
|
var tsl = modInfo.subTreeLevel-1;
|
||||||
if(modList[key].group == modInfo.group && modList[key].subMod == false && enable == true) {
|
reverseModList.forEach(function(key, id) {
|
||||||
|
if(modList[key] != null && modList[key].subTreeLevel != null) {
|
||||||
|
if(modList[key].subTreeLevel == tsl && modIDs.indexOf(key) < modIDs.indexOf(ImodFile) && enable == true) {
|
||||||
profile.markOptional(key);
|
profile.markOptional(key);
|
||||||
LogHelper.debug("Selected coreMod %s", key);
|
LogHelper.debug("Selected coreMod %s", key);
|
||||||
|
options.treeToggle(true, key); //Для срабатывания onlyOne-модификаций.
|
||||||
|
tsl--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue