// Update is called once per frame
        void Update()
        {
            if (!canvas)
            {
                return;
            }

            if (pauseInput)
            {
                return;
            }

            //copy slice calibration
            if (Input.GetKeyDown(KeyCode.C) && (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)))
            {
                copyCurrentSliceCalibration();
                return;
            }

            canvasEditMode oldMode      = m;
            int            oldSelection = currentSlice;

            if (Input.GetKeyDown(nextSlice))
            {
                if (canvas._flipZ)
                {
                    sliceDn();
                }
                else
                {
                    sliceUp();
                }
            }
            if (Input.GetKeyDown(prevSlice))
            {
                if (canvas._flipZ)
                {
                    sliceUp();
                }
                else
                {
                    sliceDn();
                }
            }
            else if (Input.GetKeyDown(skewXDn))
            {
                float xPixel = 2f / canvas.sliceWidth;  //here it is 2 instead of 1 because x raw positions correspond from -1 to 1, while y raw positions correspond from 0 to 1
                if (relativeTo == distortionCompensationType.SPATIAL)
                {
                    xPixel *= (canvas.sliceWidth / canvas.sliceHeight) * canvas.aspectX.y;
                }
                canvas.makeSkewAdjustment(currentSlice, true, interval * xPixel);
            }
            else if (Input.GetKeyDown(skewXUp))
            {
                float xPixel = 2f / canvas.sliceWidth;  //here it is 2 instead of 1 because x raw positions correspond from -1 to 1, while y raw positions correspond from 0 to 1
                if (relativeTo == distortionCompensationType.SPATIAL)
                {
                    xPixel *= (canvas.sliceWidth / canvas.sliceHeight) * canvas.aspectX.y;
                }
                canvas.makeSkewAdjustment(currentSlice, true, -interval * xPixel);
            }
            else if (Input.GetKeyDown(skewYUp))
            {
                float yPixel = 1f / ((float)canvas.sliceHeight * canvas.getSliceCount());
                canvas.makeSkewAdjustment(currentSlice, false, interval * yPixel);
            }
            else if (Input.GetKeyDown(skewYDn))
            {
                float yPixel = 1f / ((float)canvas.sliceHeight * canvas.getSliceCount());
                canvas.makeSkewAdjustment(currentSlice, false, -interval * yPixel);
            }


            else if (Input.GetKeyDown(bowTopUp))
            {
                float yPixel = 1f / ((float)canvas.sliceHeight * canvas.getSliceCount());
                canvas.makeBowAdjustment(currentSlice, castMesh.bowEdge.top, -interval * yPixel);
            }
            else if (Input.GetKeyDown(bowTopDn))
            {
                float yPixel = 1f / ((float)canvas.sliceHeight * canvas.getSliceCount());
                canvas.makeBowAdjustment(currentSlice, castMesh.bowEdge.top, interval * yPixel);
            }
            else if (Input.GetKeyDown(bowBotUp))
            {
                float yPixel = 1f / ((float)canvas.sliceHeight * canvas.getSliceCount());
                canvas.makeBowAdjustment(currentSlice, castMesh.bowEdge.bottom, -interval * yPixel);
            }
            else if (Input.GetKeyDown(bowBotDn))
            {
                float yPixel = 1f / ((float)canvas.sliceHeight * canvas.getSliceCount());
                canvas.makeBowAdjustment(currentSlice, castMesh.bowEdge.bottom, interval * yPixel);
            }
            else if (Input.GetKeyDown(bowLLeft))
            {
                float xPixel = 2f / canvas.sliceWidth; //the xpixel makes the movement distance between x/y equivalent (instead of just a local transform)
                if (relativeTo == distortionCompensationType.SPATIAL)
                {
                    xPixel *= (canvas.sliceWidth / canvas.sliceHeight) * canvas.aspectX.y;
                }
                canvas.makeBowAdjustment(currentSlice, castMesh.bowEdge.left, interval * xPixel);
            }
            else if (Input.GetKeyDown(bowLRight))
            {
                float xPixel = 2f / canvas.sliceWidth; //the xpixel makes the movement distance between x/y equivalent (instead of just a local transform)
                if (relativeTo == distortionCompensationType.SPATIAL)
                {
                    xPixel *= (canvas.sliceWidth / canvas.sliceHeight) * canvas.aspectX.y;
                }
                canvas.makeBowAdjustment(currentSlice, castMesh.bowEdge.left, -interval * xPixel);
            }
            else if (Input.GetKeyDown(bowRLeft))
            {
                float xPixel = 2f / canvas.sliceWidth; //the xpixel makes the movement distance between x/y equivalent (instead of just a local transform)
                if (relativeTo == distortionCompensationType.SPATIAL)
                {
                    xPixel *= (canvas.sliceWidth / canvas.sliceHeight) * canvas.aspectX.y;
                }
                canvas.makeBowAdjustment(currentSlice, castMesh.bowEdge.right, interval * xPixel);
            }
            else if (Input.GetKeyDown(bowRRight))
            {
                float xPixel = 2f / canvas.sliceWidth; //the xpixel makes the movement distance between x/y equivalent (instead of just a local transform)
                if (relativeTo == distortionCompensationType.SPATIAL)
                {
                    xPixel *= (canvas.sliceWidth / canvas.sliceHeight) * canvas.aspectX.y;
                }
                canvas.makeBowAdjustment(currentSlice, castMesh.bowEdge.right, -interval * xPixel);
            }


            else if (Input.GetKeyDown(highlightUL))
            {
                m = canvasEditMode.UL;
            }
            else if (Input.GetKeyDown(highlightUR))
            {
                m = canvasEditMode.UR;
            }
            else if (Input.GetKeyDown(highlightLL))
            {
                m = canvasEditMode.LL;
            }
            else if (Input.GetKeyDown(highlightLR))
            {
                m = canvasEditMode.LR;
            }
            else if (Input.GetKeyDown(highlightM))
            {
                m = canvasEditMode.M;
            }
            else if (Input.GetKeyDown(left))
            {
                float xPixel = 2f / canvas.sliceWidth; //the xpixel makes the movement distance between x/y equivalent (instead of just a local transform)
                if (relativeTo == distortionCompensationType.SPATIAL)
                {
                    xPixel *= (canvas.sliceWidth / canvas.sliceHeight) * canvas.aspectX.y;
                }
                canvas.makeAdjustment(currentSlice, m, true, -interval * xPixel);
            }
            else if (Input.GetKeyDown(right))
            {
                float xPixel = 2f / canvas.sliceWidth;  //here it is 2 instead of 1 because x raw positions correspond from -1 to 1, while y raw positions correspond from 0 to 1
                if (relativeTo == distortionCompensationType.SPATIAL)
                {
                    xPixel *= (canvas.sliceWidth / canvas.sliceHeight) * canvas.aspectX.y;
                }
                canvas.makeAdjustment(currentSlice, m, true, interval * xPixel);
            }
            else if (Input.GetKeyDown(down))
            {
                float yPixel = 1f / ((float)canvas.sliceHeight * canvas.getSliceCount());
                canvas.makeAdjustment(currentSlice, m, false, interval * yPixel);
            }
            else if (Input.GetKeyDown(up))
            {
                float yPixel = 1f / ((float)canvas.sliceHeight * canvas.getSliceCount());
                canvas.makeAdjustment(currentSlice, m, false, -interval * yPixel);
            }

            if (currentSlice != oldSelection || m != oldMode)
            {
                current = "s" + currentSlice + "  " + m.ToString();
                canvas.updateMesh();
            }

            //testing
            if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.Alpha1))
            {
                testState = testingMode.OFF;
                canvas.updateMesh();
            }
            else if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.Alpha2))
            {
                testState = testingMode.TEST1;
                canvas.updateMesh();
            }
            else if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.Alpha3))
            {
                testState = testingMode.TEST1_ALL;
                canvas.updateMesh();
            }
            else if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.Alpha4))
            {
                testState = testingMode.TEST2;
                canvas.updateMesh();
            }
            else if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.Alpha5))
            {
                testState = testingMode.TEST2_ALL;
                canvas.updateMesh();
            }

            if (Input.GetKeyDown(KeyCode.Alpha1))
            {
                interval = .1f;
                Debug.Log("Set sensitivity to: " + interval);
            }
            else if (Input.GetKeyDown(KeyCode.Alpha2))
            {
                interval = .5f;
                Debug.Log("Set sensitivity to: " + interval);
            }
            else if (Input.GetKeyDown(KeyCode.Alpha3))
            {
                interval = 1f;
                Debug.Log("Set sensitivity to: " + interval);
            }
            else if (Input.GetKeyDown(KeyCode.Alpha4))
            {
                interval = 2f;
                Debug.Log("Set sensitivity to: " + interval);
            }
            else if (Input.GetKeyDown(KeyCode.Alpha5))
            {
                interval = 4f;
                Debug.Log("Set sensitivity to: " + interval);
            }
        }
        public bool makeAdjustment(int slice, canvasEditMode m, bool x, float amount)
        {
            if (slice < 0)
            {
                return(false);
            }
            if (slice >= ULOffsets.Length)
            {
                return(false);
            }

            //flip it to keep things intuitive
            if (_flipX)
            {
                if (x)
                {
                    amount = -amount;
                }
                if (m == canvasEditMode.UL)
                {
                    m = canvasEditMode.UR;
                }
                else if (m == canvasEditMode.UR)
                {
                    m = canvasEditMode.UL;
                }
                else if (m == canvasEditMode.LL)
                {
                    m = canvasEditMode.LR;
                }
                else if (m == canvasEditMode.LR)
                {
                    m = canvasEditMode.LL;
                }
            }
            if (_flipY)
            {
                if (!x)
                {
                    amount = -amount;
                }
                if (m == canvasEditMode.UL)
                {
                    m = canvasEditMode.LL;
                }
                else if (m == canvasEditMode.UR)
                {
                    m = canvasEditMode.LR;
                }
                else if (m == canvasEditMode.LL)
                {
                    m = canvasEditMode.UL;
                }
                else if (m == canvasEditMode.LR)
                {
                    m = canvasEditMode.UR;
                }
            }


            if (m == canvasEditMode.UL)
            {
                if (x)
                {
                    ULOffsets[slice].x += amount;
                }
                else
                {
                    ULOffsets[slice].y += amount;
                }
            }
            else if (m == canvasEditMode.UR)
            {
                if (x)
                {
                    UROffsets[slice].x += amount;
                }
                else
                {
                    UROffsets[slice].y += amount;
                }
            }
            else if (m == canvasEditMode.LL)
            {
                if (x)
                {
                    LLOffsets[slice].x += amount;
                }
                else
                {
                    LLOffsets[slice].y += amount;
                }
            }
            else if (m == canvasEditMode.LR)
            {
                if (x)
                {
                    LROffsets[slice].x += amount;
                }
                else
                {
                    LROffsets[slice].y += amount;
                }
            }
            else if (m == canvasEditMode.M)
            {
                if (x)
                {
                    MOffsets[slice].x += amount;
                }
                else
                {
                    MOffsets[slice].y += amount;
                }
            }

            updateMesh();

            return(true);
        }