//---------------------------------------------- // Realistic Car Controller // // Copyright © 2014 - 2023 BoneCracker Games // https://www.bonecrackergames.com // Buğra Özdoğanlar // //---------------------------------------------- using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// Checks the overall setup and configuration of the vehicle. /// public class RCC_CheckUp { /// /// Gets all mesh colliders with trigger enabled. /// /// /// public static MeshCollider[] GetTriggerMeshColliders(GameObject vehicle) { MeshCollider[] meshcolliders = vehicle.GetComponentsInChildren(true); List triggers = new List(); for (int i = 0; i < meshcolliders.Length; i++) { if (meshcolliders[i].isTrigger == true) triggers.Add(meshcolliders[i]); } return triggers.ToArray(); } /// /// Gets all colliders. /// /// /// public static Collider[] GetColliders(GameObject vehicle) { Collider[] colliders = vehicle.GetComponentsInChildren(true); List coll = new List(); for (int i = 0; i < colliders.Length; i++) coll.Add(colliders[i]); return coll.ToArray(); } /// /// Vehicle has a collider or not? /// /// /// public static bool HaveCollider(GameObject vehicle) { Collider[] colliders = vehicle.GetComponentsInChildren(true); List coll = new List(); for (int i = 0; i < colliders.Length; i++) { if (colliders[i].enabled && colliders[i].GetType() != typeof(WheelCollider)) coll.Add(colliders[i]); } if (coll.Count >= 1) return true; else return false; } /// /// Gets all rigidbodies. /// /// /// public static Rigidbody[] GetRigids(GameObject vehicle) { Rigidbody[] rigidbodies = vehicle.GetComponentsInChildren(true); List rigids = new List(); for (int i = 0; i < rigidbodies.Length; i++) { if (rigidbodies[i] != vehicle.GetComponent() && rigidbodies[i].GetComponent() == null && rigidbodies[i].GetComponent() == null && rigidbodies[i] != vehicle.GetComponent()) rigids.Add(rigidbodies[i]); } return rigids.ToArray(); } /// /// Gets all wheelcolliders. /// /// /// public static WheelCollider[] GetWheelColliders(GameObject vehicle) { WheelCollider[] wheelColliders = vehicle.GetComponentsInChildren(true); List wheels = new List(); for (int i = 0; i < wheelColliders.Length; i++) { if (wheelColliders[i].radius == 0 || wheelColliders[i].suspensionDistance <= 0.01) wheels.Add(wheelColliders[i]); } return wheels.ToArray(); } /// /// Gets all sphere colliders. /// /// /// public static SphereCollider[] GetSphereColliders(GameObject vehicle) { SphereCollider[] sphereColliders = vehicle.GetComponentsInChildren(true); List spheres = new List(); for (int i = 0; i < sphereColliders.Length; i++) { if (sphereColliders[i].enabled) spheres.Add(sphereColliders[i]); } return spheres.ToArray(); } /// /// Checks incorrect configurations. /// /// /// public static string[] IncorrectConfiguration(RCC_CarControllerV3 vehicle) { float minEngineRPM = vehicle.minEngineRPM; float maxEngineRPM = vehicle.maxEngineRPM; float gearDownRPM = vehicle.gearShiftDownRPM; float gearUpRPM = vehicle.gearShiftUpRPM; List errorMessages = new List(); if (minEngineRPM >= maxEngineRPM) errorMessages.Add("Min engine rpm must be lower than max engine rpm!"); if (maxEngineRPM <= minEngineRPM) errorMessages.Add("Max engine rpm must be higher than min engine rpm!"); if (gearDownRPM >= gearUpRPM) errorMessages.Add("Gear shift down rpm must be lower than gear shift up rpm!"); if (gearUpRPM <= gearDownRPM) errorMessages.Add("Gear shift up rpm must be higher than gear shift down rpm!"); if (gearDownRPM <= minEngineRPM) errorMessages.Add("Gear shift down rpm must be higher than min engine rpm!"); if (gearUpRPM >= maxEngineRPM) errorMessages.Add("Gear shift up rpm must be lower than max engine rpm!"); if ((Mathf.Abs(maxEngineRPM) - Mathf.Abs(minEngineRPM)) < 3000f) errorMessages.Add("Max and min engine rpms are too close to each other!"); if ((Mathf.Abs(gearUpRPM) - Mathf.Abs(gearDownRPM)) < 1000f) errorMessages.Add("Gear shift up and down rpms are too close to each other!"); return errorMessages.ToArray(); } /// /// Checks meshes with wrong axes. /// /// /// /// public static bool HaveWrongAxis(GameObject vehicle, MeshFilter[] meshes) { for (int i = 0; i < meshes.Length; i++) { if (meshes[i]) { if (1 - Mathf.Abs(Quaternion.Dot(meshes[i].transform.rotation, vehicle.transform.rotation)) > .01f) return true; } } return false; } /// /// Checks the wheel configuration. /// /// /// public static bool[] HaveWrongOverride(RCC_CarControllerV3 vehicle) { RCC_WheelCollider[] allWheels = vehicle.GetComponentsInChildren(true); bool powerFound = false; bool steerFound = false; bool brakeFround = false; bool ebrakeFound = false; for (int i = 0; i < allWheels.Length; i++) { if (allWheels[i].canPower) powerFound = true; if (allWheels[i].canSteer) steerFound = true; if (allWheels[i].canBrake) brakeFround = true; if (allWheels[i].canHandbrake) ebrakeFound = true; } bool[] found = { powerFound, steerFound, brakeFround, ebrakeFound }; return found; } }