Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/simulation/components/Researcher.js
Show First 20 Lines • Show All 168 Lines • ▼ Show 20 Lines | for (const item of data.queue) | |||||||||||||||||||
newItem.Deserialize(item); | newItem.Deserialize(item); | |||||||||||||||||||
this.queue.set(item.id, newItem); | this.queue.set(item.id, newItem); | |||||||||||||||||||
} | } | |||||||||||||||||||
}; | }; | |||||||||||||||||||
/* | /* | |||||||||||||||||||
* Returns list of technologies that can be researched by this entity. | * Returns list of technologies that can be researched by this entity. | |||||||||||||||||||
*/ | */ | |||||||||||||||||||
Researcher.prototype.GetTechnologiesList = function() | Researcher.prototype.GetTechnologiesList = function() | |||||||||||||||||||
Stan: Probably needs more tests. | ||||||||||||||||||||
{ | { | |||||||||||||||||||
const string = ApplyValueModificationsToEntity("Researcher/Technologies/_string", this.template?.Technologies?._string || "", this.entity); | const string = ApplyValueModificationsToEntity("Researcher/Technologies/_string", this.template?.Technologies?._string || "", this.entity); | |||||||||||||||||||
if (!string) | if (!string) | |||||||||||||||||||
return []; | return []; | |||||||||||||||||||
const owner = Engine.QueryInterface(this.entity, IID_Ownership)?.GetOwner(); | const owner = Engine.QueryInterface(this.entity, IID_Ownership)?.GetOwner(); | |||||||||||||||||||
if (!owner || owner === INVALID_PLAYER) | if (!owner || owner === INVALID_PLAYER) | |||||||||||||||||||
return []; | return []; | |||||||||||||||||||
const playerEnt = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetPlayerByID(owner); | const playerEnt = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetPlayerByID(owner); | |||||||||||||||||||
if (!playerEnt) | if (!playerEnt) | |||||||||||||||||||
return []; | return []; | |||||||||||||||||||
const cmpTechnologyManager = Engine.QueryInterface(playerEnt, IID_TechnologyManager); | const cmpTechnologyManager = Engine.QueryInterface(playerEnt, IID_TechnologyManager); | |||||||||||||||||||
if (!cmpTechnologyManager) | if (!cmpTechnologyManager) | |||||||||||||||||||
return []; | return []; | |||||||||||||||||||
const cmpPlayer = Engine.QueryInterface(playerEnt, IID_Player); | const cmpPlayer = Engine.QueryInterface(playerEnt, IID_Player); | |||||||||||||||||||
if (!cmpPlayer) | if (!cmpPlayer) | |||||||||||||||||||
return []; | return []; | |||||||||||||||||||
let techs = string.split(/\s+/); | let techs = string.split(/\s+/); | |||||||||||||||||||
// Replace the civ specific technologies. | // Replace the civ specific technologies. | |||||||||||||||||||
// ToDo: Handle {native}. | ||||||||||||||||||||
const civ = Engine.QueryInterface(playerEnt, IID_Identity).GetCiv(); | const civ = Engine.QueryInterface(playerEnt, IID_Identity).GetCiv(); | |||||||||||||||||||
for (let i = 0; i < techs.length; ++i) | for (let i = 0; i < techs.length; ++i) | |||||||||||||||||||
{ | { | |||||||||||||||||||
const tech = techs[i]; | const tech = techs[i]; | |||||||||||||||||||
if (tech.indexOf("{civ}") == -1) | if (!tech.includes("{civ}")) | |||||||||||||||||||
continue; | techs[i] = tech.replace("{civ}", civ); | |||||||||||||||||||
const civTech = tech.replace("{civ}", civ); | ||||||||||||||||||||
techs[i] = TechnologyTemplates.Has(civTech) ? civTech : tech.replace("{civ}", "generic"); | ||||||||||||||||||||
} | } | |||||||||||||||||||
StanUnsubmitted Done Inline Actions
Stan: | ||||||||||||||||||||
// Remove any technologies that can't be researched by this civ. | ||||||||||||||||||||
techs = techs.filter(tech => | ||||||||||||||||||||
cmpTechnologyManager.CheckTechnologyRequirements( | ||||||||||||||||||||
DeriveTechnologyRequirements(TechnologyTemplates.Get(tech), civ), | ||||||||||||||||||||
true)); | ||||||||||||||||||||
const techList = []; | const techList = []; | |||||||||||||||||||
const superseded = {}; | const superseded = {}; | |||||||||||||||||||
const disabledTechnologies = cmpPlayer.GetDisabledTechnologies(); | const disabledTechnologies = cmpPlayer.GetDisabledTechnologies(); | |||||||||||||||||||
// Add any top level technologies to an array which corresponds to the displayed icons. | // Add any top level technologies to an array which corresponds to the displayed icons. | |||||||||||||||||||
// Also store what technology is superseded in the superseded object { "tech1":"techWhichSupercedesTech1", ... }. | // Also store what technology is superseded in the superseded object { "tech1":"techWhichSupercedesTech1", ... }. | |||||||||||||||||||
for (const tech of techs) | for (const tech of techs) | |||||||||||||||||||
{ | { | |||||||||||||||||||
if (disabledTechnologies && disabledTechnologies[tech]) | if (!TechnologyTemplates.Has(tech) || disabledTechnologies && disabledTechnologies[tech]) | |||||||||||||||||||
continue; | continue; | |||||||||||||||||||
const template = TechnologyTemplates.Get(tech); | const template = GetTemplateDataHelper(TechnologyTemplates.Get(tech)).technology; | |||||||||||||||||||
if (!template.supersedes || techs.indexOf(template.supersedes) === -1) | if (!template.supersedes || !techs.includes(template.supersedes)) | |||||||||||||||||||
techList.push(tech); | techList.push(tech); | |||||||||||||||||||
else | else | |||||||||||||||||||
superseded[template.supersedes] = tech; | superseded[template.supersedes] = tech; | |||||||||||||||||||
} | } | |||||||||||||||||||
// Now make researched/in progress techs invisible. | // Now make researched/in progress techs invisible. | |||||||||||||||||||
for (const i in techList) | for (const i in techList) | |||||||||||||||||||
{ | { | |||||||||||||||||||
▲ Show 20 Lines • Show All 142 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator
Probably needs more tests.