Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
Show First 20 Lines • Show All 4,377 Lines • ▼ Show 20 Lines | UnitAI.prototype.CheckTargetVisible = function(target) | ||||
if (cmpRangeManager.GetLosVisibility(target, cmpOwnership.GetOwner()) == "hidden") | if (cmpRangeManager.GetLosVisibility(target, cmpOwnership.GetOwner()) == "hidden") | ||||
return false; | return false; | ||||
// Either visible directly, or visible in fog | // Either visible directly, or visible in fog | ||||
return true; | return true; | ||||
}; | }; | ||||
/** | |||||
* Let an entity face its target. | |||||
* @param {number} target - The entity-ID of the target. | |||||
*/ | |||||
UnitAI.prototype.FaceTowardsTarget = function(target) | UnitAI.prototype.FaceTowardsTarget = function(target) | ||||
{ | { | ||||
var cmpPosition = Engine.QueryInterface(this.entity, IID_Position); | let cmpTargetPosition = Engine.QueryInterface(target, IID_Position); | ||||
if (!cmpPosition || !cmpPosition.IsInWorld()) | |||||
return; | |||||
var cmpTargetPosition = Engine.QueryInterface(target, IID_Position); | |||||
if (!cmpTargetPosition || !cmpTargetPosition.IsInWorld()) | if (!cmpTargetPosition || !cmpTargetPosition.IsInWorld()) | ||||
return; | return; | ||||
var targetpos = cmpTargetPosition.GetPosition2D(); | |||||
var angle = cmpPosition.GetPosition2D().angleTo(targetpos); | let targetPosition = cmpTargetPosition.GetPosition2D(); | ||||
var rot = cmpPosition.GetRotation(); | |||||
var delta = (rot.y - angle + Math.PI) % (2 * Math.PI) - Math.PI; | // Use cmpUnitMotion for units that support that, otherwise try cmpPosition (e.g. turrets) | ||||
if (Math.abs(delta) > 0.2) | let cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion); | ||||
{ | |||||
var cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion); | |||||
if (cmpUnitMotion) | if (cmpUnitMotion) | ||||
cmpUnitMotion.FaceTowardsPoint(targetpos.x, targetpos.y); | { | ||||
cmpUnitMotion.FaceTowardsPoint(targetPosition.x, targetPosition.y); | |||||
return; | |||||
} | } | ||||
let cmpPosition = Engine.QueryInterface(this.entity, IID_Position); | |||||
if (cmpPosition && cmpPosition.IsInWorld()) | |||||
cmpPosition.TurnTo(cmpPosition.GetPosition2D().angleTo(targetPosition)); | |||||
}; | }; | ||||
UnitAI.prototype.CheckTargetDistanceFromHeldPosition = function(target, iid, type) | UnitAI.prototype.CheckTargetDistanceFromHeldPosition = function(target, iid, type) | ||||
{ | { | ||||
var cmpRanged = Engine.QueryInterface(this.entity, iid); | var cmpRanged = Engine.QueryInterface(this.entity, iid); | ||||
var range = iid !== IID_Attack ? cmpRanged.GetRange() : cmpRanged.GetRange(type); | var range = iid !== IID_Attack ? cmpRanged.GetRange() : cmpRanged.GetRange(type); | ||||
var cmpPosition = Engine.QueryInterface(target, IID_Position); | var cmpPosition = Engine.QueryInterface(target, IID_Position); | ||||
▲ Show 20 Lines • Show All 1,476 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator