Ticket #3401: structreePhasePairFix.patch

File structreePhasePairFix.patch, 5.5 KB (added by s0600204, 9 years ago)
  • binaries/data/mods/public/gui/structree/draw.js

    function draw()  
    7070                {
    7171                    for (let prod of stru.production.technology[prod_pha])
    7272                    {
    73                         prod = (prod.slice(0,5) == "phase") ? g_ParsedData.phases[prod] : g_ParsedData.techs[prod];
     73                        prod = (depath(prod).slice(0,5) == "phase") ? g_ParsedData.phases[prod] : g_ParsedData.techs[prod];
    7474                        if (!drawProdIcon(i, s, r, p, prod))
    7575                            break;
    7676                        p++;
  • binaries/data/mods/public/gui/structree/load.js

    function loadUnit(templateName)  
    4646
    4747    if (unit.requiredTechnology)
    4848    {
    49         if (unit.requiredTechnology.slice(0, 5) == "phase")
     49        if (depath(unit.requiredTechnology).slice(0, 5) == "phase")
    5050            unit.phase = unit.requiredTechnology;
    5151        else if (unit.requiredTechnology.length)
    5252            unit.required = unit.requiredTechnology;
    function loadStructure(templateName)  
    8080
    8181    if (structure.requiredTechnology)
    8282    {
    83         if (structure.requiredTechnology.slice(0, 5) == "phase")
     83        if (depath(structure.requiredTechnology).slice(0, 5) == "phase")
    8484            structure.phase = structure.requiredTechnology;
    8585        else if (structure.requiredTechnology.length)
    8686            structure.required = structure.requiredTechnology;
  • binaries/data/mods/public/gui/structree/structree.js

    var g_CallbackSet = false;  
    1212/**
    1313 * Initialize the dropdown containing all the available civs
    1414 */
    15 function init(data)
     15function init(data = {})
    1616{
    1717    g_CivData = loadCivData(true);
    1818
    function selectCiv(civCode)  
    9494    {
    9595        let realcode = depath(techcode);
    9696
    97         if (realcode.slice(0,4) == "pair")
     97        if (realcode.slice(0,4) == "pair" || realcode.indexOf("_pair") > -1)
    9898            techPairs[techcode] = loadTechnologyPair(techcode);
    9999        else if (realcode.slice(0,5) == "phase")
    100100            g_ParsedData.phases[techcode] = loadPhase(techcode);
    function selectCiv(civCode)  
    108108        let pair = techPairs[paircode];
    109109        for (let techcode of pair.techs)
    110110        {
    111             let newTech = loadTechnology(techcode);
    112 
    113             if (pair.req !== "")
     111            if (depath(techcode).slice(0, 5) === "phase")
     112                g_ParsedData.phases[techcode] = loadPhase(techcode);
     113            else
    114114            {
    115                 if ("generic" in newTech.reqs)
    116                     newTech.reqs.generic.concat(techPairs[pair.req].techs);
    117                 else
    118                     for (let civkey of Object.keys(newTech.reqs))
    119                         newTech.reqs[civkey].concat(techPairs[pair.req].techs);
     115                let newTech = loadTechnology(techcode);
     116                if (pair.req !== "")
     117                {
     118                    if ("generic" in newTech.reqs)
     119                        newTech.reqs.generic.concat(techPairs[pair.req].techs);
     120                    else
     121                        for (let civkey of Object.keys(newTech.reqs))
     122                            newTech.reqs[civkey].concat(techPairs[pair.req].techs);
     123                }
     124                g_ParsedData.techs[techcode] = newTech;
    120125            }
    121             g_ParsedData.techs[techcode] = newTech;
    122126        }
    123127    }
    124128
    125129    // Establish phase order
    126130    g_ParsedData.phaseList = unravelPhases(g_ParsedData.techs);
    127131    for (let phasecode of g_ParsedData.phaseList)
     132    {
     133        let phaseInfo = loadTechData(phasecode);
    128134        g_ParsedData.phases[phasecode] = loadPhase(phasecode);
    129135
     136        if ("requirements" in phaseInfo)
     137            for (let op in phaseInfo.requirements)
     138            {
     139                let val = phaseInfo.requirements[op];
     140                if (op == "any")
     141                    for (let v of val)
     142                    {
     143                        let k = Object.keys(v);
     144                        k = k[0];
     145                        v = v[k];
     146                        if (k == "tech")
     147                            if (v in g_ParsedData.phases)
     148                                g_ParsedData.phases[v].actualPhase = phasecode;
     149                            else if (v in techPairs)
     150                                for (let t of techPairs[v].techs)
     151                                    g_ParsedData.phases[t].actualPhase = phasecode;
     152                    }
     153            }
     154    }
     155
    130156    // Group production lists of structures by phase
    131157    for (let structCode of g_Lists.structures)
    132158    {
    function selectCiv(civCode)  
    151177        {
    152178            let phase = "";
    153179
    154             if (prod.slice(0,5) === "phase")
     180            if (depath(prod).slice(0,5) === "phase")
    155181            {
    156182                phase = g_ParsedData.phaseList.indexOf(g_ParsedData.phases[prod].actualPhase);
    157183                if (phase > 0)
    function selectCiv(civCode)  
    193219            let phase = "";
    194220
    195221            if (unit.phase !== false)
    196                 phase = unit.phase;
     222                if (g_ParsedData.phaseList.indexOf(unit.phase) < 0)
     223                    phase = g_ParsedData.phases[unit.phase].actualPhase;
     224                else
     225                    phase = unit.phase;
    197226            else if (unit.required !== undefined)
    198227            {
    199                 let reqs = g_ParsedData.techs[unit.required].reqs;
    200                 if (g_SelectedCiv in reqs)
    201                     phase = reqs[g_SelectedCiv][0];
     228                if (unit.required in g_ParsedData.phases)
     229                    phase = g_ParsedData.phases[unit.required].actualPhase;
    202230                else
    203                     phase = reqs.generic[0];
     231                {
     232                    let reqs = g_ParsedData.techs[unit.required].reqs;
     233                    if (g_SelectedCiv in reqs)
     234                        phase = reqs[g_SelectedCiv][0];
     235                    else
     236                        phase = reqs.generic[0];
     237                }
    204238            }
    205239            else if (structInfo.phase !== false)
    206240                phase = structInfo.phase;
    function selectCiv(civCode)  
    229263            g_ParsedData.structures[structCode].phase = g_ParsedData.phaseList[0];
    230264
    231265        let myPhase = g_ParsedData.structures[structCode].phase;
     266        if (g_ParsedData.phaseList.indexOf(myPhase) === -1)
     267            myPhase = g_ParsedData.phases[myPhase].actualPhase;
     268       
    232269        buildList[myPhase].push(structCode);
    233270    }
    234271