From 794fa82efbb092ef06e7154ffab2732bd4806b1f Mon Sep 17 00:00:00 2001 From: Freagarach Date: Tue, 11 Jan 2022 06:34:07 +0000 Subject: [PATCH] Warn when finding an entity with Reasearcher/Trainer but without ProductionQueue. As requested by @Silier and @Stan. Following 0c4f59d0a7. Differential revision: https://code.wildfiregames.com/D4404 Comments by: @Silier, @smiley, @Stan This was SVN commit r26200. --- .../public/gui/session/selection_panels.js | 22 +++++++++++++------ .../mods/public/gui/session/unit_actions.js | 4 ++-- .../mods/public/gui/session/unit_commands.js | 4 ++++ 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/binaries/data/mods/public/gui/session/selection_panels.js b/binaries/data/mods/public/gui/session/selection_panels.js index c2e2d51102..66d0ea3a89 100644 --- a/binaries/data/mods/public/gui/session/selection_panels.js +++ b/binaries/data/mods/public/gui/session/selection_panels.js @@ -627,13 +627,19 @@ g_SelectionPanels.Research = { { let ret = []; if (unitEntStates.length == 1) - return !unitEntStates[0].researcher || !unitEntStates[0].researcher.technologies ? ret : - unitEntStates[0].researcher.technologies.map(tech => ({ - "tech": tech, - "techCostMultiplier": unitEntStates[0].researcher.techCostMultiplier, - "researchFacilityId": unitEntStates[0].id, - "isUpgrading": !!unitEntStates[0].upgrade && unitEntStates[0].upgrade.isUpgrading - })); + { + const entState = unitEntStates[0]; + if (!entState?.researcher?.technologies) + return ret; + if (!entState.production) + warn("Researcher without ProductionQueue found: " + entState.id + "."); + return entState.researcher.technologies.map(tech => ({ + "tech": tech, + "techCostMultiplier": entState.researcher.techCostMultiplier, + "researchFacilityId": entState.id, + "isUpgrading": !!entState.upgrade && entState.upgrade.isUpgrading + })); + } let sortedEntStates = unitEntStates.sort((a, b) => (!b.upgrade || !b.upgrade.isUpgrading) - (!a.upgrade || !a.upgrade.isUpgrading) || @@ -644,6 +650,8 @@ g_SelectionPanels.Research = { { if (!state.researcher || !state.researcher.technologies) continue; + if (!state.production) + warn("Researcher without ProductionQueue found: " + state.id + "."); // Remove the techs we already have in ret (with the same name and techCostMultiplier) const filteredTechs = state.researcher.technologies.filter( diff --git a/binaries/data/mods/public/gui/session/unit_actions.js b/binaries/data/mods/public/gui/session/unit_actions.js index 0919367aa0..28d1fe7696 100644 --- a/binaries/data/mods/public/gui/session/unit_actions.js +++ b/binaries/data/mods/public/gui/session/unit_actions.js @@ -1793,7 +1793,7 @@ var g_EntityCommands = "autoqueue-on": { "getInfo": function(entStates) { - if (entStates.every(entState => !entState.trainer || !entState.trainer.entities.length || entState.production.autoqueue)) + if (entStates.every(entState => !entState.trainer?.entities?.length || !entState.production || entState.production.autoqueue)) return false; return { "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.queueunit.autoqueueon") + @@ -1813,7 +1813,7 @@ var g_EntityCommands = "autoqueue-off": { "getInfo": function(entStates) { - if (entStates.every(entState => !entState.trainer || !entState.trainer.entities.length || !entState.production.autoqueue)) + if (entStates.every(entState => !entState.production?.autoqueue)) return false; return { "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.queueunit.autoqueueoff") + diff --git a/binaries/data/mods/public/gui/session/unit_commands.js b/binaries/data/mods/public/gui/session/unit_commands.js index e96ca36e3d..1755de477a 100644 --- a/binaries/data/mods/public/gui/session/unit_commands.js +++ b/binaries/data/mods/public/gui/session/unit_commands.js @@ -192,7 +192,11 @@ function getAllTrainableEntities(selection) { let state = GetEntityState(ent); if (state?.trainer?.entities?.length) + { + if (!state.production) + warn("Trainer without Production Queue found: " + ent + "."); trainableEnts = trainableEnts.concat(state.trainer.entities); + } } // Remove duplicates