//---------------------------------------------- // Realistic Car Controller // // Copyright © 2014 - 2023 BoneCracker Games // https://www.bonecrackergames.com // Buğra Özdoğanlar // //---------------------------------------------- using UnityEngine; using UnityEngine.UI; using System.Collections; using System.Collections.Generic; /// /// A simple customizer example script used for receiving methods from UI elements and send them to RCC_Customization script. Also updates all UI elements for new spawned vehicles too. /// [AddComponentMenu("BoneCracker Games/Realistic Car Controller/UI/RCC Customizer Example")] public class RCC_CustomizerExample : RCC_Singleton { [Header("UI Menus")] public GameObject wheelsMenu; public GameObject configurationMenu; public GameObject steeringAssistancesMenu; public GameObject colorsMenu; [Header("UI Sliders")] public Slider frontCamber; public Slider rearCamber; public Slider frontSuspensionDistances; public Slider rearSuspensionDistances; public Slider frontSuspensionDampers; public Slider rearSuspensionDampers; public Slider frontSuspensionSprings; public Slider rearSuspensionSprings; public Slider gearShiftingThreshold; public Slider clutchThreshold; [Header("UI Toggles")] public Toggle TCS; public Toggle ABS; public Toggle ESP; public Toggle SH; public Toggle counterSteering; public Toggle steeringSensitivity; public Toggle NOS; public Toggle turbo; public Toggle exhaustFlame; public Toggle revLimiter; public Toggle transmission; [Header("UI InputFields")] public InputField maxSpeed; public InputField maxBrake; public InputField maxTorque; [Header("UI Dropdown Menus")] public Dropdown drivetrainMode; private void Start() { CheckUIs(); } public void CheckUIs() { if (!RCC_SceneManager.Instance.activePlayerVehicle) return; if (frontCamber) frontCamber.SetValueWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.FrontLeftWheelCollider.camber); if (rearCamber) rearCamber.SetValueWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.RearLeftWheelCollider.camber); if (frontSuspensionDistances) frontSuspensionDistances.SetValueWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.FrontLeftWheelCollider.WheelCollider.suspensionDistance); if (rearSuspensionDistances) rearSuspensionDistances.SetValueWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.RearLeftWheelCollider.WheelCollider.suspensionDistance); if (frontSuspensionDampers) frontSuspensionDampers.SetValueWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.FrontLeftWheelCollider.WheelCollider.suspensionSpring.damper); if (rearSuspensionDampers) rearSuspensionDampers.SetValueWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.RearLeftWheelCollider.WheelCollider.suspensionSpring.damper); if (frontSuspensionSprings) frontSuspensionSprings.SetValueWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.FrontLeftWheelCollider.WheelCollider.suspensionSpring.spring); if (rearSuspensionSprings) rearSuspensionSprings.SetValueWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.RearLeftWheelCollider.WheelCollider.suspensionSpring.spring); if (gearShiftingThreshold) gearShiftingThreshold.SetValueWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.gearShiftingThreshold); if (clutchThreshold) clutchThreshold.SetValueWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.clutchInertia); if (TCS) TCS.SetIsOnWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.TCS); if (ABS) ABS.SetIsOnWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.ABS); if (ESP) ESP.SetIsOnWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.ESP); if (SH) SH.SetIsOnWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.steeringHelper); if (counterSteering) counterSteering.SetIsOnWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.useCounterSteering); if (NOS) NOS.SetIsOnWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.useNOS); if (turbo) turbo.SetIsOnWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.useTurbo); if (exhaustFlame) exhaustFlame.SetIsOnWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.useExhaustFlame); if (revLimiter) revLimiter.SetIsOnWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.useRevLimiter); if (transmission) transmission.SetIsOnWithoutNotify(RCC_SceneManager.Instance.activePlayerVehicle.AutomaticGear); if (maxSpeed) maxSpeed.text = RCC_SceneManager.Instance.activePlayerVehicle.maxspeed.ToString(); if (maxBrake) maxBrake.text = RCC_SceneManager.Instance.activePlayerVehicle.brakeTorque.ToString(); if (maxTorque) maxTorque.text = RCC_SceneManager.Instance.activePlayerVehicle.maxEngineTorque.ToString(); if (drivetrainMode) { switch (RCC_SceneManager.Instance.activePlayerVehicle.wheelTypeChoise) { case RCC_CarControllerV3.WheelType.FWD: drivetrainMode.SetValueWithoutNotify(0); break; case RCC_CarControllerV3.WheelType.RWD: drivetrainMode.SetValueWithoutNotify(1); break; case RCC_CarControllerV3.WheelType.AWD: drivetrainMode.SetValueWithoutNotify(2); break; case RCC_CarControllerV3.WheelType.BIASED: drivetrainMode.SetValueWithoutNotify(3); break; } } } public void OpenMenu(GameObject activeMenu) { if (activeMenu && activeMenu.activeInHierarchy) { activeMenu.SetActive(false); return; } if (wheelsMenu) wheelsMenu.SetActive(false); if (configurationMenu) configurationMenu.SetActive(false); if (steeringAssistancesMenu) steeringAssistancesMenu.SetActive(false); if (colorsMenu) colorsMenu.SetActive(false); if (activeMenu) activeMenu.SetActive(true); } public void CloseAllMenus() { if (wheelsMenu) wheelsMenu.SetActive(false); if (configurationMenu) configurationMenu.SetActive(false); if (steeringAssistancesMenu) steeringAssistancesMenu.SetActive(false); if (colorsMenu) colorsMenu.SetActive(false); } public void SetCustomizationMode(bool state) { if (!RCC_SceneManager.Instance.activePlayerVehicle) return; RCC_Customization.SetCustomizationMode(RCC_SceneManager.Instance.activePlayerVehicle, state); if (state) CheckUIs(); } public void SetFrontCambersBySlider(Slider slider) { RCC_Customization.SetFrontCambers(RCC_SceneManager.Instance.activePlayerVehicle, slider.value); } public void SetRearCambersBySlider(Slider slider) { RCC_Customization.SetRearCambers(RCC_SceneManager.Instance.activePlayerVehicle, slider.value); } public void TogglePreviewSmokeByToggle(Toggle toggle) { RCC_Customization.SetSmokeParticle(RCC_SceneManager.Instance.activePlayerVehicle, toggle.isOn); } public void TogglePreviewExhaustFlameByToggle(Toggle toggle) { RCC_Customization.SetExhaustFlame(RCC_SceneManager.Instance.activePlayerVehicle, toggle.isOn); } public void SetSmokeColorByColorPicker(RCC_ColorPickerBySliders color) { RCC_Customization.SetSmokeColor(RCC_SceneManager.Instance.activePlayerVehicle, 0, color.color); } public void SetHeadlightColorByColorPicker(RCC_ColorPickerBySliders color) { RCC_Customization.SetHeadlightsColor(RCC_SceneManager.Instance.activePlayerVehicle, color.color); } public void ChangeWheelsBySlider(Slider slider) { RCC_Customization.ChangeWheels(RCC_SceneManager.Instance.activePlayerVehicle, RCC_ChangableWheels.Instance.wheels[(int)slider.value].wheel, true); } public void SetFrontSuspensionTargetsBySlider(Slider slider) { RCC_Customization.SetFrontSuspensionsTargetPos(RCC_SceneManager.Instance.activePlayerVehicle, slider.value); } public void SetRearSuspensionTargetsBySlider(Slider slider) { RCC_Customization.SetRearSuspensionsTargetPos(RCC_SceneManager.Instance.activePlayerVehicle, slider.value); } public void SetAllSuspensionTargetsByButton(float strength) { RCC_Customization.SetAllSuspensionsTargetPos(RCC_SceneManager.Instance.activePlayerVehicle, strength); } public void SetFrontSuspensionDistancesBySlider(Slider slider) { RCC_Customization.SetFrontSuspensionsDistances(RCC_SceneManager.Instance.activePlayerVehicle, slider.value); } public void SetRearSuspensionDistancesBySlider(Slider slider) { RCC_Customization.SetRearSuspensionsDistances(RCC_SceneManager.Instance.activePlayerVehicle, slider.value); } public void SetGearShiftingThresholdBySlider(Slider slider) { RCC_Customization.SetGearShiftingThreshold(RCC_SceneManager.Instance.activePlayerVehicle, Mathf.Clamp(slider.value, .5f, .95f)); } public void SetClutchThresholdBySlider(Slider slider) { RCC_Customization.SetClutchThreshold(RCC_SceneManager.Instance.activePlayerVehicle, Mathf.Clamp(slider.value, .1f, .9f)); } public void SetDriveTrainModeByDropdown(Dropdown dropdown) { switch (dropdown.value) { case 0: RCC_Customization.SetDrivetrainMode(RCC_SceneManager.Instance.activePlayerVehicle, RCC_CarControllerV3.WheelType.FWD); break; case 1: RCC_Customization.SetDrivetrainMode(RCC_SceneManager.Instance.activePlayerVehicle, RCC_CarControllerV3.WheelType.RWD); break; case 2: RCC_Customization.SetDrivetrainMode(RCC_SceneManager.Instance.activePlayerVehicle, RCC_CarControllerV3.WheelType.AWD); break; } } public void SetCounterSteeringByToggle(Toggle toggle) { RCC_Customization.SetCounterSteering(RCC_SceneManager.Instance.activePlayerVehicle, toggle.isOn); } public void SetSteeringLimitByToggle(Toggle toggle) { RCC_Customization.SetSteeringLimit(RCC_SceneManager.Instance.activePlayerVehicle, toggle.isOn); } public void SetNOSByToggle(Toggle toggle) { RCC_Customization.SetNOS(RCC_SceneManager.Instance.activePlayerVehicle, toggle.isOn); } public void SetTurboByToggle(Toggle toggle) { RCC_Customization.SetTurbo(RCC_SceneManager.Instance.activePlayerVehicle, toggle.isOn); } public void SetExhaustFlameByToggle(Toggle toggle) { RCC_Customization.SetUseExhaustFlame(RCC_SceneManager.Instance.activePlayerVehicle, toggle.isOn); } public void SetRevLimiterByToggle(Toggle toggle) { RCC_Customization.SetRevLimiter(RCC_SceneManager.Instance.activePlayerVehicle, toggle.isOn); } public void SetFrontSuspensionsSpringForceBySlider(Slider slider) { RCC_Customization.SetFrontSuspensionsSpringForce(RCC_SceneManager.Instance.activePlayerVehicle, Mathf.Clamp(slider.value, 10000f, 100000f)); } public void SetRearSuspensionsSpringForceBySlider(Slider slider) { RCC_Customization.SetRearSuspensionsSpringForce(RCC_SceneManager.Instance.activePlayerVehicle, Mathf.Clamp(slider.value, 10000f, 100000f)); } public void SetFrontSuspensionsSpringDamperBySlider(Slider slider) { RCC_Customization.SetFrontSuspensionsSpringDamper(RCC_SceneManager.Instance.activePlayerVehicle, Mathf.Clamp(slider.value, 1000f, 10000f)); } public void SetRearSuspensionsSpringDamperBySlider(Slider slider) { RCC_Customization.SetRearSuspensionsSpringDamper(RCC_SceneManager.Instance.activePlayerVehicle, Mathf.Clamp(slider.value, 1000f, 10000f)); } public void SetMaximumSpeedByInputField(InputField inputField) { RCC_Customization.SetMaximumSpeed(RCC_SceneManager.Instance.activePlayerVehicle, StringToFloat(inputField.text, 200f)); inputField.text = RCC_SceneManager.Instance.activePlayerVehicle.maxspeed.ToString(); } public void SetMaximumTorqueByInputField(InputField inputField) { RCC_Customization.SetMaximumTorque(RCC_SceneManager.Instance.activePlayerVehicle, StringToFloat(inputField.text, 2000f)); inputField.text = RCC_SceneManager.Instance.activePlayerVehicle.maxEngineTorque.ToString(); } public void SetMaximumBrakeByInputField(InputField inputField) { RCC_Customization.SetMaximumBrake(RCC_SceneManager.Instance.activePlayerVehicle, StringToFloat(inputField.text, 2000f)); inputField.text = RCC_SceneManager.Instance.activePlayerVehicle.brakeTorque.ToString(); } public void RepairCar() { RCC_Customization.Repair(RCC_SceneManager.Instance.activePlayerVehicle); } public void SetESP(Toggle toggle) { RCC_Customization.SetESP(RCC_SceneManager.Instance.activePlayerVehicle, toggle.isOn); } public void SetABS(Toggle toggle) { RCC_Customization.SetABS(RCC_SceneManager.Instance.activePlayerVehicle, toggle.isOn); } public void SetTCS(Toggle toggle) { RCC_Customization.SetTCS(RCC_SceneManager.Instance.activePlayerVehicle, toggle.isOn); } public void SetSH(Toggle toggle) { RCC_Customization.SetSH(RCC_SceneManager.Instance.activePlayerVehicle, toggle.isOn); } public void SetSHStrength(Slider slider) { RCC_Customization.SetSHStrength(RCC_SceneManager.Instance.activePlayerVehicle, slider.value); } public void SetTransmission(Toggle toggle) { RCC_Customization.SetTransmission(RCC_SceneManager.Instance.activePlayerVehicle, toggle.isOn); } public void SaveStats() { RCC_Customization.SaveStats(RCC_SceneManager.Instance.activePlayerVehicle); } public void LoadStats() { RCC_Customization.LoadStats(RCC_SceneManager.Instance.activePlayerVehicle); CheckUIs(); } public void ResetStats() { int selectedVehicleIndex = 0; if (FindObjectOfType()) selectedVehicleIndex = FindObjectOfType().selectedVehicleIndex; RCC_Customization.ResetStats(RCC_SceneManager.Instance.activePlayerVehicle, RCC_DemoVehicles.Instance.vehicles[selectedVehicleIndex]); CheckUIs(); } private float StringToFloat(string stringValue, float defaultValue) { float result = defaultValue; float.TryParse(stringValue, out result); return result; } }