109 lines
2.6 KiB
C#
109 lines
2.6 KiB
C#
|
|
using UnityEngine;
|
|||
|
|
using System.Collections;
|
|||
|
|
|
|||
|
|
public class turretController : vehicleController
|
|||
|
|
{
|
|||
|
|
[Header ("Custom Settings")]
|
|||
|
|
[Space]
|
|||
|
|
|
|||
|
|
public otherVehicleParts vehicleParts;
|
|||
|
|
public vehicleSettings settings;
|
|||
|
|
|
|||
|
|
float lookAngle;
|
|||
|
|
|
|||
|
|
|
|||
|
|
public override void Awake ()
|
|||
|
|
{
|
|||
|
|
base.Awake ();
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void vehicleUpdate ()
|
|||
|
|
{
|
|||
|
|
if (driving && settings.turretCanRotate) {
|
|||
|
|
horizontalAxis = mainInputActionManager.getPlayerMovementAxis ().x;
|
|||
|
|
|
|||
|
|
if (!useHorizontalInputLerp && !touchPlatform) {
|
|||
|
|
rawAxisValues = mainInputActionManager.getPlayerRawMovementAxis ();
|
|||
|
|
horizontalAxis = rawAxisValues.x;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (mainVehicleCameraController.currentState.useCameraSteer && horizontalAxis == 0) {
|
|||
|
|
localLook = vehicleParts.chassis.transform.InverseTransformDirection (mainVehicleCameraController.getLookDirection ());
|
|||
|
|
|
|||
|
|
if (localLook.z < 0f) {
|
|||
|
|
localLook.x = Mathf.Sign (localLook.x);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
steering = localLook.x;
|
|||
|
|
steering = Mathf.Clamp (steering, -1f, 1f);
|
|||
|
|
|
|||
|
|
horizontalAxis = steering;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
lookAngle -= horizontalAxis * settings.rotationSpeed;
|
|||
|
|
|
|||
|
|
if (settings.rotationLimited) {
|
|||
|
|
lookAngle = Mathf.Clamp (lookAngle, -settings.clampTiltXTurret.x, settings.clampTiltXTurret.y);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void FixedUpdate ()
|
|||
|
|
{
|
|||
|
|
if (driving && settings.turretCanRotate) {
|
|||
|
|
Quaternion targetRotation = Quaternion.Euler (0, -lookAngle, 0);
|
|||
|
|
|
|||
|
|
vehicleParts.chassis.transform.localRotation =
|
|||
|
|
Quaternion.Slerp (vehicleParts.chassis.transform.localRotation, targetRotation, Time.deltaTime * settings.smoothRotationSpeed);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//the player is getting on or off from the vehicle, so
|
|||
|
|
public override void changeVehicleState ()
|
|||
|
|
{
|
|||
|
|
driving = !driving;
|
|||
|
|
|
|||
|
|
if (!driving) {
|
|||
|
|
StartCoroutine (resetTurretRotation ());
|
|||
|
|
|
|||
|
|
lookAngle = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//the vehicle has been destroyed, so disabled every component in it
|
|||
|
|
public override void disableVehicle ()
|
|||
|
|
{
|
|||
|
|
//disable the controller
|
|||
|
|
this.enabled = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//reset the weapon rotation when the player gets off
|
|||
|
|
IEnumerator resetTurretRotation ()
|
|||
|
|
{
|
|||
|
|
Quaternion currentBaseYRotation = vehicleParts.chassis.transform.localRotation;
|
|||
|
|
for (float t = 0; t < 1;) {
|
|||
|
|
t += Time.deltaTime * 3;
|
|||
|
|
vehicleParts.chassis.transform.localRotation = Quaternion.Slerp (currentBaseYRotation, Quaternion.identity, t);
|
|||
|
|
yield return null;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[System.Serializable]
|
|||
|
|
public class otherVehicleParts
|
|||
|
|
{
|
|||
|
|
public GameObject chassis;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[System.Serializable]
|
|||
|
|
public class vehicleSettings
|
|||
|
|
{
|
|||
|
|
public bool turretCanRotate;
|
|||
|
|
public bool rotationLimited;
|
|||
|
|
public float rotationSpeed;
|
|||
|
|
public float smoothRotationSpeed = 5;
|
|||
|
|
public Vector2 clampTiltXTurret;
|
|||
|
|
public GameObject vehicleCamera;
|
|||
|
|
}
|
|||
|
|
}
|