Differential D3303 Diff 15719 binaries/data/mods/public/simulation/ai/common-api/terrain-analysis.js
Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/simulation/ai/common-api/terrain-analysis.js
Show First 20 Lines • Show All 391 Lines • ▼ Show 20 Lines | if (this.resourceMaps[resource]) | ||||
continue; | continue; | ||||
// We're creating them 8-bit. Things could go above 255 if there are really tons of resources | // 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. | // But at that point the precision is not really important anyway. And it saves memory. | ||||
this.resourceMaps[resource] = new m.Map(this, "resource"); | this.resourceMaps[resource] = new m.Map(this, "resource"); | ||||
this.ccResourceMaps[resource] = new m.Map(this, "resource"); | this.ccResourceMaps[resource] = new m.Map(this, "resource"); | ||||
} | } | ||||
for (let ent of this._entities.values()) | for (let ent of this._entities.values()) | ||||
{ | { | ||||
if (!ent || !ent.position() || !ent.resourceSupplyType() || ent.resourceSupplyType().generic === "treasure") | if (!ent || !ent.position() || !ent.resourceSupplyType()) | ||||
continue; | continue; | ||||
let resource = ent.resourceSupplyType().generic; | let resource = ent.resourceSupplyType().generic; | ||||
if (!this.resourceMaps[resource]) | if (!this.resourceMaps[resource]) | ||||
continue; | continue; | ||||
let cellSize = this.resourceMaps[resource].cellSize; | let cellSize = this.resourceMaps[resource].cellSize; | ||||
let x = Math.floor(ent.position()[0] / cellSize); | let x = Math.floor(ent.position()[0] / cellSize); | ||||
let z = Math.floor(ent.position()[1] / cellSize); | let z = Math.floor(ent.position()[1] / cellSize); | ||||
let grp = Resources.GetResource(resource).aiAnalysisInfluenceGroup; | let grp = Resources.GetResource(resource).aiAnalysisInfluenceGroup; | ||||
Show All 25 Lines | m.SharedScript.prototype.updateResourceMaps = function(events) | ||||
} | } | ||||
// Look for destroy (or create) events and subtract (or add) the entities original influence from the resourceMap | // Look for destroy (or create) events and subtract (or add) the entities original influence from the resourceMap | ||||
for (let e of events.Destroy) | for (let e of events.Destroy) | ||||
{ | { | ||||
if (!e.entityObj) | if (!e.entityObj) | ||||
continue; | continue; | ||||
let ent = e.entityObj; | let ent = e.entityObj; | ||||
if (!ent || !ent.position() || !ent.resourceSupplyType() || ent.resourceSupplyType().generic === "treasure") | if (!ent || !ent.position() || !ent.resourceSupplyType()) | ||||
continue; | continue; | ||||
let resource = ent.resourceSupplyType().generic; | let resource = ent.resourceSupplyType().generic; | ||||
if (!this.resourceMaps[resource]) | if (!this.resourceMaps[resource]) | ||||
continue; | continue; | ||||
let cellSize = this.resourceMaps[resource].cellSize; | let cellSize = this.resourceMaps[resource].cellSize; | ||||
let x = Math.floor(ent.position()[0] / cellSize); | let x = Math.floor(ent.position()[0] / cellSize); | ||||
let z = Math.floor(ent.position()[1] / cellSize); | let z = Math.floor(ent.position()[1] / cellSize); | ||||
let grp = Resources.GetResource(resource).aiAnalysisInfluenceGroup; | let grp = Resources.GetResource(resource).aiAnalysisInfluenceGroup; | ||||
let strength = -Math.floor(ent.resourceSupplyMax() / this.normalizationFactor[grp]); | let strength = -Math.floor(ent.resourceSupplyMax() / this.normalizationFactor[grp]); | ||||
this.resourceMaps[resource].addInfluence(x, z, this.influenceRadius[grp] / cellSize, strength/2, "constant"); | this.resourceMaps[resource].addInfluence(x, z, this.influenceRadius[grp] / cellSize, strength/2, "constant"); | ||||
this.resourceMaps[resource].addInfluence(x, z, this.influenceRadius[grp] / cellSize, strength/2); | this.resourceMaps[resource].addInfluence(x, z, this.influenceRadius[grp] / cellSize, strength/2); | ||||
this.ccResourceMaps[resource].addInfluence(x, z, this.ccInfluenceRadius[grp] / cellSize, strength, "constant"); | this.ccResourceMaps[resource].addInfluence(x, z, this.ccInfluenceRadius[grp] / cellSize, strength, "constant"); | ||||
} | } | ||||
for (let e of events.Create) | for (let e of events.Create) | ||||
{ | { | ||||
if (!e.entity || !this._entities.has(e.entity)) | if (!e.entity || !this._entities.has(e.entity)) | ||||
continue; | continue; | ||||
let ent = this._entities.get(e.entity); | let ent = this._entities.get(e.entity); | ||||
if (!ent || !ent.position() || !ent.resourceSupplyType() || ent.resourceSupplyType().generic === "treasure") | if (!ent || !ent.position() || !ent.resourceSupplyType()) | ||||
continue; | continue; | ||||
let resource = ent.resourceSupplyType().generic; | let resource = ent.resourceSupplyType().generic; | ||||
if (!this.resourceMaps[resource]) | if (!this.resourceMaps[resource]) | ||||
continue; | continue; | ||||
let cellSize = this.resourceMaps[resource].cellSize; | let cellSize = this.resourceMaps[resource].cellSize; | ||||
let x = Math.floor(ent.position()[0] / cellSize); | let x = Math.floor(ent.position()[0] / cellSize); | ||||
let z = Math.floor(ent.position()[1] / cellSize); | let z = Math.floor(ent.position()[1] / cellSize); | ||||
let grp = Resources.GetResource(resource).aiAnalysisInfluenceGroup; | let grp = Resources.GetResource(resource).aiAnalysisInfluenceGroup; | ||||
Show All 10 Lines |
Wildfire Games · Phabricator