Sorting optional mods, triggering core-mods. (#60)

Сортировка производится по механике: Сначала все моды по порядку как в config.js, а потом всё остальное.

Триггер core-модификации работает так:
Если 2 модификации имеют параметр submod: false и одинаковую группу - то они будут переключатся, при включении одного из них. То есть не возможно будет включить две модификации сразу.
Полезно для тех же различных типов мини-карт.
This commit is contained in:
Yaroslavik 2018-11-13 04:49:56 +02:00 committed by Gravit
parent 909d55076c
commit 78ecb7ff43

View file

@ -84,7 +84,6 @@ var options = {
}, },
}; };
var upd = false; //Переменная обноеления интерфейса.
function updateOptional() function updateOptional()
{ {
var holder = options.overlay.lookup("#modlist").getContent(); var holder = options.overlay.lookup("#modlist").getContent();
@ -100,70 +99,78 @@ function updateOptional()
var profile = profilesList[serverHolder.old].object; var profile = profilesList[serverHolder.old].object;
var list = profile.getOptional(); var list = profile.getOptional();
var checkboxlist = new java.util.ArrayList; var checkboxlist = new java.util.ArrayList;
list.forEach(function(modfile,i,arr) { var modConfigKeys = Object.keys(optModNames.modInfo);
var modName = modfile.string, modDescription = "", subm = false; var dModsIds = [];
if(optModNames.modInfo[modfile.string] != null){//Есть ли хоть какое ни будь представление описания модификации?
var optModN = optModNames.modInfo[modfile.string]; for (var ik = 0, l = modConfigKeys.length + 1; ik <= l; ik++) {
if(optModN.name != null)//Есть ли у модификации имя? list.forEach(function(modfile) {
modName = optModN.name; if((modConfigKeys[ik] === modfile.string) || (ik == modConfigKeys.length+1 && dModsIds.indexOf(modfile.string) == -1)) {
if(optModN.description != null) //Есть ли описание? dModsIds.push(modfile.string);
modDescription = optModN.description;
if(optModN.submod != null && optModN.submod == true)//Это суб-модификация?
subm = true;
} else if(optModNames.optAutoModName) {
//Попытка автоматически создать представляемое имя модификации.
modName = modName.replace(new RegExp("(.*?(\/))",'g'),'');
modName = modName.replace(new RegExp("(-|_|[\\d]|\\+).*",'g'),'');
//Первая буква - заглавная
modName = modName[0].toUpperCase() + modName.slice(1);
}
var testMod = new javafx.scene.control.CheckBox(modName);
if(subm)//Это суб-модификация?
testMod.setTranslateX(25);
testMod.setSelected(modfile.mark); var modName = modfile.string, modDescription = "", subm = false;
testMod.setOnAction(function(event) { if(optModNames.modInfo[modfile.string] != null){//Есть ли хоть какое-нибудь представление описания модификации?
var isSelected = event.getSource().isSelected(); var optModN = optModNames.modInfo[modfile.string];
if(isSelected) if(optModN.name != null)//Есть ли у модификации имя?
{ modName = optModN.name;
profile.markOptional(modfile.string); if(optModN.description != null) //Есть ли описание?
LogHelper.debug("Selected mod %s", modfile.string); modDescription = optModN.description;
optionalModTreeToggle(true, modfile.string); if(optModN.submod != null && optModN.submod == true)//Это суб-модификация?
} subm = true;
else } else if(optModNames.optAutoModName) {
{ //Попытка автоматически создать представляемое имя модификации.
profile.unmarkOptional(modfile.string); modName = modName.replace(new RegExp("(.*?(\/))",'g'),'');
LogHelper.debug("Unselected mod %s", modfile.string); modName = modName.replace(new RegExp("(-|_|[\\d]|\\+).*",'g'),'');
optionalModTreeToggle(false, modfile.string); //Первая буква - заглавная
} modName = modName[0].toUpperCase() + modName.slice(1);
upd = true; }
updateOptional(); var testMod = new javafx.scene.control.CheckBox(modName);
});
checkboxlist.add(testMod); if(subm)//Это суб-модификация?
testMod.setTranslateX(25);
if(modDescription != "") { //Добавляем оаисание
textDescr = new javafx.scene.text.Text(modDescription); testMod.setSelected(modfile.mark);
if(subm){//Это суб-модификация? testMod.setOnAction(function(event) {
textDescr.setWrappingWidth(345); var isSelected = event.getSource().isSelected();
textDescr.setTranslateX(50); if(isSelected)
} else { {
textDescr.setWrappingWidth(370); profile.markOptional(modfile.string);
textDescr.setTranslateX(25); LogHelper.debug("Selected mod %s", modfile.string);
} optionalModTreeToggle(true, modfile.string);
textDescr.setTextAlignment(javafx.scene.text.TextAlignment.JUSTIFY); }
textDescr.getStyleClass().add("description-text"); else
checkboxlist.add(textDescr); {
} profile.unmarkOptional(modfile.string);
sep = new javafx.scene.control.Separator(); LogHelper.debug("Unselected mod %s", modfile.string);
sep.getStyleClass().add("separator"); optionalModTreeToggle(false, modfile.string);
checkboxlist.add(sep); }
updateOptional();
}); });
if(upd) holder.getChildren().clear(); checkboxlist.add(testMod);
if(modDescription != "") { //Добавляем описание?
textDescr = new javafx.scene.text.Text(modDescription);
if(subm){//Это суб-модификация?
textDescr.setWrappingWidth(345);
textDescr.setTranslateX(50);
} else {
textDescr.setWrappingWidth(370);
textDescr.setTranslateX(25);
}
textDescr.setTextAlignment(javafx.scene.text.TextAlignment.JUSTIFY);
textDescr.getStyleClass().add("description-text");
checkboxlist.add(textDescr);
}
sep = new javafx.scene.control.Separator();
sep.getStyleClass().add("separator");
checkboxlist.add(sep);
}
});
}
holder.getChildren().clear();
holder.getChildren().addAll(checkboxlist); holder.getChildren().addAll(checkboxlist);
}; };
function optionalModTreeToggle(enable, Imodfile) { //Переключение ветки модов function optionalModTreeToggle(enable, Imodfile)
{ //Переключение ветки модов
var profile = profilesList[serverHolder.old].object; var profile = profilesList[serverHolder.old].object;
if(optModNames.modInfo[Imodfile] != null) { if(optModNames.modInfo[Imodfile] != null) {
var modInfo = optModNames.modInfo[Imodfile]; var modInfo = optModNames.modInfo[Imodfile];
@ -182,6 +189,17 @@ function optionalModTreeToggle(enable, Imodfile) { //Переключение в
}); });
} }
if(modInfo.submod == false){//Включение core-модификации (Все core-модификации с той же группой будут отключены. К примеру 2 миникарты)
Object.keys(modList).forEach(function(key, id) {
if(modList[key] != null && modList[key].group != null) {
if(modList[key].group == modInfo.group && modList[key].submod == false && enable == true && key != Imodfile) {
profile.unmarkOptional(key);
LogHelper.debug("Unselected coreMod %s", key);
}
}
});
}
if(modInfo.submod == true){//Включение суб-модификации (Без core суб-моды работать не будут, так что его нужно включать) if(modInfo.submod == true){//Включение суб-модификации (Без core суб-моды работать не будут, так что его нужно включать)
Object.keys(modList).forEach(function(key, id) { Object.keys(modList).forEach(function(key, id) {
if(modList[key] != null && modList[key].group != null && modList[key].submod != null) { if(modList[key] != null && modList[key].group != null && modList[key].submod != null) {