public void TryMoveTo(EntityCoordinates from, EntityCoordinates to) { if (_puller == null || ControlledComponent == null) { return; } var entityManager = IoCManager.Resolve <IEntityManager>(); if (!from.InRange(entityManager, to, SharedInteractionSystem.InteractionRange)) { return; } ControlledComponent.WakeBody(); var dist = _puller.Owner.Transform.Coordinates.Position - to.Position; if (Math.Sqrt(dist.LengthSquared) > DistBeforeStopPull || Math.Sqrt(dist.LengthSquared) < 0.25f) { return; } _movingTo = to; }
public void StopPull() { var oldPuller = _puller; if (oldPuller == null) { return; } _puller = null; if (ControlledComponent == null) { return; } ControlledComponent.WakeBody(); var message = new PullStoppedMessage(this, oldPuller, ControlledComponent); oldPuller.Owner.SendMessage(null, message); ControlledComponent.Owner.SendMessage(null, message); ControlledComponent.TryRemoveController <PullController>(); }
public override void UpdateAfterProcessing() { base.UpdateAfterProcessing(); if (ControlledComponent == null || _movingTo == null) { return; } ControlledComponent.WakeBody(); if ((ControlledComponent.Owner.Transform.WorldPosition - _lastKnownPosition).Length <= 0.05f) { _numTicksBlocked++; } else { _numTicksBlocked = 0; } _lastKnownPosition = ControlledComponent.Owner.Transform.WorldPosition; if ((ControlledComponent.Owner.Transform.WorldPosition - _movingTo.Value).Length <= 0.1f) { _movingTo = null; } if (_movingTo.HasValue) { var dist = (_lastKnownPosition - _movingTo.Value).Length; if (dist > _initialDist) { _isMovingWrongDirection = true; } var diff = _movingTo.Value - ControlledComponent.Owner.Transform.WorldPosition; LinearVelocity = diff.Normalized * 5; } else { LinearVelocity = Vector2.Zero; } }
public void StartPull(ICollidableComponent puller) { DebugTools.AssertNotNull(puller); if (_puller == puller) { return; } _puller = puller; if (ControlledComponent == null) { return; } ControlledComponent.WakeBody(); var message = new PullStartedMessage(this, _puller, ControlledComponent); _puller.Owner.SendMessage(null, message); ControlledComponent.Owner.SendMessage(null, message); }