public static void RotateUpdate(GameObject target, Hashtable args)
{
CleanArgs(args);
bool isLocal;
float time;
Vector3[] vector3s = new Vector3[4];
Vector3 preUpdate = target.transform.eulerAngles;
//set smooth time:
if(args.Contains("time")){
time=(float)args["time"];
time*=Defaults.updateTimePercentage;
}else{
time=Defaults.updateTime;
}
//set isLocal:
if(args.Contains("islocal")){
isLocal = (bool)args["islocal"];
}else{
isLocal = Defaults.isLocal;
}
//from values:
if(isLocal){
vector3s[0] = target.transform.localEulerAngles;
}else{
vector3s[0] = target.transform.eulerAngles;
}
//set to:
if(args.Contains("rotation")){
if (args["rotation"].GetType() == typeof(Transform)){
Transform trans = (Transform)args["rotation"];
vector3s[1]=trans.eulerAngles;
}else if(args["rotation"].GetType() == typeof(Vector3)){
vector3s[1]=(Vector3)args["rotation"];
}
}
//calculate:
vector3s[3].x=Mathf.SmoothDampAngle(vector3s[0].x,vector3s[1].x,ref vector3s[2].x,time);
vector3s[3].y=Mathf.SmoothDampAngle(vector3s[0].y,vector3s[1].y,ref vector3s[2].y,time);
vector3s[3].z=Mathf.SmoothDampAngle(vector3s[0].z,vector3s[1].z,ref vector3s[2].z,time);
//apply:
if(isLocal){
target.transform.localEulerAngles=vector3s[3];
}else{
target.transform.eulerAngles=vector3s[3];
}
//need physics?
if(target.rigidbody != null){
Vector3 postUpdate=target.transform.eulerAngles;
target.transform.eulerAngles=preUpdate;
target.rigidbody.MoveRotation(Quaternion.Euler(postUpdate));
}
}