/// <summary> /// Opens the train crossing, only when it is closed. /// </summary> public static void OpenCrossing() { if (TrainCrossState == TrainCrossState.Closed) { TrainCrossState = TrainCrossState.StartOpening; } }
/// <summary> /// Closes the train crossing, only when it is open. /// </summary> public static void CloseCrossing() { if (TrainCrossState == TrainCrossState.Open) { TrainCrossState = TrainCrossState.StartClosing; } }
// Update is called once per frame void Update() { // Don't do anything in a rest state. if (TrainCrossState == TrainCrossState.Open) { return; } else if (TrainCrossState == TrainCrossState.Closed) { // Only update the lights when closed. UpdateTrainLights(); MoveTrain(); return; } if (TrainCrossState == TrainCrossState.StartClosing) { foreach (GameObject light in lightsRight) { Light l = light.GetComponent <Light>(); l.enabled = true; } foreach (GameObject bell in bells) { AudioSource source = bell.GetComponent <AudioSource>(); source.enabled = true; } lightSwitchTimer = 0f; TrainCrossState = TrainCrossState.Closing; } else if (TrainCrossState == TrainCrossState.StartOpening) { TrainCrossState = TrainCrossState.Opening; } UpdateTrainLights(); UpdateBeams(); if (TrainCrossState == TrainCrossState.Closing && currentBeamAngle <= 0) { TrainCrossState = TrainCrossState.Closed; currentBeamAngle = 0f; Train.SetActive(true); } else if (TrainCrossState == TrainCrossState.Opening && currentBeamAngle >= 85) { TrainCrossState = TrainCrossState.Open; // Only dim lights after the beams have returned to their upright position. foreach (GameObject light in lightsLeft.Concat(lightsRight)) { Light l = light.GetComponent <Light>(); l.enabled = false; } // Only quieten after the beams have returned to their upright position. foreach (GameObject bell in bells) { AudioSource source = bell.GetComponent <AudioSource>(); source.enabled = false; } currentBeamAngle = 85f; } }