357 lines
10 KiB
C#
357 lines
10 KiB
C#
//----------------------------------------------
|
|
// 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;
|
|
using UnityEngine.EventSystems;
|
|
|
|
/// <summary>
|
|
/// UI buttons used in options panel. It has an enum for all kind of buttons.
|
|
/// </summary>
|
|
[AddComponentMenu("BoneCracker Games/Realistic Car Controller/UI/RCC UI Dashboard Button")]
|
|
public class RCC_UIDashboardButton : MonoBehaviour, IPointerClickHandler {
|
|
|
|
private Button button; // Button.
|
|
|
|
public ButtonType _buttonType = ButtonType.ABS; // Type of the button.
|
|
public enum ButtonType { Start, ABS, ESP, TCS, Headlights, LeftIndicator, RightIndicator, Gear, Low, Med, High, SH, GearUp, GearDown, HazardLights, SlowMo, Record, Replay, Neutral, ChangeCamera };
|
|
private Scrollbar gearSlider;
|
|
|
|
public int gearDirection = 0;
|
|
|
|
/// <summary>
|
|
/// When clicked.
|
|
/// </summary>
|
|
/// <param name="eventData"></param>
|
|
public void OnPointerClick(PointerEventData eventData) {
|
|
|
|
OnClicked();
|
|
|
|
}
|
|
|
|
private void Awake() {
|
|
|
|
button = GetComponent<Button>();
|
|
|
|
// If this button type is a gear selector, get scrollbar and add listener.
|
|
if (_buttonType == ButtonType.Gear && GetComponentInChildren<Scrollbar>()) {
|
|
|
|
gearSlider = GetComponentInChildren<Scrollbar>();
|
|
gearSlider.onValueChanged.AddListener(delegate { ChangeGear(); });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
private void OnEnable() {
|
|
|
|
// Updating image of the button.
|
|
UpdateImageOfButton();
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// When clicked.
|
|
/// </summary>
|
|
private void OnClicked() {
|
|
|
|
switch (_buttonType) {
|
|
|
|
case ButtonType.Low:
|
|
|
|
QualitySettings.SetQualityLevel(1);
|
|
|
|
break;
|
|
|
|
case ButtonType.Med:
|
|
|
|
QualitySettings.SetQualityLevel(3);
|
|
|
|
break;
|
|
|
|
case ButtonType.High:
|
|
|
|
QualitySettings.SetQualityLevel(5);
|
|
|
|
break;
|
|
|
|
case ButtonType.SlowMo:
|
|
|
|
if (Time.timeScale != .2f)
|
|
Time.timeScale = .2f;
|
|
else
|
|
Time.timeScale = 1f;
|
|
|
|
break;
|
|
|
|
case ButtonType.Record:
|
|
|
|
RCC.StartStopRecord();
|
|
|
|
break;
|
|
|
|
case ButtonType.Replay:
|
|
|
|
RCC.StartStopReplay();
|
|
|
|
break;
|
|
|
|
case ButtonType.Neutral:
|
|
|
|
RCC.StopRecordReplay();
|
|
|
|
break;
|
|
|
|
case ButtonType.ChangeCamera:
|
|
|
|
RCC.ChangeCamera();
|
|
|
|
break;
|
|
|
|
|
|
case ButtonType.Start:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle)
|
|
RCC_SceneManager.Instance.activePlayerVehicle.KillOrStartEngine();
|
|
|
|
break;
|
|
|
|
case ButtonType.ABS:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle)
|
|
RCC_SceneManager.Instance.activePlayerVehicle.ABS = !RCC_SceneManager.Instance.activePlayerVehicle.ABS;
|
|
|
|
break;
|
|
|
|
case ButtonType.ESP:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle)
|
|
RCC_SceneManager.Instance.activePlayerVehicle.ESP = !RCC_SceneManager.Instance.activePlayerVehicle.ESP;
|
|
|
|
break;
|
|
|
|
case ButtonType.TCS:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle)
|
|
RCC_SceneManager.Instance.activePlayerVehicle.TCS = !RCC_SceneManager.Instance.activePlayerVehicle.TCS;
|
|
|
|
break;
|
|
|
|
case ButtonType.SH:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle)
|
|
RCC_SceneManager.Instance.activePlayerVehicle.steeringHelper = !RCC_SceneManager.Instance.activePlayerVehicle.steeringHelper;
|
|
|
|
break;
|
|
|
|
case ButtonType.Headlights:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle) {
|
|
|
|
if (!RCC_SceneManager.Instance.activePlayerVehicle.highBeamHeadLightsOn && RCC_SceneManager.Instance.activePlayerVehicle.lowBeamHeadLightsOn) {
|
|
|
|
RCC_SceneManager.Instance.activePlayerVehicle.highBeamHeadLightsOn = true;
|
|
RCC_SceneManager.Instance.activePlayerVehicle.lowBeamHeadLightsOn = true;
|
|
break;
|
|
|
|
}
|
|
|
|
if (!RCC_SceneManager.Instance.activePlayerVehicle.lowBeamHeadLightsOn)
|
|
RCC_SceneManager.Instance.activePlayerVehicle.lowBeamHeadLightsOn = true;
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle.highBeamHeadLightsOn) {
|
|
|
|
RCC_SceneManager.Instance.activePlayerVehicle.lowBeamHeadLightsOn = false;
|
|
RCC_SceneManager.Instance.activePlayerVehicle.highBeamHeadLightsOn = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case ButtonType.LeftIndicator:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle) {
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle.indicatorsOn != RCC_CarControllerV3.IndicatorsOn.Left)
|
|
RCC_SceneManager.Instance.activePlayerVehicle.indicatorsOn = RCC_CarControllerV3.IndicatorsOn.Left;
|
|
else
|
|
RCC_SceneManager.Instance.activePlayerVehicle.indicatorsOn = RCC_CarControllerV3.IndicatorsOn.Off;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case ButtonType.RightIndicator:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle) {
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle.indicatorsOn != RCC_CarControllerV3.IndicatorsOn.Right)
|
|
RCC_SceneManager.Instance.activePlayerVehicle.indicatorsOn = RCC_CarControllerV3.IndicatorsOn.Right;
|
|
else
|
|
RCC_SceneManager.Instance.activePlayerVehicle.indicatorsOn = RCC_CarControllerV3.IndicatorsOn.Off;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case ButtonType.HazardLights:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle) {
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle.indicatorsOn != RCC_CarControllerV3.IndicatorsOn.All)
|
|
RCC_SceneManager.Instance.activePlayerVehicle.indicatorsOn = RCC_CarControllerV3.IndicatorsOn.All;
|
|
else
|
|
RCC_SceneManager.Instance.activePlayerVehicle.indicatorsOn = RCC_CarControllerV3.IndicatorsOn.Off;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case ButtonType.GearUp:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle)
|
|
RCC_SceneManager.Instance.activePlayerVehicle.GearShiftUp();
|
|
|
|
break;
|
|
|
|
case ButtonType.GearDown:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle)
|
|
RCC_SceneManager.Instance.activePlayerVehicle.GearShiftDown();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
UpdateImageOfButton();
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Checking ABS, ESP, TCS, SH, And Headlights button. This will illuminate the corresponding button.
|
|
/// </summary>
|
|
public void UpdateImageOfButton() {
|
|
|
|
if (!button)
|
|
return;
|
|
|
|
// If no image attached to the button, return.
|
|
if (!button.image)
|
|
return;
|
|
|
|
// If no player vehicle found, return.
|
|
if (!RCC_SceneManager.Instance.activePlayerVehicle)
|
|
return;
|
|
|
|
// Illuminating the image of the button when it's on.
|
|
switch (_buttonType) {
|
|
|
|
case ButtonType.ABS:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle.ABS)
|
|
button.image.color = new Color(1, 1, 1, 1);
|
|
else
|
|
button.image.color = new Color(.25f, .25f, .25f, 1);
|
|
|
|
break;
|
|
|
|
case ButtonType.ESP:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle.ESP)
|
|
button.image.color = new Color(1, 1, 1, 1);
|
|
else
|
|
button.image.color = new Color(.25f, .25f, .25f, 1);
|
|
|
|
break;
|
|
|
|
case ButtonType.TCS:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle.TCS)
|
|
button.image.color = new Color(1, 1, 1, 1);
|
|
else
|
|
button.image.color = new Color(.25f, .25f, .25f, 1);
|
|
|
|
break;
|
|
|
|
case ButtonType.SH:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle.steeringHelper)
|
|
button.image.color = new Color(1, 1, 1, 1);
|
|
else
|
|
button.image.color = new Color(.25f, .25f, .25f, 1);
|
|
|
|
break;
|
|
|
|
case ButtonType.Headlights:
|
|
|
|
if (RCC_SceneManager.Instance.activePlayerVehicle.lowBeamHeadLightsOn || RCC_SceneManager.Instance.activePlayerVehicle.highBeamHeadLightsOn)
|
|
button.image.color = new Color(1, 1, 1, 1);
|
|
else
|
|
button.image.color = new Color(.25f, .25f, .25f, 1);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Changes the gear.
|
|
/// </summary>
|
|
public void ChangeGear() {
|
|
|
|
if (!RCC_SceneManager.Instance.activePlayerVehicle)
|
|
return;
|
|
|
|
if (gearDirection == Mathf.CeilToInt(gearSlider.value * 2))
|
|
return;
|
|
|
|
gearDirection = Mathf.CeilToInt(gearSlider.value * 2);
|
|
|
|
RCC_SceneManager.Instance.activePlayerVehicle.semiAutomaticGear = true;
|
|
|
|
switch (gearDirection) {
|
|
|
|
case 0:
|
|
RCC_SceneManager.Instance.activePlayerVehicle.StartCoroutine("ChangeGear", 0);
|
|
RCC_SceneManager.Instance.activePlayerVehicle.NGear = false;
|
|
break;
|
|
|
|
case 1:
|
|
RCC_SceneManager.Instance.activePlayerVehicle.NGear = true;
|
|
break;
|
|
|
|
case 2:
|
|
RCC_SceneManager.Instance.activePlayerVehicle.StartCoroutine("ChangeGear", -1);
|
|
RCC_SceneManager.Instance.activePlayerVehicle.NGear = false;
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
private void OnDisable() {
|
|
|
|
// if (!RCC_SceneManager.Instance.activePlayerVehicle)
|
|
// return;
|
|
//
|
|
// if(_buttonType == ButtonType.Gear){
|
|
//
|
|
// RCC_SceneManager.Instance.activePlayerVehicle.semiAutomaticGear = false;
|
|
//
|
|
// }
|
|
|
|
}
|
|
|
|
}
|