215 lines
6.8 KiB
C#
215 lines
6.8 KiB
C#
using System;
|
|
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
[Serializable]
|
|
public class VehicleMe : MonoBehaviour
|
|
{
|
|
public Vehicle vehicle;
|
|
private float rocketFireTime = 0.00f;
|
|
|
|
public void Update()
|
|
{
|
|
//Input Assignments
|
|
if (
|
|
Input.GetButtonDown("Jump") &&
|
|
(!Game.Messaging || !Game.Messaging.chatting) &&
|
|
Time.time > Game.Controller.kpTime)
|
|
{
|
|
networkView.RPC(
|
|
"sI",
|
|
RPCMode.All,
|
|
vehicle.specialInput ? false : true);
|
|
Game.Controller.kpTime = Time.time + Game.Controller.kpDur;
|
|
}
|
|
if (Input.GetButton("Fire3") && !vehicle.brakes)
|
|
{
|
|
networkView.RPC("sB", RPCMode.All, true);
|
|
}
|
|
else if (!Input.GetButton("Fire3") && vehicle.brakes)
|
|
{
|
|
networkView.RPC("sB", RPCMode.All, false);
|
|
}
|
|
vehicle.input.x = Input.GetAxis("Horizontal");
|
|
vehicle.input.y = Input.GetAxis("Vertical");
|
|
vehicle.input.z = Input.GetAxis("Throttle");
|
|
vehicle.input.w = Input.GetAxis("Yaw");
|
|
if (vehicle.inputThrottle)
|
|
{
|
|
vehicle.input.z = (vehicle.input.z + 1f) * 0.5f;
|
|
}
|
|
else
|
|
{
|
|
if (vehicle.input.x > 0.1f * -1f && vehicle.input.x < 0.1f)
|
|
{
|
|
vehicle.input.x = vehicle.input.w;
|
|
}
|
|
if (vehicle.input.y > 0.1f * -1f && vehicle.input.y < 0.1f)
|
|
{
|
|
vehicle.input.y = vehicle.input.z;
|
|
}
|
|
}
|
|
|
|
//Weapons Locking
|
|
GameObject laserLock;
|
|
if (Game.Settings.laserLocking)
|
|
{
|
|
RaycastHit hit = default(RaycastHit);
|
|
if (
|
|
Physics.Raycast(
|
|
transform.position + transform.forward * ((
|
|
Game.Settings.laserLock[vehicle.vehId] +
|
|
(float)vehicle.camOffset *
|
|
0.1f) * 15f),
|
|
transform.forward,
|
|
out hit,
|
|
Mathf.Infinity,
|
|
1 << 14) &&
|
|
(vehicle.isIt != 0 ||
|
|
((Vehicle)hit.transform
|
|
.gameObject.GetComponent(typeof(Vehicle))
|
|
).isIt != 0))
|
|
{
|
|
laserLock = hit.transform.gameObject;
|
|
vehicle.laserAimer.active = false;
|
|
vehicle.laserAimerLocked.active = true;
|
|
}
|
|
else
|
|
{
|
|
laserLock = null;
|
|
vehicle.laserAimer.active = true;
|
|
vehicle.laserAimerLocked.active = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
vehicle.laserAimer.active = vehicle.laserAimer.active = false;
|
|
laserLock = null;
|
|
}
|
|
|
|
//Firing
|
|
if (
|
|
(bool)vehicle.ridePos &&
|
|
Game.Settings.lasersAllowed &&
|
|
rocketFireTime < Time.time &&
|
|
Game.Settings.firepower[vehicle.vehId] > 0 &&
|
|
(laserLock || //Autofiring With Weapons Lock
|
|
(Input.GetButton("Fire1") &&
|
|
!Input.GetMouseButton(0)) || //Firing with Joystick
|
|
(Input.GetButton("Fire1") &&
|
|
(Input.GetButton("Fire2") ||
|
|
Input.GetButton("Snipe") ||
|
|
Game.Settings.camMode == 0)) || //Firing with mouse while inside vehicle
|
|
(Input.GetButton("Fire1") &&
|
|
((Input.mousePosition.x > Screen.width * .25 &&
|
|
Input.mousePosition.x < Screen.width - 200))) //Firing with mouse while outside vehicle
|
|
))
|
|
{
|
|
bool snipe;
|
|
if ((bool)laserLock)
|
|
{
|
|
snipe = (Game.Settings.firepower[vehicle.vehId] > 2 ||
|
|
(Game.Settings.firepower[vehicle.vehId] > 1 &&
|
|
(laserLock.rigidbody.velocity.sqrMagnitude > 500 ||
|
|
Vector3.Distance(
|
|
transform.position,
|
|
laserLock.transform.position) > 500)));
|
|
networkView.RPC(
|
|
(snipe ? "fSl" : "fRl"),
|
|
RPCMode.All,
|
|
networkView.viewID,
|
|
Network.time.ToString(),
|
|
vehicle.ridePos.position + vehicle.transform.up * -0.1f,
|
|
laserLock.networkView.viewID);
|
|
}
|
|
else
|
|
{
|
|
Quaternion rang;
|
|
if (
|
|
Game.Settings.camMode == 0 ||
|
|
Input.GetButton("Fire2") ||
|
|
Input.GetButton("Snipe"))
|
|
{
|
|
rang = Camera.main.transform.rotation;
|
|
}
|
|
else rang = vehicle.ridePos.rotation;
|
|
snipe = (
|
|
(Input.GetButton("Snipe") &&
|
|
Game.Settings.firepower[vehicle.vehId] > 1) ||
|
|
Game.Settings.firepower[vehicle.vehId] > 2);
|
|
networkView.RPC(
|
|
(snipe ? "fS" : "fR"),
|
|
RPCMode.All,
|
|
networkView.viewID,
|
|
Network.time.ToString(),
|
|
vehicle.ridePos.position + vehicle.transform.up * -0.1f,
|
|
rang.eulerAngles);
|
|
}
|
|
rocketFireTime = Time.time + ((snipe ?
|
|
(Game.Settings.firepower[vehicle.vehId] > 2f ?
|
|
0.5f :
|
|
2f) :
|
|
0.25f));
|
|
}
|
|
|
|
//Bounds Checking
|
|
if (vehicle.myRigidbody.position.y < -300f)
|
|
{
|
|
vehicle.myRigidbody.velocity = vehicle.myRigidbody.velocity.normalized;
|
|
vehicle.myRigidbody.isKinematic = true;
|
|
vehicle.transform.position = World.baseTF.position;
|
|
vehicle.myRigidbody.isKinematic = false;
|
|
if ((bool)Game.Messaging)
|
|
{
|
|
Game.Messaging.broadcast(name + " fell off the planet");
|
|
}
|
|
}
|
|
if (vehicle.myRigidbody.velocity.magnitude > 500f)
|
|
{
|
|
vehicle.myRigidbody.velocity = vehicle.myRigidbody.velocity * 0.5f;
|
|
}
|
|
}
|
|
|
|
public void FixedUpdate()
|
|
{
|
|
if (
|
|
(bool)vehicle.ramoSphere &&
|
|
vehicle.zorbBall &&
|
|
(vehicle.input.y != 0f || vehicle.input.x != 0f))
|
|
{
|
|
rigidbody.AddForce(
|
|
Vector3.Scale(
|
|
new Vector3(1f, 0f, 1f),
|
|
Camera.main.transform.TransformDirection(new Vector3(
|
|
vehicle.input.x * Mathf.Max(
|
|
0f,
|
|
Game.Settings.zorbSpeed + Game.Settings.zorbAgility),
|
|
0f,
|
|
vehicle.input.y * Game.Settings.zorbSpeed))),
|
|
ForceMode.Acceleration);
|
|
rigidbody.AddTorque(
|
|
Camera.main.transform.TransformDirection(new Vector3(
|
|
vehicle.input.y,
|
|
0f,
|
|
vehicle.input.x * -1f)) * Game.Settings.zorbSpeed,
|
|
ForceMode.Acceleration);
|
|
}
|
|
}
|
|
|
|
public void OnPrefsUpdated()
|
|
{
|
|
if (Game.Settings.renderLevel > 4)
|
|
{
|
|
Light lt = (Light)gameObject.GetComponentInChildren(typeof(Light));
|
|
if ((bool)lt) lt.enabled = true;
|
|
}
|
|
if (Game.Settings.renderLevel > 3)
|
|
{
|
|
foreach (TrailRenderer tr in gameObject.GetComponentsInChildren(typeof(TrailRenderer)))
|
|
{
|
|
tr.enabled = true;
|
|
}
|
|
}
|
|
}
|
|
}
|