Index: binaries/data/mods/public/simulation/ai/common-api/shared.js =================================================================== --- binaries/data/mods/public/simulation/ai/common-api/shared.js +++ binaries/data/mods/public/simulation/ai/common-api/shared.js @@ -115,18 +115,6 @@ this.accessibility = new m.Accessibility(); this.accessibility.init(state, this.terrainAnalyzer); - // Resource types: ignore = not used for resource maps - // abundant = abundant resource with small amount each - // sparse = sparse resource, but huge amount each - // The following maps are defined in TerrainAnalysis.js and are used for some building placement (cc, dropsites) - // They are updated by checking for create and destroy events for all resources - this.normalizationFactor = { "abundant": 50, "sparse": 90 }; - this.influenceRadius = { "abundant": 36, "sparse": 48 }; - this.ccInfluenceRadius = { "abundant": 60, "sparse": 120 }; - this.resourceMaps = {}; // Contains maps showing the density of resources - this.ccResourceMaps = {}; // Contains maps showing the density of resources, optimized for CC placement. - this.createResourceMaps(); - this.gameState = {}; for (let player of this._players) { @@ -390,12 +378,20 @@ }; /** creates a map of resource density */ -m.SharedScript.prototype.createResourceMaps = function() +m.SharedScript.prototype.createResourceMaps = function(parameters) { + this.normalizationFactor = parameters.normalisationFactor; + this.influenceRadius = parameters.influenceRadius; + this.ccInfluenceRadius = parameters.ccInfluenceRadius; + this.influenceGroups = parameters.influenceGroups; + + this.resourceMaps = {}; // Contains maps showing the density of resources + this.ccResourceMaps = {}; // Contains maps showing the density of resources, optimized for CC placement. + for (const resource of Resources.GetCodes()) { if (this.resourceMaps[resource] || - !(Resources.GetResource(resource).aiAnalysisInfluenceGroup in this.normalizationFactor)) + !(this.influenceGroups[resource] in this.normalizationFactor)) continue; // We're creating them 8-bit. Things could go above 255 if there are really tons of resources // But at that point the precision is not really important anyway. And it saves memory. @@ -452,7 +448,7 @@ const cellSize = this.resourceMaps[resource].cellSize; const x = Math.floor(entPos[0] / cellSize); const y = Math.floor(entPos[1] / cellSize); - const grp = Resources.GetResource(resource).aiAnalysisInfluenceGroup; + const grp = this.influenceGroups[resource]; const strength = multiplication * ent.resourceSupplyMax() / this.normalizationFactor[grp]; this.resourceMaps[resource].addInfluence(x, y, this.influenceRadius[grp] / cellSize, strength / 2, "constant"); this.resourceMaps[resource].addInfluence(x, y, this.influenceRadius[grp] / cellSize, strength / 2); Index: binaries/data/mods/public/simulation/ai/petra/config.js =================================================================== --- binaries/data/mods/public/simulation/ai/petra/config.js +++ binaries/data/mods/public/simulation/ai/petra/config.js @@ -159,6 +159,23 @@ }; this.garrisonHealthLevel = { "low": 0.4, "medium": 0.55, "high": 0.7 }; + + // Resource types: ignore = not used for resource maps + // abundant = abundant resource with small amount each + // sparse = sparse resource, but huge amount each + // The following maps are defined in TerrainAnalysis.js and are used for some building placement (cc, dropsites) + // They are updated by checking for create and destroy events for all resources + this.resources = { + "normalisationFactor": { "abundant": 50, "sparse": 90 }, + "influenceRadius": { "abundant": 36, "sparse": 48 }, + "ccInfluenceRadius": { "abundant": 60, "sparse": 120 }, + "influenceGroups": { + "food": "ignore", + "metal": "sparse", + "stone": "sparse", + "wood": "abundant" + } + }; }; PETRA.Config.prototype.setConfig = function(gameState) Index: binaries/data/mods/public/simulation/ai/petra/headquarters.js =================================================================== --- binaries/data/mods/public/simulation/ai/petra/headquarters.js +++ binaries/data/mods/public/simulation/ai/petra/headquarters.js @@ -65,6 +65,8 @@ this.navalMap = false; this.navalRegions = {}; + gameState.sharedScript.createResourceMaps(this.Config.resources); + this.treasures = gameState.getEntities().filter(ent => ent.isTreasure()); this.treasures.registerUpdates(); this.currentPhase = gameState.currentPhase(); Index: binaries/data/mods/public/simulation/data/resources/food.json =================================================================== --- binaries/data/mods/public/simulation/data/resources/food.json +++ binaries/data/mods/public/simulation/data/resources/food.json @@ -10,6 +10,5 @@ "meat": "Meat" }, "properties": ["barterable", "tradable", "tributable"], - "truePrice": 100, - "aiAnalysisInfluenceGroup": "ignore" + "truePrice": 100 } Index: binaries/data/mods/public/simulation/data/resources/metal.json =================================================================== --- binaries/data/mods/public/simulation/data/resources/metal.json +++ binaries/data/mods/public/simulation/data/resources/metal.json @@ -8,6 +8,5 @@ "ruins": "Ruins" }, "properties": ["barterable", "tradable", "tributable"], - "truePrice": 100, - "aiAnalysisInfluenceGroup": "sparse" + "truePrice": 100 } Index: binaries/data/mods/public/simulation/data/resources/stone.json =================================================================== --- binaries/data/mods/public/simulation/data/resources/stone.json +++ binaries/data/mods/public/simulation/data/resources/stone.json @@ -8,6 +8,5 @@ "ruins": "Ruins" }, "properties": ["barterable", "tradable", "tributable"], - "truePrice": 100, - "aiAnalysisInfluenceGroup": "sparse" + "truePrice": 100 } Index: binaries/data/mods/public/simulation/data/resources/wood.json =================================================================== --- binaries/data/mods/public/simulation/data/resources/wood.json +++ binaries/data/mods/public/simulation/data/resources/wood.json @@ -8,6 +8,5 @@ "ruins": "Ruins" }, "properties": ["barterable", "tradable", "tributable"], - "truePrice": 100, - "aiAnalysisInfluenceGroup": "abundant" + "truePrice": 100 }