using UnityEngine;
using TNet;
public class PlayerController : TNBehaviour {
static public PlayerController instance;
#region MouseLook
private float mouseSensitivity = 2.0f;
private float upDownRotation = 0.0f;
private float minUpDownRotation = -70.0f;
private float maxUpDownRotation = 70.0f;
#endregion
#region Movement
private float walkingSpeed = 6.0f;
private float runningSpeed = 12.0f;
private float crouchingSpeed = 2.0f;
private float currentSpeed = 0.0f;
private float jumpHeight = 5.0f;
private float gravityForce = 9.8f;
private float verticalSpeed = 0.0f;
private bool isRunning = false;
private bool isCrouching = false;
#endregion
private CharacterController characterController;
private Camera playerCamera;
void Awake () {
if ( TNManager.isThisMyObject ) {
instance = this;
}
}
void Start () {
if ( !tno.isMine ) {
this.enabled = false;
}
characterController = GetComponent<CharacterController>();
playerCamera = GetComponentInChildren<Camera>();
}
void Update () {
if ( !tno.isMine ) {
return;
}
UpdateMouseLook();
UpdateMovement();
}
void UpdateMouseLook () {
float leftRightRotation = Input.GetAxis ("Mouse X") * mouseSensitivity;
characterController.transform.Rotate ( 0, leftRightRotation, 0 );
upDownRotation -= Input.GetAxis ("Mouse Y") * mouseSensitivity;
upDownRotation = Mathf.Clamp ( upDownRotation, minUpDownRotation, maxUpDownRotation );
playerCamera.transform.localRotation = Quaternion.Euler ( upDownRotation, 0, 0 );
}
void UpdateMovement () {
// Decide speed
isRunning = ( Input.GetKey(KeyCode.LeftShift) ) ? true : false;
currentSpeed = ( isRunning ) ? runningSpeed : walkingSpeed;
// Crouching speed?
if ( isCrouching ) {
currentSpeed = crouchingSpeed;
}
// Gravity
verticalSpeed -= gravityForce * Time.deltaTime;
verticalSpeed = Mathf.Clamp ( verticalSpeed, -3000, jumpHeight ); // TODO: Do this in a better way
// Things that can only be done while on the ground
if ( characterController.isGrounded ) {
// Are we jumping?
if ( Input.GetButtonDown ("Jump") ) {
verticalSpeed = jumpHeight;
}
// Are we crouching?
if ( Input.GetKey (KeyCode.LeftControl) ) {
if ( !isCrouching ) {
characterController.height /= 2;
isCrouching = true;
}
}
else {
if ( isCrouching ) {
characterController.height *= 2;
Transform characterTransform = characterController.transform;
characterTransform
.position = new Vector3
( characterTransform
.position.x, characterTransform
.position.y + (characterController
.height / 2), characterTransform
.position.z );
isCrouching = false;
}
}
}
// Things that can only be done while NOT on the ground
else {
// TODO
}
// Calculate speed
Vector3 motion
= new Vector3
(Input
.GetAxis ("Horizontal") * currentSpeed, verticalSpeed, Input
.GetAxis ("Vertical") * currentSpeed
);
motion = characterController.transform.rotation * motion;
// Do the actual movement
characterController.Move ( motion * Time.deltaTime );
}
}