Ticket #3670: 3670_reqTooltips_v1-1.patch
File 3670_reqTooltips_v1-1.patch, 6.2 KB (added by , 7 years ago) |
---|
-
binaries/data/mods/public/globalscripts/Templates.js
diff --git a/binaries/data/mods/public/globalscripts/Templates.js b/binaries/data/mods/public/globalscripts/Templates.js index db54ca469..a782518d7 100644
a b function GetTechnologyDataHelper(template, civ, resources) 376 376 377 377 ret.description = template.description; 378 378 379 if (template.top) 380 ret.pair = [template.top, template.bottom]; 381 379 382 return ret; 380 383 } 381 384 -
binaries/data/mods/public/gui/common/tooltips.js
diff --git a/binaries/data/mods/public/gui/common/tooltips.js b/binaries/data/mods/public/gui/common/tooltips.js index 460c52061..00f28471d 100644
a b const g_TooltipTextFormats = { 2 2 "unit": ['[font="sans-10"][color="orange"]', '[/color][/font]'], 3 3 "header": ['[font="sans-bold-13"]', '[/font]'], 4 4 "body": ['[font="sans-13"]', '[/font]'], 5 "comma": ['[font="sans-12"]', '[/font]'] 5 "comma": ['[font="sans-12"]', '[/font]'], 6 "emphasis": ['[font="sans-bold-13"]', '[/font]'] 6 7 }; 7 8 8 9 const g_AttackTypes = { … … function commaFont(text) 42 43 return g_TooltipTextFormats.comma[0] + text + g_TooltipTextFormats.comma[1]; 43 44 } 44 45 46 function emphasisFont(text) 47 { 48 return g_TooltipTextFormats.emphasis[0] + text + g_TooltipTextFormats.emphasis[1]; 49 } 50 45 51 function getEntityTooltip(template) 46 52 { 47 53 if (!template.tooltip) … … function getRequiredTechnologyTooltip(technologyEnabled, requiredTechnology, civ 465 471 return ""; 466 472 467 473 return sprintf(translate("Requires %(technology)s"), { 468 "technology": getEntityNames(GetTechnologyData(requiredTechnology, civ))474 "technology": emphasisFont(getEntityNames(GetTechnologyData(requiredTechnology, civ))) 469 475 }); 470 476 } 471 477 -
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..bf1aa4011 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 { 166 if (tech.slice(0, 4) == "pair") 167 { 168 let pair = GetTechnologyData(tech).pair; 169 requiredTechs.push(sprintf(translate("%(firstTechOfPair)s or %(secondTechOfPair)s"), { 170 "firstTechOfPair": emphasisFont(getEntityNames(GetTechnologyData(pair[0]))), 171 "secondTechOfPair": emphasisFont(getEntityNames(GetTechnologyData(pair[1]))) 172 })); 173 } 174 else 175 requiredTechs.push(emphasisFont(getEntityNames(GetTechnologyData(tech)))); 176 } 177 178 if (requiredTechs.length) 179 { 180 if (requiredTechs.length == 1) 181 requirementTexts.push(requiredTechs[0]); 182 else 183 requirementTexts.push(sprintf(translate("%(listOfTechs)s and %(lastTechInList)s"), { 184 // Translation: This comma is used for separating first to penultimate elements in the list 185 "listOfTechs": requiredTechs.slice(0,-1).join(translate(", ")), 186 "lastTechInList": requiredTechs.slice(-1) 187 })); 188 } 189 } 190 191 if (req.entities) 192 { 193 let requiredEnts = []; 194 for (let entity of req.entities) 195 { 196 let current = 0; 197 switch (entity.check) 198 { 199 case "count": 200 current = GetSimState().players[player].classCounts[entity.class] || 0; 201 break; 202 203 case "variants": 204 current = GetSimState().players[player].typeCountsByClass[entity.class] ? 205 Object.keys(GetSimState().players[player].typeCountsByClass[entity.class]).length : 0; 206 break; 207 } 208 209 let remaining = entity.number - current; 210 if (remaining < 1) 211 continue; 212 213 requiredEnts.push(sprintf(translatePlural( 214 "%(number)s unit or structure of class %(class)s (%(remaining)s remaining)", 215 "%(number)s units or structures of class %(class)s (%(remaining)s remaining)", 216 entity.number 217 ), { 218 "number": entity.number, 219 "class": emphasisFont(entity.class), 220 "remaining": remaining, 221 })); 222 } 223 if (requiredEnts.length) 224 requirementTexts.push(requiredEnts.join(translate(" and "))); 225 } 226 227 optionalTexts.push(requirementTexts.join(" and ")); 228 } 147 229 230 return sprintf(translate("Requires %(requirementTexts)s"), { 231 "requirementTexts": optionalTexts.join(translate("; or ")) 232 }); 233 }