//----------------------------------------------
// 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;
///
/// Manager for all upgradable scripts (Engine, Brake, Handling).
///
[AddComponentMenu("BoneCracker Games/Realistic Car Controller/Customization/RCC Vehicle Upgrade Upgrade Manager")]
public class RCC_VehicleUpgrade_UpgradeManager : MonoBehaviour {
// Mod applier.
private RCC_CustomizationApplier modApplier;
public RCC_CustomizationApplier ModApplier {
get {
if (modApplier == null)
modApplier = GetComponentInParent();
return modApplier;
}
}
private RCC_VehicleUpgrade_Engine engine; // Upgradable engine component.
private RCC_VehicleUpgrade_Brake brake; // Upgradable brake component.
private RCC_VehicleUpgrade_Handling handling; // Upgradable handling component.
internal int engineLevel = 0; // Current upgraded engine level.
internal int brakeLevel = 0; // Current upgraded brake level.
internal int handlingLevel = 0; // Current upgraded handling level.
private void Awake() {
// Getting engine, brake, and handling upgrade components.
engine = GetComponentInChildren(true);
brake = GetComponentInChildren(true);
handling = GetComponentInChildren(true);
// Getting defalut values of the car controller.
engine.defEngine = ModApplier.CarController.maxEngineTorque;
brake.defBrake = ModApplier.CarController.brakeTorque;
handling.defHandling = ModApplier.CarController.tractionHelperStrength;
}
public void Initialize() {
// If one of them is missing, return.
if (!engine || !brake || !handling)
return;
// Setting upgraded engine torque if saved.
engine.EngineLevel = ModApplier.loadout.engineLevel;
engine.Initialize();
// Setting upgraded brake torque if saved.
brake.BrakeLevel = ModApplier.loadout.brakeLevel;
brake.Initialize();
// Setting upgraded handling strength if saved.
handling.HandlingLevel = ModApplier.loadout.handlingLevel;
handling.Initialize();
}
private void Update() {
// If one of them is missing, return.
if (!engine || !brake || !handling)
return;
// Getting current upgrade levels
engineLevel = engine.EngineLevel;
brakeLevel = brake.BrakeLevel;
handlingLevel = handling.HandlingLevel;
}
///
/// Upgrades the engine torque.
///
public void UpgradeEngine() {
if (!engine)
return;
engine.EngineLevel++;
engine.UpdateStats();
}
///
/// Upgrades the brake torque.
///
public void UpgradeBrake() {
if (!brake)
return;
brake.BrakeLevel++;
brake.UpdateStats();
}
///
/// Upgrades the traction helper (Handling).
///
public void UpgradeHandling() {
if (!handling)
return;
handling.HandlingLevel++;
handling.UpdateStats();
}
private void Reset() {
if (transform.Find("Engine")) {
engine = transform.Find("Engine").gameObject.GetComponent();
} else {
GameObject newEngine = new GameObject("Engine");
newEngine.transform.SetParent(transform);
newEngine.transform.localPosition = Vector3.zero;
newEngine.transform.localRotation = Quaternion.identity;
engine = newEngine.AddComponent();
}
if (transform.Find("Brake")) {
brake = transform.Find("Brake").gameObject.GetComponent();
} else {
GameObject newBrake = new GameObject("Brake");
newBrake.transform.SetParent(transform);
newBrake.transform.localPosition = Vector3.zero;
newBrake.transform.localRotation = Quaternion.identity;
brake = newBrake.AddComponent();
}
if (transform.Find("Handling")) {
handling = transform.Find("Handling").gameObject.GetComponent();
} else {
GameObject newHandling = new GameObject("Handling");
newHandling.transform.SetParent(transform);
newHandling.transform.localPosition = Vector3.zero;
newHandling.transform.localRotation = Quaternion.identity;
handling = newHandling.AddComponent();
}
}
}