Ticket #1646: techtiphack3.diff

File techtiphack3.diff, 5.4 KB (added by zoot, 7 years ago)
  • gui/session/utility_functions.js

     
    386386    return "\n\n[font=\"serif-bold-13\"][color=\"red\"]Insufficient resources:[/color][/font]\n" + formatted.join(", ");
    387387}
    388388
     389/**
     390 * Returns a formatted requirements tooltip.
     391 */
     392function getFormattedRequirementsTooltip(tmpl, vars)
     393{
     394    // TODO: Support entire requirements format.
     395    if (vars.tech)
     396    {
     397        return tmpl;
     398    }
     399    else if (vars.all)
     400    {
     401        return tmpl;
     402    }
     403    else if (vars.any)
     404    {
     405        return tmpl;
     406    }
     407    else if (vars.class)
     408    {
     409        // TODO: Replace with human-readable class name.
     410        var tooltip = tmpl.replace("%class%", vars.class);
     411        if (vars.number && vars.number > 0)
     412        {
     413            tooltip = tooltip.replace("%number%", vars.number);
     414        }
     415        else
     416        {
     417            tooltip = tooltip.replace("%number%", 0);
     418        }
     419        if (vars.numberCount && vars.numberCount > 0)
     420        {
     421            tooltip = tooltip.replace("%numberCount%", vars.numberCount);
     422        }
     423        else
     424        {
     425            tooltip = tooltip.replace("%numberCount%", 0);
     426        }
     427        if (vars.numberLeft && vars.numberLeft > 0)
     428        {
     429            tooltip = tooltip.replace("%numberLeft%", vars.numberLeft);
     430        }
     431        else
     432        {
     433            tooltip = tooltip.replace("%numberLeft%", 0);
     434        }
     435        return tooltip;
     436    }
     437
     438    return tmpl;
     439}
     440
    389441function getEntitySpeed(template)
    390442{
    391443    var speed = "";
  • gui/session/unit_commands.js

     
    575575            if (guiName == RESEARCH && !Engine.GuiInterfaceCall("CheckTechnologyRequirements", entType))
    576576            {
    577577                button.enabled = false;
    578                 button.tooltip += "\n" + GetTechnologyData(entType).requirementsTooltip;
     578                var reqVars = Engine.GuiInterfaceCall("GetRequirementsVars", template.requirements);
     579                button.tooltip += "\n" + getFormattedRequirementsTooltip(GetTechnologyData(entType).requirementsTooltip, reqVars);
    579580                grayscale = "grayscale:";
    580581            }
    581582           
  • simulation/components/GuiInterface.js

     
    516516    }
    517517    ret.tooltip = template.tooltip;
    518518   
     519    ret.requirements = template.requirements;
    519520    if (template.requirementsTooltip)
    520521        ret.requirementsTooltip = template.requirementsTooltip;
    521522    else
     
    575576    return cmpPlayer.GetNeededResources(amounts);
    576577};
    577578
     579GuiInterface.prototype.GetRequirementsVars = function(player, reqs)
     580{
     581    var cmpTechnologyManager = QueryPlayerIDInterface(player, IID_TechnologyManager);
     582    return cmpTechnologyManager.GetRequirementsVars(reqs);
     583};
    578584
    579585GuiInterface.prototype.PushNotification = function(notification)
    580586{
     
    16271633    "CheckTechnologyRequirements": 1,
    16281634    "GetStartedResearch": 1,
    16291635    "GetNeededResources": 1,
     1636    "GetRequirementsVars": 1,
    16301637    "GetNextNotification": 1,
    16311638
    16321639    "GetAvailableFormations": 1,
  • simulation/components/TechnologyManager.js

     
    163163    return false;
    164164};
    165165
     166
     167// Private function for returning a set of measures pertaining to requirements
     168TechnologyManager.prototype.GetRequirementsVars = function (reqs)
     169{
     170    var reqVars = {};
     171
     172    // If there are no requirements then all requirements are met
     173    if (!reqs)
     174        return false;
     175   
     176    if (reqs.tech)
     177    {
     178        return false;
     179    }
     180    else if (reqs.all)
     181    {
     182        return false;
     183    }
     184    else if (reqs.any)
     185    {
     186        return false;
     187    }
     188    else if (reqs.class)
     189    {
     190        reqVars.class = reqs.class;
     191        if (reqs.numberOfTypes)
     192            return false;
     193        else if (reqs.number)
     194        {
     195            reqVars.number = reqs.number;
     196            if (!this.classCounts[reqs.class])
     197            {
     198                reqVars.numberCount = 0;
     199                reqVars.numberLeft = reqs.number;
     200            }
     201            else if (this.classCounts[reqs.class] < reqs.number)
     202            {           
     203                reqVars.numberCount = this.classCounts[reqs.class];
     204                reqVars.numberLeft = reqs.number - this.classCounts[reqs.class];
     205            }
     206            else
     207                reqVars = false;
     208            return reqVars;
     209        }
     210    }
     211   
     212    // The technologies requirements are not a recognised format
     213    error("GetRequirementsVars: Bad requirements " + uneval(reqs));
     214    return false;
     215};
     216
    166217TechnologyManager.prototype.OnGlobalOwnershipChanged = function (msg)
    167218{
    168219    // This automatically updates typeCounts, classCounts and typeCountsByClass
  • simulation/data/technologies/phase_town.json

     
    33    "description": "Advances from a small village to a bustling town, ready to expand rapidly.",
    44    "cost": { "food": 500, "wood": 500, "stone": 0, "metal": 0 },
    55    "requirements": { "class": "Village", "number": 6 },
    6     "requirementsTooltip": "Requires 5 Village Phase structures (except Palisades and Farm Fields).",
     6    "requirementsTooltip": "Requires 6 Village Phase structures (except Palisades and Farm Fields). ([color=\"red\"]%numberCount%/%number%[/color] built.)",
    77    "supersedes": "phase_village",
    88    "icon": "town_phase.png",
    99    "researchTime": 30,