Files
CityDrivingSimulator.Unity/Unity/Assets/Scripts/IgnitionSystem.cs
T

108 lines
2.1 KiB
C#
Raw Normal View History

2025-05-13 03:19:28 +03:00
using UnityEngine;
using System.Collections;
public enum IgnitionState{
Lock,
Acc,
On,
Start
}
public interface IIgnitionStateController{
void SetButtonState (IgnitionSystem sys, int button, bool press);
void Update (IgnitionSystem sys);
}
public delegate void IgnitionStateCallback(IgnitionSystem caller, IgnitionState oldState, IgnitionState newState);
public class IgnitionSystem : MonoBehaviour {
private int _ignitionState = 0;
public bool buttonMode = false;
private bool _hold = false;
private IgnitionState _state;
public event IgnitionStateCallback StateChanged;
private IgnitionButtonController _buttonController = new IgnitionButtonController();
private IgnitionSwitchController _switchController = new IgnitionSwitchController();
private Car _car;
public Starter starter;
private PowerBus powerBus;
public PowerBus PowerBus {
get {
return powerBus;
}
set {
powerBus = value;
starter.SetPowerBus(powerBus);
}
}
public Car Car{
get{ return _car;}
}
public void Attach(Car car){
_car = car;
}
public void Detach(){
_car = null;
}
public void SetButtonState(int button, bool press){
if (buttonMode) {
if (_buttonController != null) {
_buttonController.SetButtonState (this, button, press);
} else {
Debug.LogWarning ("Ignition system: button is not installed! Can't press!");
}
} else {
if (_switchController != null) {
_switchController.SetButtonState (this, button, press);
} else {
Debug.LogWarning ("Ignition system: ignition switch is not installed! Can't press!");
}
}
}
public IgnitionState State{
get{
return _state;
}
set{
if (_state == value) {
return;
}
var oldState = _state;
_state = value;
Debug.LogFormat("IgnitionStystem: state changed from {0} to {1}", oldState, _state);
if (StateChanged != null) {
StateChanged(this, oldState, _state);
}
starter.On = _state == IgnitionState.Start;
}
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (buttonMode) {
_buttonController.Update (this);
} else {
_switchController.Update (this);
}
}
}