Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/gui/common/tooltips.js
var g_TooltipTextFormats = { | var g_TooltipTextFormats = { | ||||
"unit": { "font": "sans-10", "color": "orange" }, | "unit": { "font": "sans-10", "color": "orange" }, | ||||
"header": { "font": "sans-bold-13" }, | "header": { "font": "sans-bold-13" }, | ||||
"body": { "font": "sans-13" }, | "body": { "font": "sans-13" }, | ||||
"comma": { "font": "sans-12" }, | "comma": { "font": "sans-12" }, | ||||
"nameSpecificBig": { "font": "sans-bold-16" }, | "nameSpecificBig": { "font": "sans-bold-16" }, | ||||
"nameSpecificSmall": { "font": "sans-bold-12" }, | "nameSpecificSmall": { "font": "sans-bold-12" }, | ||||
"nameGeneric": { "font": "sans-bold-16" } | "nameGeneric": { "font": "sans-bold-16" } | ||||
}; | }; | ||||
var g_AttackTypes = { | |||||
"Melee": translate("Melee Attack:"), | |||||
"Ranged": translate("Ranged Attack:"), | |||||
"Capture": translate("Capture Attack:") | |||||
}; | |||||
var g_DamageTypes = new DamageTypes(); | var g_DamageTypes = new DamageTypes(); | ||||
var g_SplashDamageTypes = { | var g_SplashDamageTypes = { | ||||
"Circular": translate("Circular Splash Damage"), | "Circular": translate("Circular Splash Damage"), | ||||
"Linear": translate("Linear Splash Damage") | "Linear": translate("Linear Splash Damage") | ||||
}; | }; | ||||
var g_RangeTooltipString = { | var g_RangeTooltipString = { | ||||
▲ Show 20 Lines • Show All 196 Lines • ▼ Show 20 Lines | return sprintf(translate("%(label)s %(details)s"), { | ||||
"details": | "details": | ||||
Object.keys(template.armour).map( | Object.keys(template.armour).map( | ||||
dmgType => sprintf(translate("%(damage)s %(damageType)s %(armorPercentage)s"), { | dmgType => sprintf(translate("%(damage)s %(damageType)s %(armorPercentage)s"), { | ||||
"damage": template.armour[dmgType].toFixed(1), | "damage": template.armour[dmgType].toFixed(1), | ||||
"damageType": unitFont(translateWithContext("damage type", g_DamageTypes.GetNames()[dmgType])), | "damageType": unitFont(translateWithContext("damage type", g_DamageTypes.GetNames()[dmgType])), | ||||
"armorPercentage": | "armorPercentage": | ||||
'[font="sans-10"]' + | '[font="sans-10"]' + | ||||
sprintf(translate("(%(armorPercentage)s)"), { | sprintf(translate("(%(armorPercentage)s)"), { | ||||
"armorPercentage": armorLevelToPercentageString(template.armour[dmgType]) | "armorPercentage": armorLevelToPercentageString(template.armour[dmgType] || 0) //TODO capture? | ||||
}) + '[/font]' | }) + '[/font]' | ||||
}) | }) | ||||
).join(commaFont(translate(", "))) | ).join(commaFont(translate(", "))) | ||||
}); | }); | ||||
} | } | ||||
function damageTypesToText(dmg) | function damageTypesToText(dmg) | ||||
{ | { | ||||
if (!dmg) | if (!dmg) | ||||
return '[font="sans-12"]' + translate("(None)") + '[/font]'; | return '[font="sans-12"]' + translate("(None)") + '[/font]'; | ||||
return g_DamageTypes.GetTypes().filter( | return g_DamageTypes.GetTypes().filter( | ||||
dmgType => dmg[dmgType]).map( | dmgType => !!dmg[dmgType]).map( | ||||
dmgType => sprintf(translate("%(damage)s %(damageType)s"), { | dmgType => sprintf(translate("%(damage)s %(damageType)s"), { | ||||
"damage": dmg[dmgType].toFixed(1), | "damage": dmg[dmgType].toFixed(1), | ||||
"damageType": unitFont(translateWithContext("damage type", g_DamageTypes.GetNames()[dmgType])) | "damageType": unitFont(translateWithContext("damage type", g_DamageTypes.GetNames()[dmgType])) | ||||
})).join(commaFont(translate(", "))); | })).join(commaFont(translate(", "))); | ||||
} | } | ||||
function getAttackTooltip(template) | function getAttackTooltip(template) | ||||
{ | { | ||||
if (!template.attack) | if (!template.attack) | ||||
return ""; | return ""; | ||||
let tooltips = []; | let tooltips = []; | ||||
for (let type in template.attack) | for (let type in template.attack) | ||||
{ | { | ||||
if (type == "Slaughter") | //if (type == "Slaughter") | ||||
Freagarach: (Maybe a tag in ResourceGatherer that allows slaughtering?) | |||||
Done Inline ActionsWe have the restricted classes right to choose the attacktype with (or better dissallow slaughter for anything but Domestics). For the GUI we eventually might want to show the restricted classes, but mehing that here bb: We have the restricted classes right to choose the attacktype with (or better dissallow… | |||||
continue; // Slaughter is used to kill animals, so do not show it. | // continue; // Slaughter is used to kill animals, so do not show it. | ||||
let rate = sprintf(translate("%(label)s %(details)s"), { | let rate = sprintf(translate("%(label)s %(details)s"), { | ||||
"label": | "label": | ||||
headerFont( | headerFont( | ||||
template.buildingAI && type == "Ranged" ? | template.buildingAI && template.attack[type].projectile ? | ||||
translate("Interval:") : | translate("Interval:") : | ||||
translate("Rate:")), | translate("Rate:")), | ||||
"details": attackRateDetails(template, type) | "details": attackRateDetails(template, type) | ||||
}); | }); | ||||
let attackLabel = headerFont(g_AttackTypes[type]); | |||||
if (type == "Capture" || type != "Ranged") | |||||
{ | |||||
tooltips.push(sprintf(translate("%(attackLabel)s %(details)s, %(rate)s"), { | |||||
"attackLabel": attackLabel, | |||||
"details": | |||||
type == "Capture" ? | |||||
template.attack.Capture.value : | |||||
damageTypesToText(template.attack[type].damage), | |||||
"rate": rate | |||||
})); | |||||
continue; | |||||
} | |||||
let minRange = Math.round(template.attack[type].minRange); | let minRange = Math.round(template.attack[type].minRange); | ||||
let maxRange = Math.round(template.attack[type].maxRange); | let maxRange = Math.round(template.attack[type].maxRange); | ||||
let realRange = template.attack[type].elevationAdaptedRange; | let realRange = template.attack[type].elevationAdaptedRange; | ||||
let relativeRange = realRange ? Math.round(realRange - maxRange) : 0; | let relativeRange = realRange ? Math.round(realRange - maxRange) : 0; | ||||
tooltips.push(sprintf(g_RangeTooltipString[relativeRange ? "relative" : "non-relative"][minRange ? "minRange" : "no-minRange"], { | tooltips.push(sprintf(g_RangeTooltipString[relativeRange ? "relative" : "non-relative"][minRange ? "minRange" : "no-minRange"], { | ||||
"attackLabel": attackLabel, | "attackLabel": headerFont(translate(template.attack[type].tooltipHeader)), | ||||
"damageTypes": damageTypesToText(template.attack[type].damage), | "damageTypes": damageTypesToText(template.attack[type].damage), | ||||
"rangeLabel": headerFont(translate("Range:")), | "rangeLabel": headerFont(translate("Range:")), | ||||
"minRange": minRange, | "minRange": minRange, | ||||
"maxRange": maxRange, | "maxRange": maxRange, | ||||
"relativeRange": relativeRange > 0 ? sprintf(translate("+%(number)s"), { "number": relativeRange }) : relativeRange, | "relativeRange": relativeRange > 0 ? sprintf(translate("+%(number)s"), { "number": relativeRange }) : relativeRange, | ||||
"rangeUnit": | "rangeUnit": | ||||
unitFont(minRange || relativeRange ? | unitFont(minRange || relativeRange ? | ||||
// Translation: For example "0.5 to 1 meters", "1 (+1) meters" or "1 to 2 (+3) meters" | // Translation: For example "0.5 to 1 meters", "1 (+1) meters" or "1 to 2 (+3) meters" | ||||
▲ Show 20 Lines • Show All 539 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator
(Maybe a tag in ResourceGatherer that allows slaughtering?)