public void Move(Vector2 velocityDirection, float speed) { if (ControlledComponent?.Owner.HasComponent <MovementIgnoreGravityComponent>() == false && _physicsManager.IsWeightless(ControlledComponent.Owner.Transform.Coordinates)) { return; } Push(velocityDirection, speed); }
public override void UpdateAfterProcessing() { base.UpdateAfterProcessing(); if (ControlledComponent != null && !_physicsManager.IsWeightless(ControlledComponent.Owner.Transform.GridPosition)) { LinearVelocity *= 0.85f; if (LinearVelocity.Length < 1f) { Stop(); } } }
public override void UpdateAfterProcessing() { if (ControlledComponent == null) { return; } if (_physicsManager.IsWeightless(ControlledComponent.Owner.Transform.GridPosition)) { return; } LinearVelocity *= Decay; if (LinearVelocity.Length < 0.001) { Stop(); } }
public override void UpdateAfterProcessing() { if (ControlledComponent == null) { return; } if (_physicsManager.IsWeightless(ControlledComponent.Owner.Transform.Coordinates)) { if (ControlledComponent.IsColliding(Vector2.Zero, false)) { Stop(); } return; } LinearVelocity *= Decay; if (LinearVelocity.Length < 0.001) { Stop(); } }
private void UpdateKinematics(ITransformComponent transform, IMoverComponent mover, PhysicsComponent physics, CollidableComponent collider = null) { if (physics.Controller == null) { // Set up controller physics.SetController <MoverController>(); } var weightless = !transform.Owner.HasComponent <MovementIgnoreGravityComponent>() && _physicsManager.IsWeightless(transform.GridPosition); if (weightless && collider != null) { // No gravity: is our entity touching anything? var touching = IsAroundCollider(transform, mover, collider); if (!touching) { return; } } if (mover.VelocityDir.LengthSquared < 0.001 || !ActionBlockerSystem.CanMove(mover.Owner) && !weightless) { (physics.Controller as MoverController)?.StopMoving(); } else { if (weightless) { (physics.Controller as MoverController)?.Push(mover.VelocityDir, mover.CurrentPushSpeed); transform.LocalRotation = mover.VelocityDir.GetDir().ToAngle(); return; } (physics.Controller as MoverController)?.Move(mover.VelocityDir, mover.Sprinting ? mover.CurrentSprintSpeed : mover.CurrentWalkSpeed); transform.LocalRotation = mover.VelocityDir.GetDir().ToAngle(); // Handle footsteps. if (_mapManager.GridExists(mover.LastPosition.GridID)) { // Can happen when teleporting between grids. var distance = transform.GridPosition.Distance(_mapManager, mover.LastPosition); mover.StepSoundDistance += distance; } mover.LastPosition = transform.GridPosition; float distanceNeeded; if (mover.Sprinting) { distanceNeeded = StepSoundMoveDistanceRunning; } else { distanceNeeded = StepSoundMoveDistanceWalking; } if (mover.StepSoundDistance > distanceNeeded) { mover.StepSoundDistance = 0; if (!mover.Owner.HasComponent <FootstepSoundComponent>()) { return; } if (mover.Owner.TryGetComponent <InventoryComponent>(out var inventory) && inventory.TryGetSlotItem <ItemComponent>(EquipmentSlotDefines.Slots.SHOES, out var item) && item.Owner.TryGetComponent <FootstepModifierComponent>(out var modifier)) { modifier.PlayFootstep(); } else { PlayFootstepSound(transform.GridPosition); } } }