void Move(Vector3 direction, bool upOrDown = false)
        {
            if (playerSwimming)
            {
                // Do not allow player to swim up out of water, as he would immediately be pulled back in, making jerky movement and playing the splash sound repeatedly
                if ((direction.y > 0) && (playerMotor.controller.transform.position.y + (50 * MeshReader.GlobalScale) - 0.93f) >=
                    (GameManager.Instance.PlayerEnterExit.blockWaterLevel * -1 * MeshReader.GlobalScale))
                {
                    direction.y = 0;
                }

                Entity.PlayerEntity player = GameManager.Instance.PlayerEntity;
                float baseSpeed            = speedChanger.GetBaseSpeed();
                moveSpeed = speedChanger.GetSwimSpeed(baseSpeed);
            }

            // There's a fixed speed for up/down movement
            if (upOrDown)
            {
                moveSpeed = 80f / PlayerSpeedChanger.classicToUnitySpeedUnitRatio;
            }

            collisionFlags = playerMotor.controller.Move(direction * moveSpeed * Time.deltaTime);
            // Reset to levitate speed in case it has been changed by swimming
            moveSpeed = 4.0f;
        }
Example #2
0
        void AddMovement(Vector3 direction, bool upOrDown = false)
        {
            // No up or down movement while swimming without using a float up/float down key, levitating while swimming, or sinking from encumbrance
            if (!upOrDown && playerSwimming && !playerLevitating)
            {
                direction.y = 0;
            }

            if (playerSwimming && GameManager.Instance.PlayerEntity.IsWaterWalking)
            {
                // Swimming with water walking on makes player move at normal speed in water
                moveSpeed      = GameManager.Instance.PlayerMotor.Speed;
                moveDirection += direction * moveSpeed;
                return;
            }
            else if (playerSwimming && !playerLevitating)
            {
                // Do not allow player to swim up out of water, as he would immediately be pulled back in, making jerky movement and playing the splash sound repeatedly
                if ((direction.y > 0) && (playerMotor.controller.transform.position.y + (50 * MeshReader.GlobalScale) - 0.93f) >=
                    (GameManager.Instance.PlayerEnterExit.blockWaterLevel * -1 * MeshReader.GlobalScale) &&
                    !playerLevitating)
                {
                    direction.y = 0;
                }

                // There's a fixed speed for up/down movement in classic (use moveSpeed = 2 here to replicate)
                float baseSpeed = speedChanger.GetBaseSpeed();
                moveSpeed = speedChanger.GetSwimSpeed(baseSpeed);
            }

            moveDirection += direction * moveSpeed;

            // Reset to levitate speed in case it has been changed by swimming
            moveSpeed = levitateMoveSpeed;
        }
Example #3
0
 private void UpdateSpeed()
 {
     speed = speedChanger.GetBaseSpeed();
     speedChanger.ApplyInputSpeedAdjustment(ref speed);
     if (playerEnterExit.IsPlayerSwimming && !GameManager.Instance.PlayerEntity.IsWaterWalking)
     {
         speed = speedChanger.GetSwimSpeed(speed);
     }
 }
        void Update()
        {
            // Do nothing if player levitating - replacement motor will take over movement.
            // Don't return here for swimming because player should still be able to crouch when swimming.
            if (levitateMotor && levitateMotor.IsLevitating)
            {
                return;
            }

            speed = speedChanger.GetBaseSpeed();
            speedChanger.HandleInputSpeedAdjustment(ref speed);
            if (playerEnterExit.IsPlayerSwimming)
            {
                speed = speedChanger.GetSwimSpeed(speed);
            }

            heightChanger.DecideHeightAction();

            UpdateSmoothFollower();
        }
Example #5
0
        void Update()
        {
            // Update on water check
            onExteriorWaterMethod = GetOnExteriorWaterMethod();

            // Do nothing if player levitating - replacement motor will take over movement.
            // Don't return here for swimming because player should still be able to crouch when swimming.
            if (levitateMotor && levitateMotor.IsLevitating)
            {
                return;
            }

            speed = speedChanger.GetBaseSpeed();
            speedChanger.HandleInputSpeedAdjustment(ref speed);
            if (playerEnterExit.IsPlayerSwimming && !GameManager.Instance.PlayerEntity.IsWaterWalking)
            {
                speed = speedChanger.GetSwimSpeed(speed);
            }

            heightChanger.DecideHeightAction();

            UpdateSmoothFollower();
        }