Fix ghosts following a moving entity causing them to be offset (#22783)
Fixes #14220 Because the entity they start following is moving, the physics system gives the follower opposing velocity to counteract, at the time the parent change happens. This happens *after* the follower system tries to clear the follower's velocity, so the follower gets some velocity that will still move them a bit off-center. Fix is easy enough, just reset velocity *after* reparenting, not before.
This commit is contained in:
committed by
GitHub
parent
3f3669712f
commit
5e6f350731
@@ -162,8 +162,6 @@ public sealed class FollowerSystem : EntitySystem
|
|||||||
if (TryComp<JointComponent>(follower, out var joints))
|
if (TryComp<JointComponent>(follower, out var joints))
|
||||||
_jointSystem.ClearJoints(follower, joints);
|
_jointSystem.ClearJoints(follower, joints);
|
||||||
|
|
||||||
_physicsSystem.SetLinearVelocity(follower, Vector2.Zero);
|
|
||||||
|
|
||||||
var xform = Transform(follower);
|
var xform = Transform(follower);
|
||||||
_containerSystem.AttachParentToContainerOrGrid((follower, xform));
|
_containerSystem.AttachParentToContainerOrGrid((follower, xform));
|
||||||
|
|
||||||
@@ -173,6 +171,8 @@ public sealed class FollowerSystem : EntitySystem
|
|||||||
_transform.SetCoordinates(follower, xform, new EntityCoordinates(entity, Vector2.Zero), rotation: Angle.Zero);
|
_transform.SetCoordinates(follower, xform, new EntityCoordinates(entity, Vector2.Zero), rotation: Angle.Zero);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_physicsSystem.SetLinearVelocity(follower, Vector2.Zero);
|
||||||
|
|
||||||
EnsureComp<OrbitVisualsComponent>(follower);
|
EnsureComp<OrbitVisualsComponent>(follower);
|
||||||
|
|
||||||
var followerEv = new StartedFollowingEntityEvent(entity, follower);
|
var followerEv = new StartedFollowingEntityEvent(entity, follower);
|
||||||
|
|||||||
Reference in New Issue
Block a user