// Update is called once per frame
    void Update()
    {
        // continue to next scene, saving the coordinates of the corner circles as state
        if (Input.GetKeyDown("space"))
        {
            cornerCircleCoordinates = GetCoordinateFloatArray();
            RecordBounds(cornerCircleCoordinates);
            Serialize(path, cornerCircleCoordinates);

            SceneManager.LoadScene(SceneUtils.SceneNames.holdSetup);
        }

        // reset to outer corners
        if (Input.GetKeyDown("r"))
        {
            Vector2 topLeft     = ClimbARUtils.fractionToWorldSpace(0f, 0f, this.mainCam);
            Vector2 topRight    = ClimbARUtils.fractionToWorldSpace(1f, 0f, this.mainCam);
            Vector2 bottomRight = ClimbARUtils.fractionToWorldSpace(1f, 1f, this.mainCam);
            Vector2 bottomLeft  = ClimbARUtils.fractionToWorldSpace(0f, 1f, this.mainCam);

            PositionCircles(topLeft, topRight, bottomRight, bottomLeft);
        }

        if (Input.GetKeyDown("escape"))
        {
            GameObject  confirmCanvas = GameObject.Find("ConfirmCanvas");
            CanvasGroup exitGroup     = confirmCanvas.GetComponent <CanvasGroup>();
            exitGroup.blocksRaycasts = true;
            exitGroup.alpha          = 1;
            exitGroup.interactable   = true;
        }
    }
    void DrawBorder(float width)
    {
        Vector2 topLeft     = ClimbARUtils.fractionToWorldSpace(0f, 0f, this.mainCam);;
        Vector2 bottomLeft  = ClimbARUtils.fractionToWorldSpace(0f, 1f, this.mainCam);
        Vector2 topRight    = ClimbARUtils.fractionToWorldSpace(1f, 0f, this.mainCam);
        Vector2 bottomRight = ClimbARUtils.fractionToWorldSpace(1f, 1f, this.mainCam);

        DrawLine(topLeft, bottomLeft, width);
        DrawLine(topRight, bottomRight, width);
        DrawLine(topLeft, topRight, width);
        DrawLine(bottomLeft, bottomRight, width);
    }
 /// <summary>
 /// 0, 1, 2, 3 -> top left, top right, bottom right, bottom left
 /// </summary>
 void InitCornerCircles()
 {
     this.cornerCircles = new GameObject[4];
     for (int i = 0; i < 4; i++)
     {
         this.cornerCircles[i]      = GameObject.Instantiate(CornerCircle);
         this.cornerCircles[i].name = "CornerCircle " + (i);
     }
     this.cornerCircles[0].transform.localPosition =
         ClimbARUtils.fractionToWorldSpace(0.1f, 0.1f, this.mainCam);
     this.cornerCircles[1].transform.localPosition =
         ClimbARUtils.fractionToWorldSpace(0.9f, 0.1f, this.mainCam);
     this.cornerCircles[2].transform.localPosition =
         ClimbARUtils.fractionToWorldSpace(.9f, .9f, this.mainCam);
     this.cornerCircles[3].transform.localPosition =
         ClimbARUtils.fractionToWorldSpace(0.1f, 0.9f, this.mainCam);
 }
    private void RecordBounds(float[] cornerCircleCoordinates)
    {
        float upperY = (cornerCircleCoordinates[1] + cornerCircleCoordinates[3]) / 2;
        float lowerY = (cornerCircleCoordinates[5] + cornerCircleCoordinates[7]) / 2;

        // 0,0 is top left, +y points down
        StateManager.instance.kinectUpperLeft = ClimbARUtils.worldSpaceToFraction(
            cornerCircleCoordinates[0],
            cornerCircleCoordinates[1],
            mainCam);
        StateManager.instance.kinectUpperRight = ClimbARUtils.worldSpaceToFraction(
            cornerCircleCoordinates[2],
            cornerCircleCoordinates[3],
            mainCam);
        StateManager.instance.kinectLowerRight = ClimbARUtils.worldSpaceToFraction(
            cornerCircleCoordinates[4],
            cornerCircleCoordinates[5],
            mainCam);
        StateManager.instance.kinectLowerLeft = ClimbARUtils.worldSpaceToFraction(
            cornerCircleCoordinates[6],
            cornerCircleCoordinates[7],
            mainCam);
    }