Ticket #3670: 3670_reqTooltips.patch
File 3670_reqTooltips.patch, 3.8 KB (added by , 7 years ago) |
---|
-
binaries/data/mods/public/gui/session/selection_panels.js
diff --git a/binaries/data/mods/public/gui/session/selection_panels.js b/binaries/data/mods/public/gui/session/selection_panels.js index 74789e0cd..6d2e2e820 100644
a b g_SelectionPanels.Research = { 830 830 if (!requirementsPassed) 831 831 { 832 832 let tip = template.requirementsTooltip; 833 let reqs = template.reqs; 834 for (let req of reqs) 835 { 836 if (!req.entities) 837 continue; 838 839 let entityCounts = []; 840 for (let entity of req.entities) 841 { 842 let current = 0; 843 switch (entity.check) 844 { 845 case "count": 846 current = playerState.classCounts[entity.class] || 0; 847 break; 848 849 case "variants": 850 current = playerState.typeCountsByClass[entity.class] ? 851 Object.keys(playerState.typeCountsByClass[entity.class]).length : 0; 852 break; 853 } 854 855 let remaining = entity.number - current; 856 if (remaining < 1) 857 continue; 858 859 entityCounts.push(sprintf(translatePlural("%(number)s entity of class %(class)s", "%(number)s entities of class %(class)s", remaining), { 860 "number": remaining, 861 "class": entity.class 862 })); 863 } 864 865 tip += " " + sprintf(translate("Remaining: %(entityCounts)s"), { 866 "entityCounts": entityCounts.join(translate(", ")) 867 }); 868 } 833 tip += "\n" + deriveTechRequirementsTooltip(template.reqs, player); 869 834 tooltips.push(tip); 870 835 } 871 836 tooltips.push(getNeededResourcesTooltip(neededResources)); -
binaries/data/mods/public/gui/session/selection_panels_helpers.js
diff --git a/binaries/data/mods/public/gui/session/selection_panels_helpers.js b/binaries/data/mods/public/gui/session/selection_panels_helpers.js index 6b9f507d6..d9aa631a4 100644
a b function formatBatchTrainingString(buildingsCountToTrainFullBatch, fullBatchSize 144 144 }) + "[/font]"; 145 145 } 146 146 147 /** 148 * 149 * @param reqs {array} Civ-specific requirements 150 */ 151 function deriveTechRequirementsTooltip(reqs, player) 152 { 153 let optionalTexts = []; 154 155 for (let req of reqs) 156 { 157 let requirementTexts = []; 158 159 if (req.techs) 160 { 161 let requiredTechs = []; 162 163 for (let tech of req.techs) 164 if (!GetSimState().players[player].researchedTechs[tech]) 165 requiredTechs.push("\"" + getEntityNames(GetTechnologyData(tech)) + "\""); 166 167 if (requiredTechs.length) 168 requirementTexts.push(sprintf(translatePlural("%(techNames)s technology", "%(techNames)s technologies", requiredTechs.length), { 169 "techNames": requiredTechs.join(translate(" & ")) 170 })); 171 } 172 173 if (req.entities) 174 { 175 let requiredEnts = []; 176 for (let entity of req.entities) 177 { 178 let current = 0; 179 switch (entity.check) 180 { 181 case "count": 182 current = GetSimState().players[player].classCounts[entity.class] || 0; 183 break; 184 185 case "variants": 186 current = GetSimState().players[player].typeCountsByClass[entity.class] ? 187 Object.keys(GetSimState().players[player].typeCountsByClass[entity.class]).length : 0; 188 break; 189 } 190 191 let remaining = entity.number - current; 192 if (remaining < 1) 193 continue; 194 195 requiredEnts.push(sprintf(translatePlural("%(number)s entity of class \"%(class)s\" (%(remaining)s remaining)", "%(number)s entities of class \"%(class)s\" (%(remaining)s remaining)", entity.number), { 196 "number": entity.number, 197 "class": entity.class, 198 "remaining": remaining, 199 })); 200 } 201 if (requiredEnts.length) 202 requirementTexts.push(requiredEnts.join(translate(" and "))); 203 } 204 205 optionalTexts.push(requirementTexts.join(" and ")); 206 } 147 207 208 return sprintf(translate("Requires %(requirementTexts)s"), { 209 "requirementTexts": optionalTexts.join(translate("; or ")) 210 }); 211 }