public override void Update(Event windowEvent, GUIStyle fontStyle, Editor window, int width, int height)
    {
        if (_activeTex == null)
            return;

        Rect original = GUILayoutUtility.GetRect(_buttonContent, _buttonStyle, GUILayout.Height(_buttonHeight));
        _buttonRect = original;

        Rect lerpPositionField = new Rect(original);
        lerpPositionField.xMin += 10;
        lerpPositionField.xMax -= (width - (width * 0.35f));
        lerpPositionField.yMin += 55 + ADJUSTABLE_HEIGHT_MIN;
        lerpPositionField.yMax -= 90 + ADJUSTABLE_HEIGHT_MAX;

        Rect lerpPositionXField = new Rect(original);
        lerpPositionXField.xMin += (width - (width * 0.68f));
        lerpPositionXField.xMax -= (width - (width * 0.55f));
        lerpPositionXField.yMin += 55 + ADJUSTABLE_HEIGHT_MIN;
        lerpPositionXField.yMax -= 90 + ADJUSTABLE_HEIGHT_MAX;

        Rect lerpPositionYField = new Rect(original);
        lerpPositionYField.xMin += (width - (width * 0.48f));
        lerpPositionYField.xMax -= (width - (width * 0.75f));
        lerpPositionYField.yMin += 55 + ADJUSTABLE_HEIGHT_MIN;
        lerpPositionYField.yMax -= 90 + ADJUSTABLE_HEIGHT_MAX;

        Rect lerpPositionZField = new Rect(original);
        lerpPositionZField.xMin += (width - (width * 0.275f));
        lerpPositionZField.xMax -= (width - (width * 0.96f));
        lerpPositionZField.yMin += 55 + ADJUSTABLE_HEIGHT_MIN;
        lerpPositionZField.yMax -= 90 + ADJUSTABLE_HEIGHT_MAX;

        Rect lerpRotationField = new Rect(original);
        lerpRotationField.xMin += 10;
        lerpRotationField.xMax -= (width - (width * 0.35f));
        lerpRotationField.yMin += 95 + ADJUSTABLE_HEIGHT_MIN - 10;
        lerpRotationField.yMax -= 50 + ADJUSTABLE_HEIGHT_MAX + 10;

        Rect lerpRotationXField = new Rect(original);
        lerpRotationXField.xMin += (width - (width * 0.68f));
        lerpRotationXField.xMax -= (width - (width * 0.55f));
        lerpRotationXField.yMin += 95 + ADJUSTABLE_HEIGHT_MIN - 10;
        lerpRotationXField.yMax -= 50 + ADJUSTABLE_HEIGHT_MAX + 10;

        Rect lerpRotationYField = new Rect(original);
        lerpRotationYField.xMin += (width - (width * 0.48f));
        lerpRotationYField.xMax -= (width - (width * 0.75f));
        lerpRotationYField.yMin += 95 + ADJUSTABLE_HEIGHT_MIN - 10;
        lerpRotationYField.yMax -= 50 + ADJUSTABLE_HEIGHT_MAX + 10;

        Rect lerpRotationZField = new Rect(original);
        lerpRotationZField.xMin += (width - (width * 0.275f));
        lerpRotationZField.xMax -= (width - (width * 0.96f));
        lerpRotationZField.yMin += 95 + ADJUSTABLE_HEIGHT_MIN - 10;
        lerpRotationZField.yMax -= 50 + ADJUSTABLE_HEIGHT_MAX + 10;

        Rect lerpScaleField = new Rect(original);
        lerpScaleField.xMin += 10;
        lerpScaleField.xMax -= (width - (width * 0.35f));
        lerpScaleField.yMin += 135 + ADJUSTABLE_HEIGHT_MIN - 20;
        lerpScaleField.yMax -= 10 + ADJUSTABLE_HEIGHT_MAX + 20;

        Rect lerpScaleXField = new Rect(original);
        lerpScaleXField.xMin += (width - (width * 0.68f));
        lerpScaleXField.xMax -= (width - (width * 0.55f));
        lerpScaleXField.yMin += 135 + ADJUSTABLE_HEIGHT_MIN - 20;
        lerpScaleXField.yMax -= 10 + ADJUSTABLE_HEIGHT_MAX + 20;

        Rect lerpScaleYField = new Rect(original);
        lerpScaleYField.xMin += (width - (width * 0.48f));
        lerpScaleYField.xMax -= (width - (width * 0.75f));
        lerpScaleYField.yMin += 135 + ADJUSTABLE_HEIGHT_MIN - 20;
        lerpScaleYField.yMax -= 10 + ADJUSTABLE_HEIGHT_MAX + 20;

        Rect lerpScaleZField = new Rect(original);
        lerpScaleZField.xMin += (width - (width * 0.275f));
        lerpScaleZField.xMax -= (width - (width * 0.96f));
        lerpScaleZField.yMin += 135 + ADJUSTABLE_HEIGHT_MIN - 20;
        lerpScaleZField.yMax -= 10 + ADJUSTABLE_HEIGHT_MAX + 20;

        Rect iconField = new Rect(original);
        iconField.xMin += 10;
        iconField.xMax -= (width - 60);
        iconField.yMin += 5;
        iconField.yMax -= 35;

        if (windowEvent.isMouse && _buttonRect.Contains(windowEvent.mousePosition))
        {
            if (windowEvent.type == EventType.MouseDown)
            {
                if (_buttonDown != null)
                {
                    _activeTex = _buttonDown;
                    _buttonContent.image = _buttonUp;
                }
            }
            else if (windowEvent.type == EventType.MouseUp)
            {
                if (_buttonUp != null)
                {
                    _activeTex = _buttonUp;
                    _buttonContent.image = _buttonUp;
                }

                if (_submitCallback != null)
                    _submitCallback();
            }
        }
        else if (windowEvent.isMouse)
        {
            if (_buttonUp != null)
            {
                _activeTex = _buttonUp;
                _buttonContent.image = _buttonUp;
            }
        }

        GUI.DrawTexture(_buttonRect, _activeTex, ScaleMode.StretchToFill);

        if (_buttonIcon != null)
            GUI.DrawTexture(iconField, _buttonIcon, ScaleMode.StretchToFill);

        if (fontStyle != null)
            GUI.Label(_buttonRect, _buttonTitle, fontStyle);

        if (_submitButtonVisibile)
        {
            Rect submitField = new Rect(original);
            submitField.xMin += 10 + _submitButtonWidth;
            submitField.xMax -= 10 - _submitButtonWidth;
            submitField.yMin += 20 + _submitButtonHeight;
            submitField.yMax -= 125 - _submitButtonHeight - 15;

            _submitButtonTitle = _easyControlsButtonVisible ? "Lock" : "Modify";

            GUI.color = _easyControlsButtonVisible ? Color.green : Color.gray;

            if (GUI.Button(submitField, _submitButtonTitle))
            {
                _easyControlsButtonVisible = !_easyControlsButtonVisible;
                _submitButtonTitle = _easyControlsButtonVisible ? "Lock" : "Modify";

                if (_submitButtonAction != null)
                    _submitButtonAction();
            }
            GUI.color = Color.white;

            GUI.enabled = _easyControlsButtonVisible;

            #region Lerp Position GUI
            GUI.color = LerpPosition ? Color.white : Color.gray;

            if (GUI.Button(lerpPositionField, "Lerp Position"))
            {
                LerpPosition = !LerpPosition;
            }

            //GUI.enabled = LerpPosition && _easyControlsButtonVisible;

            GUI.color = _lerpPosX ? Color.white : Color.gray;
            if (GUI.Button(lerpPositionXField, "X"))
            {
                _lerpPosX = !_lerpPosX;
            }
            GUI.color = Color.white;

            GUI.color = _lerpPosY ? Color.white : Color.gray;
            if (GUI.Button(lerpPositionYField, "Y"))
            {
                _lerpPosY = !_lerpPosY;
            }
            GUI.color = Color.white;

            GUI.color = _lerpPosZ ? Color.white : Color.gray;
            if (GUI.Button(lerpPositionZField, "Z"))
            {
                _lerpPosZ = !_lerpPosZ;
            }

            SerializePosition = GetSerializedVector3FromBools(_lerpPosX, _lerpPosY, _lerpPosZ);

            GUI.enabled = _easyControlsButtonVisible;
            #endregion

            #region Lerp Rotation GUI
            GUI.color = LerpRotation ? Color.white : Color.gray;

            if (GUI.Button(lerpRotationField, "Lerp Rotation"))
            {
                LerpRotation = !LerpRotation;
            }

            //GUI.enabled = LerpRotation && _easyControlsButtonVisible;

            GUI.color = _lerpRotX ? Color.white : Color.gray;
            if (GUI.Button(lerpRotationXField, "X"))
            {
                _lerpRotX = !_lerpRotX;
            }
            GUI.color = Color.white;

            GUI.color = _lerpRotY ? Color.white : Color.gray;
            if (GUI.Button(lerpRotationYField, "Y"))
            {
                _lerpRotY = !_lerpRotY;
            }
            GUI.color = Color.white;

            GUI.color = _lerpRotZ ? Color.white : Color.gray;
            if (GUI.Button(lerpRotationZField, "Z"))
            {
                _lerpRotZ = !_lerpRotZ;
            }

            SerializeRotation = GetSerializedVector3FromBools(_lerpRotX, _lerpRotY, _lerpRotZ);

            GUI.enabled = _easyControlsButtonVisible;
            #endregion

            #region Lerp Scale GUI
            GUI.color = LerpScale ? Color.white : Color.gray;

            if (GUI.Button(lerpScaleField, "Lerp Scale"))
            {
                LerpScale = !LerpScale;
            }

            //GUI.enabled = LerpScale && _easyControlsButtonVisible;

            GUI.color = _lerpScaleX ? Color.white : Color.gray;
            if (GUI.Button(lerpScaleXField, "X"))
            {
                _lerpScaleX = !_lerpScaleX;
            }
            GUI.color = Color.white;

            GUI.color = _lerpScaleY ? Color.white : Color.gray;
            if (GUI.Button(lerpScaleYField, "Y"))
            {
                _lerpScaleY = !_lerpScaleY;
            }
            GUI.color = Color.white;

            GUI.color = _lerpScaleZ ? Color.white : Color.gray;
            if (GUI.Button(lerpScaleZField, "Z"))
            {
                _lerpScaleZ = !_lerpScaleZ;
            }

            SerializeScale = GetSerializedVector3FromBools(_lerpScaleX, _lerpScaleY, _lerpScaleZ);

            GUI.enabled = _easyControlsButtonVisible;
            #endregion

            GUI.color = Color.white;

            GUI.enabled = true;
        }

        if (_prevTex != _activeTex)
        {
            _prevTex = _activeTex;
            window.Repaint();
        }
    }
    public void Initialize(bool lerpPosition, 
		NetworkedMonoBehavior.SerializeVector3Properties serializePosition, 
		bool lerpRotation, 
		NetworkedMonoBehavior.SerializeVector3Properties serializeRotation, 
		bool lerpScale, 
		NetworkedMonoBehavior.SerializeVector3Properties serializeScale,
		System.Action<bool> lerpPositionChanged,
		System.Action<NetworkedMonoBehavior.SerializeVector3Properties> serializePositionChanged,
		System.Action<bool> lerpRotationChanged,
		System.Action<NetworkedMonoBehavior.SerializeVector3Properties> serializeRotationChanged,
		System.Action<bool> lerpScaleChanged,
		System.Action<NetworkedMonoBehavior.SerializeVector3Properties> serializeScaleChanged)
    {
        LerpPosition = lerpPosition;
        SerializePosition = serializePosition;
        LerpRotation = lerpRotation;
        SerializeRotation = serializeRotation;
        LerpScale = lerpScale;
        SerializeScale = serializeScale;

        SetSerializedVector3ToBools(SerializePosition, ref _lerpPosX, ref _lerpPosY, ref _lerpPosZ);
        SetSerializedVector3ToBools(SerializeRotation, ref _lerpRotX, ref _lerpRotY, ref _lerpRotZ);
        SetSerializedVector3ToBools(SerializeScale, ref _lerpScaleX, ref _lerpScaleY, ref _lerpScaleZ);

        _easyControlsButtonVisible = true;
        _submitButtonVisibile = true;

        _lerpPositionChanged = lerpPositionChanged;
        _serializePositionChanged = serializePositionChanged;
        _lerpRotationChanged = lerpRotationChanged;
        _serializeRotationChanged = serializeRotationChanged;
        _lerpScaleChanged = lerpScaleChanged;
        _serializeScaleChanged = serializeScaleChanged;
    }