Script Problem

I made an updated version of the script that was on my old post. Now all it makes the flashlight do is rotate in a circle around the x axis. the flashlight is supposed to go from (0, 0, 0) to (31, 0, 0) when sprinting, and back to (0, 0, 0) when not sprinting. Please tell me what i did wrong… again…

var rotationX = 0.0;
var sprintActive : boolean = false;
var breathingObj : GameObject;
var lightObject : Light;
var stopMovement : boolean = false;

function Update () {

rotationX = lightObject.transform.rotation.x;

 if(sprintActive == true && stopMovement == false){

 lightObject.transform.Rotate(Time.deltaTime * 120, 0, 0);
 
 }
 
 else if(sprintActive == false && stopMovement == false){

 lightObject.transform.Rotate(Time.deltaTime * -120, 0, 0);
 
 }
 
 if(rotationX > 31 && sprintActive == true){
 
 stopMovement = true;
 
 }
 
 if(rotationX < 0 && sprintActive == false){
 
 stopMovement = true;
 
 }
}

function Start(){

stopMovement = true;

 while(true){

 yield WaitForSeconds(0.1);

 if(breathingObj.GetComponent(SprintScript).isSprinting == true){

 sprintActive = true;
 
 stopMovement = false;

 }

 else if(breathingObj.GetComponent(SprintScript).isSprinting == false){

 sprintActive = false;
 
 stopMovement = false;
 
 }
 }
}
rotationX = lightObject.transform.rotation.x;

this line is totally incorrect if you don’t understand Quaternion’s internal mechanism.

instead of all these check you can do simple thing (handwrited C#-like code)

Quaternion targetRotation = Quaternion.Euler(sprintActive ? 31f : 0f, 0f, 0f);

this will make a rotation that your object should rotate to, rotation is already based on sprintActive value.

transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, 10f * Time.deltaTime)

and this will rotate your object to target rotation at maximum speed 10 deg/sec.

so, finally your Update() method will looks like:

void Update()
{
    Quaternion targetRotation = Quaternion.Euler(sprintActive ? 31f : 0f, 0f, 0f);
    lightObject.transform.rotation = Quaternion.RotateTowards(lightObject.transform.rotation, targetRotation, 10f * Time.deltaTime)
}

and ‘stopMovement’ is no need actually now cause object will not rotate more then needed. unless you want to stop rotating immediately before gaining target rotation…