Cannot get GUIUtility.RotateAroundPivot working

Hello! I have a script that I have been trying to fix since 4am but cannot get working! It started out as a C# script, but I ended up converting it to Javascript, as I needed to access variables from other Javascript scripts. After spending a few minutes converting the syntax I got it working correctly aside from one major issue.

I have this GUI element on the lefthand side of the screen, and another on the right side. The other element only reacts to touches on it’s side of the screen, and I tried to do the same with this. However It will not rotate the texture at all!

All help is greatly appreciated.

Here is the current iteration of the script:

@script ExecuteInEditMode()

	public var texture : Texture2D = null;

	public static var wheelRotation : float = 10f;
	
	private var angle : float = 0;
	public var turnVar: float = 0;
	public var sizeFloat : float = 0f;
	public var size : Vector2 = new Vector2(0, 0);
	var xPosF : float = 0f;
	var yPosF : float = 0f;
	var btp: Vector2;
	private var pos : Vector2 = new Vector2(0, 0);
	private var rect: Rect;
	private var pivot : Vector2;
	private var rotating : boolean = false;
	private var initialMouseAngle : float;
	
	function Start() {
		UpdateSettings();
	}
	
	function Update() {
		turnVar = angle * 0.005;
	}
	
	function UpdateSettings() {
		sizeFloat = Screen.height / 2.3;
		size = new Vector2(sizeFloat,sizeFloat);
		xPosF = Screen.width/7.5;
		yPosF = Screen.height/1.25;
		pos = new Vector2(transform.localPosition.x + xPosF, transform.localPosition.y + yPosF);
		rect = new Rect(pos.x - size.x * 0.5f, pos.y - size.y * 0.5f, size.x, size.y);
		//Debug.Log ("Rect="+rect);
		pivot = new Vector2(rect.xMin + rect.width * 0.5f, rect.yMin + rect.height * 0.5f);
	}
	
	function OnGUI() {
	
	if(Input.touchCount > 0 ) {
 
		for(var i : int = 0; i < Input.touchCount; i++) {
 
			var touch : Touch = Input.GetTouch(i);
						
			if(touch.position.x > Screen.width/2.5) {
				btp = touch.position;
			}
			
		if (Application.isEditor) { UpdateSettings(); }
		
		btp.y = Screen.height - btp.y;
		
		if (touch.phase == TouchPhase.Began && rect.Contains(btp)) {
			var v2T : Vector2 = (btp - pivot);
			initialMouseAngle = Mathf.Atan2(v2T.y, v2T.x) - angle * Mathf.Deg2Rad;
			rotating = true;
		}
		else if (touch.phase == TouchPhase.Moved && rect.Contains(btp) && rotating) {
			v2T = (btp - pivot);
			angle = (Mathf.Atan2 (v2T.y, v2T.x) - initialMouseAngle)  * Mathf.Rad2Deg;
		}
		if (touch.phase == TouchPhase.Ended && rect.Contains(btp)) {
			rotating = false;
		}
		}
	}

		var matrixBackup : Matrix4x4 = GUI.matrix;
		GUIUtility.RotateAroundPivot(angle, pivot);
		GUI.DrawTexture(rect, texture);
		GUI.matrix = matrixBackup;
}

And here is the original C# script

    using UnityEngine;
    [ExecuteInEditMode()] 
    public class RotatableGuiItem : MonoBehaviour {
        public Texture2D texture = null;
        public Vector2 size = new Vector2(128, 128);
     
        private float angle = 0;
        private Vector2 pos = new Vector2(0, 0);
        private Rect rect;
        private Vector2 pivot;
        private bool rotating = false;
        private float initialMouseAngle;
     
        void Start() {
            UpdateSettings();
        }
     
        void UpdateSettings() {
           pos = new Vector2(transform.localPosition.x, transform.localPosition.y);
            rect = new Rect(pos.x - size.x * 0.5f, pos.y - size.y * 0.5f, size.x, size.y);
           Debug.Log ("Rect="+rect);
            pivot = new Vector2(rect.xMin + rect.width * 0.5f, rect.yMin + rect.height * 0.5f);
        }
     
        void OnGUI() {
           if (Application.isEditor) { UpdateSettings(); }
           Vector2 guiMouse = Input.mousePosition;
           guiMouse.y = Screen.height - guiMouse.y;
           if (Input.GetMouseButtonDown(0) && rect.Contains(guiMouse)) {
             Vector2 v2T = ((Vector2)guiMouse - pivot);
             initialMouseAngle = Mathf.Atan2(v2T.y, v2T.x) - angle * Mathf.Deg2Rad;
             rotating = true;
           }
           else if (Input.GetMouseButton(0) & rotating) {
             Vector2 v2T = ((Vector2)guiMouse - pivot);
             angle = (Mathf.Atan2 (v2T.y, v2T.x) - initialMouseAngle)  * Mathf.Rad2Deg;
           }
           else if (Input.GetMouseButtonUp(0)) {
             rotating = false;
           }
            Matrix4x4 matrixBackup = GUI.matrix;
            GUIUtility.RotateAroundPivot(angle, pivot);
            GUI.DrawTexture(rect, texture);
            GUI.matrix = matrixBackup;
        }
    }

You check two times for “TouchPhase.Began”. Since you use else if the second if will never execute.

You probably want in line 59

    else if (touch.phase == TouchPhase.Moved ..... 

Also you usually should remember the touch id in TouchPhase.Began so you can identify a certain touch in other phases, otherwise it will be a mess if the user has 2 or more touches at the same time.

ps: line 47 hurts in my eyes. You declare a local variable inside an if and use it afterwards. I know that Unityscript allows this, but if the if-statement is false the variable is uninitialized.