public PassengerMovement(Transform _transform, Vector2 _velocity, bool _moveBefore, ForceDir _dir) { transform = _transform; velocity = _velocity; moveBefore = _moveBefore; dir = _dir; }
public override void Move(Vector2 velocity, ForceDir forceDir) { UpdateRaycastOrigins(); CalculatePassengerMovement(velocity); MovePassengers(true); transform.Translate(velocity); MovePassengers(false); }
public abstract void Move(Vector2 velocity, ForceDir forceDir);
public override void Move(Vector2 velocity, ForceDir forceDir) { // Prepare the collisions/raycasts collisionState.Reset(); UpdateRaycastOrigins(); collisionState.prevVelocity = velocity; // Calculate velocity if (velocity.y < 0f) { DecendSlope(ref velocity); } if (velocity.x != 0f) { HorizontalCollisions(ref velocity); } if (velocity.y != 0f) { VerticalCollisions(ref velocity); } // Movement was applied by another object if (forceDir != ForceDir.Self) { if (forceDir == ForceDir.Below) { collisionState.below = true; } if (forceDir == ForceDir.Above) { collisionState.above = true; } if (forceDir == ForceDir.Left) { collisionState.left = true; } if (forceDir == ForceDir.Right) { collisionState.right = true; } } // Apply the calculated velocity transform.Translate(velocity); // Check for the previous collisions UpdateRaycastOrigins(); CheckPrevCollisions(); // oneWayPlatforms if (velocity.y > 0.0f || collisionState.below) { ignoredOneWayPlatform = null; } ignoreOneWayPlatforms = false; }