Problem with turn left light
Hi! I have script to car light (part code below) and I have problem. When I press 'q' light to turnleft is on but if I want press 'q' again nothing happens. To turn off the light I need to click the 'e' and then turns off.
 //steer light//
         if (Input.GetKeyDown("q") && turnright == true)
         {
             turnleft = !turnleft;
             turnright = false;
         }
         else if (Input.GetKeyDown("q") && turnleft == false)
         {
             turnleft = !turnleft;
         }
 
         if (Input.GetKeyDown("e") && turnleft == true)
         {
             turnright = !turnright;
             turnleft = false;
         }
         else if (Input.GetKeyDown("e") && turnleft == false)
         {
             turnright = !turnright;
         }
 
         if (turnright)
         {
             turnSignalRIGHT.material = turnsignalON;
             turnSignalLEFT.material = turnsignalOFF;
             rightSignalON = true;
             leftSignalON = false;
         }
         else if(turnleft)
         {
             turnSignalRIGHT.material = turnsignalOFF;
             turnSignalLEFT.material = turnsignalON;
             rightSignalON = false;
             leftSignalON = true;
         }
         else
         {
             turnSignalRIGHT.material = turnsignalOFF;
             turnSignalLEFT.material = turnsignalOFF;
             rightSignalON = false;
             leftSignalON = false;
         }
 
         if(leftSignalON)
         {
             float floor = 0f;
             float ceiling = 1f;
             float emission = floor + Mathf.PingPong(Time.time*1.5f, ceiling - floor);
             turnSignalLEFT.material.SetColor("_EmissionColor",new Color(1f,1f,1f)*emission);
         }
         if(rightSignalON)
         {
             float floor = 0f;
             float ceiling = 1f;
             float emission = floor + Mathf.PingPong(Time.time* 1.5f, ceiling - floor);
             turnSignalRIGHT.material.SetColor("_EmissionColor",new Color(1f,1f,1f)*emission);
         }
               Comment
              
 
               
               
               Best Answer 
              
 
              Answer by Pengocat · Jan 12, 2017 at 03:26 PM
You may want to use an enum instead of a lot of bools to keep track of things. Here is an example that you can work with.
     public Renderer turnSignalLeft;
     public Renderer turnSignalRight;
     public Material turnSignalOff;
     public Material turnSignalOn;
     enum Direction
     {
         neutral,
         right,
         left
     }
     Direction currentDirection = Direction.neutral;
 
     void Update()
     {
         // TurnSignal Left Toggle
         if (Input.GetKeyDown(KeyCode.Q))
         {
             // if direction is not Left set it to Left Otherwise set it to Neutral
             currentDirection = currentDirection != Direction.left ?
                 Direction.left : Direction.neutral;
         }
 
         // TurnSignal Right Toggle
         if (Input.GetKeyDown(KeyCode.E))
         {
             // if direction is not Right set it to Right Otherwise set it to Neutral
             currentDirection = currentDirection != Direction.right ?
                 Direction.right : Direction.neutral;
         }
         UpdateTurnSignal();
     }
 
     void UpdateTurnSignal()
     {
         switch (currentDirection)
         {
             case Direction.neutral:
                 SetTurnSignal(turnSignalRight, false);
                 SetTurnSignal(turnSignalLeft, false);
                 break;
             case Direction.right:
                 SetTurnSignal(turnSignalRight, true);
                 SetTurnSignal(turnSignalLeft, false);
 
                 break;
             case Direction.left:
                 SetTurnSignal(turnSignalRight, false);
                 SetTurnSignal(turnSignalLeft, true);
                 break;
             default:
                 break;
         }
     }
 
     void SetTurnSignal(Renderer signalRenderer, bool On)
     {
         float emission = Mathf.PingPong(Time.time, 1f);
         if (On)
         {
             if (signalRenderer.material != turnSignalOn)
             {
                 signalRenderer.material = turnSignalOn;
             }
             signalRenderer.material.SetColor("_EmissionColor", Color.white * emission);
         }
         else
         {
             if (signalRenderer.material != turnSignalOff)
             {
                 signalRenderer.material = turnSignalOff;
             }
         }
     }
The reason for all the material conditions is that it is quicker to check if a material is already set than to re-set it.
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                