Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/simulation/components/UnitAI.js
Show First 20 Lines • Show All 4,180 Lines • ▼ Show 20 Lines | |||||
*/ | */ | ||||
UnitAI.prototype.FindNearbyResource = function(filter, position) | UnitAI.prototype.FindNearbyResource = function(filter, position) | ||||
{ | { | ||||
let cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership); | let cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership); | ||||
if (!cmpOwnership || cmpOwnership.GetOwner() == INVALID_PLAYER) | if (!cmpOwnership || cmpOwnership.GetOwner() == INVALID_PLAYER) | ||||
return undefined; | return undefined; | ||||
let owner = cmpOwnership.GetOwner(); | let owner = cmpOwnership.GetOwner(); | ||||
// We accept resources owned by Gaia or any player | // We accept resources owned by any player (including Gaia). | ||||
let players = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetAllPlayers(); | let players = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetAllPlayers(); | ||||
let range = 64; // TODO: what's a sensible number? | let cmpResourceGatherer = Engine.QueryInterface(this.entity, IID_ResourceGatherer); | ||||
if (!cmpResourceGatherer) | |||||
return undefined; | |||||
let cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager); | let cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager); | ||||
let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); | let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); | ||||
let pos = position; | let pos = position; | ||||
if (!pos) | if (!pos) | ||||
{ | { | ||||
let cmpPosition = Engine.QueryInterface(this.entity, IID_Position); | let cmpPosition = Engine.QueryInterface(this.entity, IID_Position); | ||||
if (cmpPosition && cmpPosition.IsInWorld()) | if (cmpPosition && cmpPosition.IsInWorld()) | ||||
pos = cmpPosition.GetPosition2D(); | pos = cmpPosition.GetPosition2D(); | ||||
} | } | ||||
let nearby = cmpRangeManager.ExecuteQueryAroundPos(pos, 0, range, players, IID_ResourceSupply); | let nearby = cmpRangeManager.ExecuteQueryAroundPos(pos, 0, cmpResourceGatherer.GetSearchRange(), players, IID_ResourceSupply); | ||||
return nearby.find(ent => { | return nearby.find(ent => { | ||||
if (!this.CanGather(ent) || !this.CheckTargetVisible(ent)) | if (!this.CanGather(ent) || !this.CheckTargetVisible(ent)) | ||||
return false; | return false; | ||||
let cmpResourceSupply = Engine.QueryInterface(ent, IID_ResourceSupply); | let cmpResourceSupply = Engine.QueryInterface(ent, IID_ResourceSupply); | ||||
let type = cmpResourceSupply.GetType(); | let type = cmpResourceSupply.GetType(); | ||||
let amount = cmpResourceSupply.GetCurrentAmount(); | let amount = cmpResourceSupply.GetCurrentAmount(); | ||||
let template = cmpTemplateManager.GetCurrentTemplateName(ent); | let template = cmpTemplateManager.GetCurrentTemplateName(ent); | ||||
▲ Show 20 Lines • Show All 63 Lines • ▼ Show 20 Lines | |||||
}; | }; | ||||
/** | /** | ||||
* Returns the entity ID of the nearest building that needs to be constructed, | * Returns the entity ID of the nearest building that needs to be constructed, | ||||
* or undefined if none can be found close enough. | * or undefined if none can be found close enough. | ||||
*/ | */ | ||||
UnitAI.prototype.FindNearbyFoundation = function() | UnitAI.prototype.FindNearbyFoundation = function() | ||||
{ | { | ||||
var cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership); | let cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership); | ||||
if (!cmpOwnership || cmpOwnership.GetOwner() == INVALID_PLAYER) | if (!cmpOwnership || cmpOwnership.GetOwner() == INVALID_PLAYER) | ||||
return undefined; | return undefined; | ||||
// Find buildings owned by this unit's player | let cmpBuilder = Engine.QueryInterface(this.entity, IID_Builder); | ||||
var players = [cmpOwnership.GetOwner()]; | if (!cmpBuilder) | ||||
return undefined; | |||||
Stan: Could be inlined? or done after the check for cmpBuilder? | |||||
var range = 64; // TODO: what's a sensible number? | let players = [cmpOwnership.GetOwner()]; | ||||
var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); | let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); | ||||
var nearby = cmpRangeManager.ExecuteQuery(this.entity, 0, range, players, IID_Foundation); | let nearby = cmpRangeManager.ExecuteQuery(this.entity, 0, cmpBuilder.GetSearchRange(), players, IID_Foundation); | ||||
Done Inline ActionsSame here. Stan: Same here. | |||||
// Skip foundations that are already complete. (This matters since | // Skip foundations that are already complete. (This matters since | ||||
// we process the ConstructionFinished message before the foundation | // we process the ConstructionFinished message before the foundation | ||||
// we're working on has been deleted.) | // we're working on has been deleted.) | ||||
return nearby.find(ent => !Engine.QueryInterface(ent, IID_Foundation).IsFinished()); | return nearby.find(ent => !Engine.QueryInterface(ent, IID_Foundation).IsFinished()); | ||||
}; | }; | ||||
/** | /** | ||||
▲ Show 20 Lines • Show All 1,938 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator
Could be inlined? or done after the check for cmpBuilder?