using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.SceneManagement; /// /// A simple manager script for all demo scenes. It has an array of spawnable player vehicles, public methods, setting new behavior modes, restart, and quit application. /// [AddComponentMenu("BoneCracker Games/Realistic Car Controller/UI/RCC Demo Manager")] public class RCC_Demo : MonoBehaviour { [HideInInspector] public int selectedVehicleIndex = 0; // An integer index value used to spawn a new vehicle. [HideInInspector] public int selectedBehaviorIndex = 0; // An integer index value used to set a new behavior mode. /// /// An integer index value used for spawning a new vehicle. /// /// public void SelectVehicle(int index) { selectedVehicleIndex = index; } /// /// Spawns the player vehicle. /// public void Spawn() { // Last known position and rotation of last active vehicle. Vector3 lastKnownPos = new Vector3(); Quaternion lastKnownRot = new Quaternion(); // Checking if there is a player vehicle on the scene. if (RCC_SceneManager.Instance.activePlayerVehicle) { lastKnownPos = RCC_SceneManager.Instance.activePlayerVehicle.transform.position; lastKnownRot = RCC_SceneManager.Instance.activePlayerVehicle.transform.rotation; } // If last known position and rotation is not assigned, camera's position and rotation will be used. if (lastKnownPos == Vector3.zero) { if (RCC_SceneManager.Instance.activePlayerCamera) { lastKnownPos = RCC_SceneManager.Instance.activePlayerCamera.transform.position; lastKnownRot = RCC_SceneManager.Instance.activePlayerCamera.transform.rotation; } } // We don't need X and Z rotation angle. Just Y. lastKnownRot.x = 0f; lastKnownRot.z = 0f; // Is there any last vehicle? RCC_CarControllerV3 lastVehicle = RCC_SceneManager.Instance.activePlayerVehicle; #if BCG_ENTEREXIT BCG_EnterExitVehicle lastEnterExitVehicle; bool enterExitVehicleFound = false; if (lastVehicle) { lastEnterExitVehicle = lastVehicle.GetComponentInChildren(); if (lastEnterExitVehicle && lastEnterExitVehicle.driver) { enterExitVehicleFound = true; BCG_EnterExitManager.Instance.waitTime = 10f; lastEnterExitVehicle.driver.GetOut(); } } #endif // If we have controllable vehicle by player on scene, destroy it. if (lastVehicle) Destroy(lastVehicle.gameObject); // Here we are creating our new vehicle. RCC.SpawnRCC(RCC_DemoVehicles.Instance.vehicles[selectedVehicleIndex], lastKnownPos, lastKnownRot, true, true, true); #if BCG_ENTEREXIT if (enterExitVehicleFound) { lastEnterExitVehicle = null; lastEnterExitVehicle = RCC_SceneManager.Instance.activePlayerVehicle.GetComponentInChildren(); if (!lastEnterExitVehicle) lastEnterExitVehicle = RCC_SceneManager.Instance.activePlayerVehicle.gameObject.AddComponent(); if (BCG_EnterExitManager.Instance.activePlayer && lastEnterExitVehicle && lastEnterExitVehicle.driver == null) { BCG_EnterExitManager.Instance.waitTime = 10f; BCG_EnterExitManager.Instance.activePlayer.GetIn(lastEnterExitVehicle); } } #endif } /// /// An integer index value used for setting behavior mode. /// /// public void SetBehavior(int index) { selectedBehaviorIndex = index; } /// /// Here we are setting new selected behavior to corresponding one. /// public void InitBehavior() { RCC.SetBehavior(selectedBehaviorIndex); } /// /// Sets the mobile controller type. /// /// public void SetMobileController(int index) { switch (index) { case 0: RCC.SetMobileController(RCC_Settings.MobileController.TouchScreen); break; case 1: RCC.SetMobileController(RCC_Settings.MobileController.Gyro); break; case 2: RCC.SetMobileController(RCC_Settings.MobileController.SteeringWheel); break; case 3: RCC.SetMobileController(RCC_Settings.MobileController.Joystick); break; } } /// /// Sets the quality. /// /// Index. public void SetQuality(int index) { QualitySettings.SetQualityLevel(index); } /// /// Simply restarting the current scene. /// public void RestartScene() { SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); } /// /// Simply quit application. Not working on Editor. /// public void Quit() { Application.Quit(); } }