Index: ps/trunk/binaries/data/mods/public/simulation/ai/common-api/gamestate.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/ai/common-api/gamestate.js +++ ps/trunk/binaries/data/mods/public/simulation/ai/common-api/gamestate.js @@ -219,7 +219,7 @@ m.GameState.prototype.isResearched = function(template) { - return this.playerData.researchedTechs[template] !== undefined; + return this.playerData.researchedTechs.has(template); }; /** true if started or queued */ @@ -242,7 +242,7 @@ // researching or already researched: NOO. if (this.playerData.researchQueued[techTemplateName] || this.playerData.researchStarted[techTemplateName] || - this.playerData.researchedTechs[techTemplateName]) + this.playerData.researchedTechs.has(techTemplateName)) return false; if (noRequirementCheck) @@ -254,7 +254,7 @@ let other = template.pairedWith(); if (this.playerData.researchQueued[other] || this.playerData.researchStarted[other] || - this.playerData.researchedTechs[other]) + this.playerData.researchedTechs.has(other)) return false; } @@ -296,7 +296,7 @@ switch (type) { case "techs": - return req[type].every(tech => !!this.playerData.researchedTechs[tech]); + return req[type].every(tech => this.playerData.researchedTechs.has(tech)); case "entities": return req[type].every(doesEntitySpecPass, this); Index: ps/trunk/binaries/data/mods/public/simulation/components/TechnologyManager.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/components/TechnologyManager.js +++ ps/trunk/binaries/data/mods/public/simulation/components/TechnologyManager.js @@ -20,7 +20,9 @@ TechnologyManager.prototype.Init = function() { - this.researchedTechs = {}; // technologies which have been researched + // Holds names of technologies which have been researched + this.researchedTechs = new Set(); + this.researchQueued = {}; // technologies which are queued for research this.researchStarted = {}; // technologies which are being researched currently (non-queued) @@ -94,7 +96,7 @@ TechnologyManager.prototype.IsTechnologyResearched = function(tech) { - return this.researchedTechs[tech] !== undefined; + return this.researchedTechs.has(tech); }; TechnologyManager.prototype.IsTechnologyStarted = function(tech) @@ -274,7 +276,7 @@ } var modifiedComponents = {}; - this.researchedTechs[tech] = template; + this.researchedTechs.add(tech); // store the modifications in an easy to access structure if (template.modifications) { @@ -300,8 +302,7 @@ if (!i || this.IsTechnologyResearched(i)) continue; - var template = this.GetTechnologyTemplate(i); - this.researchedTechs[i] = template; + this.researchedTechs.add(i); // Change the EntityLimit if any let cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); @@ -467,10 +468,15 @@ { return this.researchQueued; }; + +/** + * Returns the names of technologies that have already been researched. + */ TechnologyManager.prototype.GetResearchedTechs = function() { return this.researchedTechs; }; + TechnologyManager.prototype.GetClassCounts = function() { return this.classCounts; Index: ps/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js +++ ps/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js @@ -297,7 +297,7 @@ entityLimitChangers: {"Foo": {}}, researchQueued: {}, researchStarted: {}, - researchedTechs: {}, + researchedTechs: new Set(), classCounts: {}, typeCountsByClass: {}, canBarter: false, @@ -346,7 +346,7 @@ entityLimitChangers: {"Bar": {}}, researchQueued: {}, researchStarted: {}, - researchedTechs: {}, + researchedTechs: new Set(), classCounts: {}, typeCountsByClass: {}, canBarter: false, @@ -404,7 +404,7 @@ "entityLimitChangers": {"Foo": {}}, "researchQueued": {}, "researchStarted": {}, - "researchedTechs": {}, + "researchedTechs": new Set(), "classCounts": {}, "typeCountsByClass": {}, "canBarter": false, @@ -476,7 +476,7 @@ "entityLimitChangers": {"Bar": {}}, "researchQueued": {}, "researchStarted": {}, - "researchedTechs": {}, + "researchedTechs": new Set(), "classCounts": {}, "typeCountsByClass": {}, "canBarter": false,