Index: binaries/data/mods/mod/gui/modmod/modmod.js =================================================================== --- binaries/data/mods/mod/gui/modmod/modmod.js +++ binaries/data/mods/mod/gui/modmod/modmod.js @@ -48,6 +48,9 @@ var g_ModsEnabled = []; var g_ModsDisabled = []; +var g_ModsEnabledFiltered = []; +var g_ModsDisabledFiltered = []; + /** * Name of the mods installed by the ModInstaller. */ @@ -88,6 +91,8 @@ { g_ModsEnabled = Engine.ConfigDB_GetValue("user", "mod.enabledmods").split(/\s+/).filter(folder => !!g_Mods[folder]); g_ModsDisabled = Object.keys(g_Mods).filter(folder => g_ModsEnabled.indexOf(folder) == -1); + g_ModsEnabledFiltered = g_ModsEnabled; + g_ModsDisabledFiltered = g_ModsDisabled; } function validateMods() @@ -128,8 +133,8 @@ function displayModLists() { - displayModList("modsEnabledList", g_ModsEnabled); - displayModList("modsDisabledList", g_ModsDisabled); + g_ModsEnabledFiltered = displayModList("modsEnabledList", g_ModsEnabled); + g_ModsDisabledFiltered = displayModList("modsDisabledList", g_ModsDisabled); } function displayModList(listObjectName, folders) @@ -153,6 +158,18 @@ listObject.list_version = folders.map(folder => g_Mods[folder].version); listObject.list_dependencies = folders.map(folder => g_Mods[folder].dependencies.join(" ")); listObject.list = folders; + + return folders; +} + +function reloadDisabledMods() +{ + g_ModsDisabled = Object.keys(g_Mods).filter(folder => g_ModsEnabled.indexOf(folder) == -1); +} + +function reloadEnabledMods() +{ + g_ModsEnabled = Object.keys(g_Mods).filter(folder => g_ModsDisabled.indexOf(folder) == -1); } function enableMod() @@ -160,17 +177,17 @@ let modsDisabledList = Engine.GetGUIObjectByName("modsDisabledList"); let pos = modsDisabledList.selected; - if (pos == -1 || !areDependenciesMet(g_ModsDisabled[pos])) + if (pos == -1 || !areDependenciesMet(g_ModsDisabledFiltered[pos])) return; - g_ModsEnabled.push(g_ModsDisabled.splice(pos, 1)[0]); + g_ModsEnabled.push(g_ModsDisabledFiltered.splice(pos, 1)[0]); + reloadDisabledMods(); - if (pos >= g_ModsDisabled.length) + if (pos >= g_ModsDisabledFiltered.length) --pos; - modsDisabledList.selected = pos; - displayModLists(); + modsDisabledList.selected = pos; } function disableMod() @@ -180,12 +197,13 @@ if (pos == -1) return; - g_ModsDisabled.push(g_ModsEnabled.splice(pos, 1)[0]); + g_ModsDisabled.push(g_ModsEnabledFiltered.splice(pos, 1)[0]); // Remove mods that required the removed mod and cascade // Sort them, so we know which ones can depend on the removed mod // TODO: Find position where the removed mod would have fit (for now assume idx 0) + reloadEnabledMods(); sortEnabledMods(); for (let i = 0; i < g_ModsEnabled.length; ++i) @@ -195,9 +213,8 @@ --i; } - modsEnabledList.selected = Math.min(pos, g_ModsEnabled.length - 1); - displayModLists(); + modsEnabledList.selected = Math.min(pos, g_ModsEnabledFiltered.length - 1); } function applyFilters() @@ -270,7 +287,7 @@ obj.list = g_ModsEnabled; obj.selected = idx2; - displayModList("modsEnabledList", g_ModsEnabled); + g_ModsEnabledFiltered = displayModList("modsEnabledList", g_ModsEnabled); } function areDependenciesMet(folder) @@ -353,7 +370,7 @@ dependencies[folder1].indexOf(g_Mods[folder2].name) != -1 ? 1 : dependencies[folder2].indexOf(g_Mods[folder1].name) != -1 ? -1 : 0); - displayModList("modsEnabledList", g_ModsEnabled); + g_ModsEnabledFiltered = displayModList("modsEnabledList", g_ModsEnabled); } function selectedMod(listObjectName)