Ejemplo n.º 1
0
 /// <summary>
 /// Opens the train crossing, only when it is closed.
 /// </summary>
 public static void OpenCrossing()
 {
     if (TrainCrossState == TrainCrossState.Closed)
     {
         TrainCrossState = TrainCrossState.StartOpening;
     }
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Closes the train crossing, only when it is open.
 /// </summary>
 public static void CloseCrossing()
 {
     if (TrainCrossState == TrainCrossState.Open)
     {
         TrainCrossState = TrainCrossState.StartClosing;
     }
 }
Ejemplo n.º 3
0
        // 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;
            }
        }