Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class PlayerController : MonoBehaviour {
- // TODO:
- // - Arms, Legs
- // - Sliding
- // - Camera Y Offset on sliding
- #region Movement Speed Variables
- private float baseMovementSpeed = 1.5f;
- private float runningMovementSpeed = 3.5f;
- private float currentMovementSpeed;
- public enum MovementSpeeds {
- Base,
- Running,
- Current
- }
- public float get_MovementSpeed(MovementSpeeds MovementSpeed) {
- switch (MovementSpeed) {
- case MovementSpeeds.Base:
- return baseMovementSpeed;
- case MovementSpeeds.Running:
- return runningMovementSpeed;
- case MovementSpeeds.Current:
- return currentMovementSpeed;
- default:
- Debug.LogError("GetCameraFOV wrong enumerator pick");
- return baseMovementSpeed;
- }
- }
- #endregion
- #region Mouse Sensitivity Variables
- private float currentMouseSensitivity;
- private float baseMouseSensitivity = 2f;
- private float SlidingMouseSensitivity;
- public enum MouseSensitivities {
- Base,
- Sliding
- }
- public float? GetMouseSensitivity(MouseSensitivities _ms) {
- switch (_ms) {
- case MouseSensitivities.Base:
- return baseMouseSensitivity;
- case MouseSensitivities.Sliding:
- return SlidingMouseSensitivity;
- default:
- return null;
- }
- }
- #endregion
- #region Jump variables
- private const float baseJumpForce = 5f;
- private float currentJumpForce = baseJumpForce;
- #endregion
- #region isGrounded
- private bool previous_isGrounded;
- private bool _isGrounded;
- private bool isGrounded {
- get {
- return _isGrounded;
- }
- set {
- _isGrounded = value;
- if (previous_isGrounded != value) {
- if (isGrounded) {
- canJump = true;
- canMoveHorizontal = true;
- } else {
- canJump = false;
- canMoveHorizontal = false;
- }
- }
- previous_isGrounded = value;
- }
- }
- #endregion
- #region can/is variables
- [HideInInspector]
- public bool isMoving = false;
- [HideInInspector]
- public bool canMoveHorizontal = true;
- [HideInInspector]
- public bool canMoveVertical = true;
- [HideInInspector]
- public bool canLook = true;
- [HideInInspector]
- public bool canJump = true;
- #endregion
- #region Camera Variables
- private const float BaseCameraFOV = 70f;
- private const float RunningCameraFOV = BaseCameraFOV + 30f;
- private float _currentcamerafov = BaseCameraFOV;
- private float CurrentCameraFOV {
- get {
- return _currentcamerafov;
- }
- set {
- _currentcamerafov = value;
- PlayerCamera.fieldOfView = _currentcamerafov;
- }
- }
- public enum CameraFOVs {
- Current,
- Base,
- Running
- }
- public float get_CameraFOV(CameraFOVs CameraFOV) {
- switch (CameraFOV) {
- case CameraFOVs.Current:
- return CurrentCameraFOV;
- case CameraFOVs.Base:
- return BaseCameraFOV;
- case CameraFOVs.Running:
- return RunningCameraFOV;
- default:
- Debug.LogError("GetCameraFOV wrong enumerator pick");
- return BaseCameraFOV;
- }
- }
- public Vector3 StandingCameraPosition;
- public Vector3 SlidingCameraPosition;
- #endregion
- #region private Vector3s
- private Vector3 velocity = Vector3.zero;
- private Vector3 rotation = Vector3.zero;
- private Vector3 cameraRotation = Vector3.zero;
- #endregion
- #region Collider Variables
- public Collider StandingPlayerCollider;
- public Collider SlidingPlayerCollider;
- private Collider _currentPlayerCollider;
- private Collider CurrentPlayerCollider {
- get {
- return _currentPlayerCollider;
- }
- set {
- _currentPlayerCollider = value;
- if (_currentPlayerCollider == StandingPlayerCollider) {
- StandingPlayerCollider.gameObject.SetActive(true);
- SlidingPlayerCollider.gameObject.SetActive(false);
- } else if (_currentPlayerCollider == SlidingPlayerCollider) {
- StandingPlayerCollider.gameObject.SetActive(false);
- SlidingPlayerCollider.gameObject.SetActive(true);
- }
- }
- }
- public enum PlayerColliders {
- Standing,
- Sliding
- }
- public Collider get_PlayerCollider(PlayerColliders PlayerCollider) {
- switch (PlayerCollider) {
- case PlayerColliders.Standing:
- return StandingPlayerCollider;
- case PlayerColliders.Sliding:
- return SlidingPlayerCollider;
- default:
- return null;
- }
- }
- #endregion
- #region Inspector variables
- public Camera PlayerCamera;
- public ParticleSystem RunningParticleCollider;
- #endregion
- #region Script References
- private RunController m_RunController;
- private SlideController m_SlideController;
- private Rigidbody rb;
- #endregion
- private void Awake() {
- rb = GetComponent<Rigidbody>();
- m_SlideController = GetComponent<SlideController>();
- m_RunController = GetComponent<RunController>();
- if (PlayerCamera == null)
- PlayerCamera = GetComponentInChildren<Camera>();
- ChangeMouseSensitivity(baseMouseSensitivity);
- ChangeCurrentPlayerCollider(StandingPlayerCollider);
- ChangeCurrentMovementSpeed(baseMovementSpeed);
- ChangeCameraPosition(StandingCameraPosition);
- SlidingMouseSensitivity = baseMouseSensitivity / 2;
- distanceToGround = CurrentPlayerCollider.bounds.extents.y;
- Cursor.lockState = CursorLockMode.Locked;
- }
- private void Update() {
- if (canMoveHorizontal || canMoveVertical) {
- float HorizontalInput = 0f;
- float VerticalInput = 0f;
- if (canMoveHorizontal)
- HorizontalInput = Input.GetAxisRaw("Horizontal");
- if (canMoveVertical)
- VerticalInput = Input.GetAxisRaw("Vertical");
- if (HorizontalInput != 0 || VerticalInput != 0)
- isMoving = true;
- else
- isMoving = false;
- if (canMoveHorizontal || canMoveVertical) {
- Vector3 HorizontalMovement = transform.right * HorizontalInput;
- Vector3 VerticalMovement = transform.forward * VerticalInput;
- Vector3 Velocity = (HorizontalMovement + VerticalMovement).normalized * currentMovementSpeed;
- Move(Velocity);
- }
- }
- if (canLook) {
- // Character rotation (turning around (Y Axis))
- float XRotation = Input.GetAxisRaw("Mouse X");
- Vector3 Rotation = new Vector3(0f, XRotation, 0f) * currentMouseSensitivity;
- Rotate(Rotation);
- // Camera rotation (up down)
- float YRotation = Input.GetAxisRaw("Mouse Y");
- Vector3 CameraRotation = new Vector3(YRotation, 0f, 0f) * currentMouseSensitivity;
- RotateCamera(CameraRotation);
- }
- //if (CheckIfGrounded())
- // isGrounded = true;
- //else
- // isGrounded = false;
- if (!m_RunController.isRunning && CurrentCameraFOV > BaseCameraFOV)
- m_RunController.RestoreCameraFOV();
- #region Running
- if (Input.GetKey(KeyCode.LeftShift) && isMoving) {
- m_RunController.StartRunning();
- }
- if (Input.GetKeyUp(KeyCode.LeftShift)) {
- m_RunController.StopRunning();
- }
- #endregion
- #region Jumping
- if (Input.GetKeyDown(KeyCode.Space) && canJump) {
- rb.velocity += new Vector3(0, currentJumpForce, 0);
- }
- #endregion
- #region Sliding
- if ((Input.GetKeyDown(KeyCode.LeftControl) || (Input.GetKeyDown(KeyCode.C))) && isMoving && m_RunController.isRunning && m_SlideController.canSlide) {
- m_SlideController.StartSliding();
- }
- if ((Input.GetKeyUp(KeyCode.LeftControl) || (Input.GetKeyUp(KeyCode.C))) && m_SlideController.isSliding) {
- m_SlideController.StopSliding();
- }
- #endregion
- }
- private void FixedUpdate() {
- PerformMovement();
- PerformRotation();
- }
- private void Move(Vector3 _velocity) {
- velocity = _velocity;
- PerformMovement();
- }
- private void PerformMovement() {
- if (velocity != Vector3.zero)
- rb.MovePosition(rb.position + velocity * Time.fixedDeltaTime);
- }
- private void Rotate(Vector3 _rotation) {
- rotation = _rotation;
- }
- private void RotateCamera(Vector3 _cameraRotation) {
- cameraRotation = _cameraRotation;
- }
- private void PerformRotation() {
- Quaternion TargetRotation = rb.rotation * Quaternion.Euler(rotation);
- rb.MoveRotation(TargetRotation);
- if (PlayerCamera != null)
- PlayerCamera.transform.Rotate(-cameraRotation);
- }
- private float distanceToGround;
- private bool CheckIfGrounded() {
- return Physics.Raycast(rb.position, -Vector3.up, distanceToGround + 0.1f);
- }
- public void ChangeCameraPosition(Vector3 NewPosition) {
- PlayerCamera.transform.localPosition = NewPosition;
- }
- public void ChangeCurrentPlayerCollider(Collider NewPlayerCollider) {
- CurrentPlayerCollider = NewPlayerCollider;
- }
- public void ChangeMouseSensitivity(float NewMouseSensitivity) {
- currentMouseSensitivity = NewMouseSensitivity;
- }
- public void ChangeCurrentMovementSpeed(float NewMovementSpeed) {
- currentMovementSpeed = NewMovementSpeed;
- }
- public void ChangeCurrentCameraFOV(float NewCameraFOV) {
- CurrentCameraFOV = NewCameraFOV;
- }
- private void OnCollisionEnter(Collision collision) {
- distanceToGround = CurrentPlayerCollider.bounds.extents.y;
- isGrounded = true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement