Index: binaries/data/mods/public/simulation/components/UnitAI.js =================================================================== --- binaries/data/mods/public/simulation/components/UnitAI.js +++ binaries/data/mods/public/simulation/components/UnitAI.js @@ -4374,24 +4374,25 @@ return true; }; +/** + * Let an entity face its target. + * @param {number} target - The entity-ID of the target. + */ UnitAI.prototype.FaceTowardsTarget = function(target) { - var cmpPosition = Engine.QueryInterface(this.entity, IID_Position); + if (!target) + return; + + let cmpPosition = Engine.QueryInterface(this.entity, IID_Position); if (!cmpPosition || !cmpPosition.IsInWorld()) return; - var cmpTargetPosition = Engine.QueryInterface(target, IID_Position); + + let cmpTargetPosition = Engine.QueryInterface(target, IID_Position); if (!cmpTargetPosition || !cmpTargetPosition.IsInWorld()) return; - var targetpos = cmpTargetPosition.GetPosition2D(); - var angle = cmpPosition.GetPosition2D().angleTo(targetpos); - var rot = cmpPosition.GetRotation(); - var delta = (rot.y - angle + Math.PI) % (2 * Math.PI) - Math.PI; - if (Math.abs(delta) > 0.2) - { - var cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion); - if (cmpUnitMotion) - cmpUnitMotion.FaceTowardsPoint(targetpos.x, targetpos.y); - } + + let pos = cmpTargetPosition.GetPosition2D().sub(cmpPosition.GetPosition2D()); + cmpPosition.TurnTo(Math.atan2(pos.x, pos.y)); }; UnitAI.prototype.CheckTargetDistanceFromHeldPosition = function(target, iid, type)