//---------------------------------------------- // 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; using UnityEngine.UI; using UnityEngine.InputSystem; /// /// Main input class of the RCC. Used by RCC_CarControllerV3, RCC_Camera, RCC_MobileButtons. /// public class RCC_InputManager : RCC_Singleton { public RCC_Inputs inputs = new RCC_Inputs(); private static RCC_InputActions inputActions; public bool gyroUsed = false; public bool logitechSteeringUsed = false; public bool logitechHShifterUsed = false; public int logitechGear = -2; public delegate void onStartStopEngine(); public delegate void onLowBeamHeadlights(); public static event onLowBeamHeadlights OnLowBeamHeadlights; public delegate void onHighBeamHeadlights(); public static event onHighBeamHeadlights OnHighBeamHeadlights; public delegate void onChangeCamera(); public static event onChangeCamera OnChangeCamera; public delegate void onIndicatorLeft(); public static event onIndicatorLeft OnIndicatorLeft; public delegate void onIndicatorRight(); public static event onIndicatorRight OnIndicatorRight; public delegate void onIndicatorHazard(); public static event onIndicatorHazard OnIndicatorHazard; public delegate void onGearShiftUp(); public static event onGearShiftUp OnGearShiftUp; public delegate void onGearShiftDown(); public static event onGearShiftDown OnGearShiftDown; public delegate void onNGear(bool state); public static event onNGear OnNGear; public delegate void onSlowMotion(bool state); public static event onSlowMotion OnSlowMotion; public delegate void onRecord(); public static event onRecord OnRecord; public delegate void onReplay(); public static event onReplay OnReplay; public delegate void onLookBack(bool state); public static event onLookBack OnLookBack; public delegate void onTrailerDetach(); public static event onTrailerDetach OnTrailerDetach; private void Awake() { gameObject.hideFlags = HideFlags.HideInHierarchy; // Creating inputs. inputs = new RCC_Inputs(); } private void Update() { // Creating inputs. if (inputs == null) inputs = new RCC_Inputs(); // Receive inputs from the controller. GetInputs(); } /// /// Gets all inputs and registers button events. /// /// public void GetInputs() { if (inputActions == null) { inputActions = new RCC_InputActions(); // inputActions.Enable(); inputActions.Vehicle.LowBeamLights.performed += LowBeamLights_performed; inputActions.Vehicle.HighBeamLights.performed += HighBeamLights_performed; inputActions.Camera.ChangeCamera.performed += ChangeCamera_performed; inputActions.Vehicle.IndicatorLeft.performed += IndicatorLeft_performed; inputActions.Vehicle.IndicatorRight.performed += IndicatorRight_performed; inputActions.Vehicle.IndicatorHazard.performed += IndicatorHazard_performed; inputActions.Vehicle.GearShiftUp.performed += GearShiftUp_performed; inputActions.Vehicle.GearShiftDown.performed += GearShiftDown_performed; inputActions.Vehicle.NGear.performed += NGear_performed; inputActions.Vehicle.NGear.canceled += NGear_canceled; inputActions.Optional.SlowMotion.performed += SlowMotion_performed; inputActions.Optional.SlowMotion.canceled += SlowMotion_canceled; inputActions.Optional.Record.performed += Record_performed; inputActions.Optional.Replay.performed += Replay_performed; inputActions.Camera.LookBack.performed += LookBack_performed; inputActions.Camera.LookBack.canceled += LookBack_canceled; inputActions.Vehicle.TrailerDetach.performed += TrailerDetach_performed; } if (!RCC_Settings.Instance.mobileControllerEnabled) { inputs.throttleInput = inputActions.Vehicle.Throttle.ReadValue(); inputs.brakeInput = inputActions.Vehicle.Brake.ReadValue(); inputs.steerInput = inputActions.Vehicle.Steering.ReadValue(); inputs.handbrakeInput = inputActions.Vehicle.Handbrake.ReadValue(); inputs.boostInput = inputActions.Vehicle.NOS.ReadValue(); inputs.gearInput = logitechGear; inputs.orbitX = inputActions.Camera.Orbit.ReadValue().x; inputs.orbitY = inputActions.Camera.Orbit.ReadValue().y; inputs.scroll = inputActions.Camera.Zoom.ReadValue(); } else { inputs.throttleInput = RCC_MobileButtons.mobileInputs.throttleInput; inputs.brakeInput = RCC_MobileButtons.mobileInputs.brakeInput; inputs.steerInput = RCC_MobileButtons.mobileInputs.steerInput; inputs.handbrakeInput = RCC_MobileButtons.mobileInputs.handbrakeInput; inputs.boostInput = RCC_MobileButtons.mobileInputs.boostInput; } } public void TrailerDetach_performed(InputAction.CallbackContext obj) { if (OnTrailerDetach != null) OnTrailerDetach(); } private void LookBack_performed(InputAction.CallbackContext obj) { if (OnLookBack != null) OnLookBack(true); } private void LookBack_canceled(InputAction.CallbackContext obj) { if (OnLookBack != null) OnLookBack(false); } private static void Replay_performed(InputAction.CallbackContext obj) { if (OnReplay != null) OnReplay(); } private static void Record_performed(InputAction.CallbackContext obj) { if (OnRecord != null) OnRecord(); } private static void SlowMotion_performed(InputAction.CallbackContext obj) { if (OnSlowMotion != null) OnSlowMotion(true); } private static void SlowMotion_canceled(InputAction.CallbackContext obj) { if (OnSlowMotion != null) OnSlowMotion(false); } private static void NGear_performed(InputAction.CallbackContext obj) { if (OnNGear != null) OnNGear(true); } private static void NGear_canceled(InputAction.CallbackContext obj) { if (OnNGear != null) OnNGear(false); } private static void GearShiftDown_performed(InputAction.CallbackContext obj) { if (OnGearShiftDown != null) OnGearShiftDown(); } private static void GearShiftUp_performed(InputAction.CallbackContext obj) { if (OnGearShiftUp != null) OnGearShiftUp(); } private static void IndicatorHazard_performed(InputAction.CallbackContext obj) { if (OnIndicatorHazard != null) OnIndicatorHazard(); } private static void IndicatorRight_performed(InputAction.CallbackContext obj) { if (OnIndicatorRight != null) OnIndicatorRight(); } private static void IndicatorLeft_performed(InputAction.CallbackContext obj) { if (OnIndicatorLeft != null) OnIndicatorLeft(); } private static void ChangeCamera_performed(InputAction.CallbackContext obj) { if (OnChangeCamera != null) OnChangeCamera(); } private static void HighBeamLights_performed(InputAction.CallbackContext obj) { if (OnHighBeamHeadlights != null) OnHighBeamHeadlights(); } private static void LowBeamLights_performed(InputAction.CallbackContext obj) { if (OnLowBeamHeadlights != null) OnLowBeamHeadlights(); } }