66 lines
1.6 KiB
C#

using System;
using UnityEngine;
[Serializable]
public class TankMe : MonoBehaviour
{
public Vehicle vehicle;
public bool bellyup = false;
public void FixedUpdate()
{
if (vehicle.myRigidbody.isKinematic) return; //We are materializing, don't try to manipulate physics
if (vehicle.brakes && vehicle.myRigidbody.velocity.magnitude < 3f)
{
vehicle.myRigidbody.velocity = Vector3.zero;
vehicle.myRigidbody.angularVelocity = Vector3.zero;
if (vehicle.input.y != 0f)
{
vehicle.myRigidbody.drag = 5f;
}
else
{
vehicle.myRigidbody.drag = 10000f;
}
}
else
{
vehicle.myRigidbody.angularDrag = 2f;
vehicle.myRigidbody.drag = 0.01f;
}
if (bellyup && Vector3.Angle(transform.up, Vector3.up) < 35f)
{
bellyup = false;
}
}
public void OnCollisionStay(Collision collision)
{
if (vehicle.zorbBall) return;
foreach (ContactPoint contact in collision.contacts)
{
if (contact.otherCollider.gameObject.layer != 0) continue;
if (
bellyup == false &&
vehicle.myRigidbody.velocity.sqrMagnitude < 20 &&
vehicle.myRigidbody.angularVelocity.sqrMagnitude < 5 &&
Vector3.Angle(transform.up, contact.normal) > 130)
{
bellyup = true;
}
if (bellyup)
{
vehicle.myRigidbody.AddForce(Vector3.up * 5000f);
vehicle.myRigidbody.AddTorque(
Vector3.Cross(transform.up, Vector3.up) * 100000f,
ForceMode.Acceleration);
}
}
}
public void OnSetSpecialInput() {}
}